2011-01-13 10 views
2

なぜ '"%hash" "はスカラーや配列の場合と同じように動作しません。なぜ "%hash"はスカラーや配列の場合と同じように動作しないのですか?

#!/usr/bin/perl 
use strict; 
use warnings; 
use Modern::Perl; 
use Test::More; 

my $s = "Hello, World!"; 
say $s; 
say "$s"; 

my @a = ("Hello", "World!"); 
say @a; 
say "@a"; 

my %h = ("Hello", "World!"); 
say %h; 
say "%h"; 

D:\TEST\perl>perl 1.pl 
Hello, World! 
Hello, World! 
HelloWorld! 
Hello World! 
HelloWorld! 
%h 
+0

iは – Gordon

+0

@toolic補間(二重引用符は、特殊なケースであるの) 'qq'オペレータによって実行される「と言う」見初めて。 'print'や' say'は補間を行わず、処理された文字列を受け取って出力します。 –

+0

@Gordon 'say'は、2007年12月18日の5.10.0以降、Perlの安定版リリースの一部です。 –

答えて

7

printfの構文が無効になるため、

%d = ('key' => 'value'); 
printf "The answer is %d\n", 4; # is %d a format symbol or the hash table? 
6

簡潔な答えは、「それがその方法なので」です。 Sigil%は二重引用符で囲まれた文字列の補間をトリガしません。

私は明確な合理化を持っていないが、それは次の組み合わせが考えられます。printfスタイルのフォーマット

  • それを行うのない一つの方法はありませんと

    • 競合。あなたはスペース区切りが好きですか?キーのみ?ペアとキーとその値の間の異なるセパレータ?
  • 関連する問題