Why doesn't Perl support interpolation of hashes in double quotes?

后端 未结 3 1234
不思量自难忘°
不思量自难忘° 2021-01-02 13:31
#!/usr/bin/perl
use warnings;

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

print %hash; #Prints no11no22
print \"%hash\"; #Prints %hash
相关标签:
3条回答
  • 2021-01-02 14:14

    To quote Nathan Torkington: "The big problem is that % is heavily used in double-quoted strings with printf." More information is here.

    0 讨论(0)
  • 2021-01-02 14:20

    How should a hash stringify? Scalars are obvious and arrays too. But what should a hash be? How useful will such a stringification be? Is it more or less useful than being able to use a % character unescaped in an interpolating string? Is it worth the amount of work it will take to fix all of the code that uses % in interpolated strings today?

    If you can come up with good answers to these questions, then I am sure P5P would be willing to listen to them.

    0 讨论(0)
  • 2021-01-02 14:25

    Not really an answer to the "why", but I thought I would point out various answers to the "how".

    One could, of course, try:

    #!/usr/bin/perl
    use warnings; use strict;
    
    my %hash = (
        "no1" => 1,
        "no2" => 2,
    );
    
    print "@{[ %hash ]}\n";
    

    But, I don't know what use that would be.

    If you want to dump the contents of a hash or any other complicated data structure, use Data::Dumper or YAML or JSON depending on your use case.

    0 讨论(0)
提交回复
热议问题