2011-07-18 33 views
7
#!/usr/bin/perl 
use warnings; 

my %hash=("no1"=>1, 
     "no2"=>2, 
    ); 

print %hash; #Prints no11no22 
print "%hash"; #Prints %hash 

Tại sao Perl không hỗ trợ nội suy của băm trong dấu ngoặc kép? Nó hỗ trợ nội suy cho vô hướng ($), mảng (@) sau đó tại sao không cho băm (%)?Tại sao Perl không hỗ trợ nội suy của băm trong dấu ngoặc kép?

+2

Tôi không nghĩ cuốn sách nấu ăn Perl đã có sẵn một cách tự do, hợp pháp – MkV

+0

Ya, đó là bất hợp pháp. –

+2

Giải pháp thay thế là đưa một băm vào tham chiếu mảng và sau đó dereference nó: 'print" @ {[% hash]} "' – mob

Trả lời

15

Băm nên xâu chuỗi như thế nào? Scalars là rõ ràng và mảng quá. Nhưng băm nên là gì? Việc xâu chuỗi như vậy sẽ hữu ích như thế nào? Nó có hữu ích hơn hay ít hơn việc có thể sử dụng một ký tự không bị thoát trong một chuỗi nội suy? Có đáng để số lượng công việc cần thiết để sửa tất cả mã sử dụng% trong chuỗi nội suy ngày nay không?

Nếu bạn có thể đưa ra câu trả lời hay cho những câu hỏi này, thì tôi chắc chắn P5P sẽ sẵn sàng lắng nghe chúng.

+0

Tôi rất ngạc nhiên khi nội suy của băm được xem là khác biệt nhiều so với các mảng và Tôi có thể biết lý do tại sao việc xâu chuỗi các mảng là cần thiết và không phải là mảng băm không? – Salil

+0

@Salil Việc xâu chuỗi các mảng là cần thiết cho khả năng tương thích ngược, nếu nó có thể được loại bỏ khỏi ngôn ngữ, nó có thể sẽ được. Perl 6 không có nội suy mảng, thay vào đó nó có nội suy biểu thức, hoạt động tốt hơn nhiều: '{@ a.join (',')}" 'và' "{% h.perl}" '. –

21

Trích dẫn Nathan Torkington: "Vấn đề lớn là% được sử dụng nhiều trong các chuỗi được trích dẫn kép với printf." Thông tin thêm là here.

+0

Cảm ơn bạn đã liên kết –

4

Không thực sự là câu trả lời cho "lý do", nhưng tôi nghĩ tôi sẽ chỉ ra các câu trả lời khác nhau cho "cách".

Người ta có thể, tất nhiên, hãy thử:

#!/usr/bin/perl 
use warnings; use strict; 

my %hash = (
    "no1" => 1, 
    "no2" => 2, 
); 

print "@{[ %hash ]}\n"; 

Nhưng, tôi không biết những gì sử dụng đó sẽ là.

Nếu bạn muốn kết xuất nội dung của băm hoặc bất kỳ cấu trúc dữ liệu phức tạp nào khác, hãy sử dụng Data::Dumper hoặc YAML hoặc JSON tùy thuộc vào trường hợp sử dụng của bạn.

+0

Kiểm tra Chas. Owen's commen t trên câu hỏi của tôi. –

+0

Rất tiếc! Tôi đã bỏ lỡ bình luận đó. Tôi nghĩ rằng tôi sẽ để lại câu trả lời này trong trường hợp những người khác bỏ lỡ bình luận là tốt. –

+0

Ya, điều đó tốt. –

Các vấn đề liên quan