1

参考書を学んでいます。Intermediate Perl (2nd edition) : Chapter 5 (References and Scoping) という本の中で、次のコードが与えられています:

my $ref;
{
    my @skipper = qw(blue_shirt hat jacket preserver sunscreen); # ref count is 1
    $ref = \@skipper; # ref count is 2
    print "$ref−>[2]\n"; # prints jacket\n
}
print "$ref−>[2]\n"; # still prints jacket\n # ref count is 1

このコードを実行すると、次の出力が得られました。

ARRAY(0x83fc890)−>[2]

ARRAY(0x83fc890)−>[2]

プリントジャケットかと思った。

http://ideone.com/y8ZLsp

引用符なしで実行しようとすると、次の出力が得られました。

Unrecognized character \xE2; marked by <-- HERE after print $ref<-- HERE near column 12 at prog.pl line 5.

http://ideone.com/V9GbUe

私はもう少し試しました:

$$ref[2]#働いた

${$ref}[2]#働いた

そう、

本に記載されているコードは間違っていますか? (良い本だと言われました - 私はそれを読んでいますが、それが素晴らしいと思います。それが印刷ミスだったのか、それとも私が何か間違ったことをしているのかはわかりません)

4

1 に答える 1

7

マイナス記号"−"( U+2212) を使用しています。"-"これは、ASCII ハイフンマイナス( )と同じではありませんU+002D

コードに実際に何が含まれているか見てみましょう。

use Data::Dumper;
$Data::Dumper::Useqq = 1;
print Dumper <<'END';
my $ref;
{
    my @skipper = qw(blue_shirt hat jacket preserver sunscreen); # ref count is 1
    $ref = \@skipper; # ref count is 2
    print "$ref−&gt;[2]\n"; # prints jacket\n
}
print "$ref−&gt;[2]\n"; # still prints jacket\n # ref count is 1
END

出力 (改行を物理的な改行に変更):

my \$ref;
{
    my \@skipper = qw(blue_shirt hat jacket preserver sunscreen); # ref count is 1
    \$ref = \\\@skipper; # ref count is 2
    print \"\$ref\342\210\222>[2]\\n\"; # prints jacket\\n
}
print \"\$ref\342\210\222>[2]\\n\"; # still prints jacket\\n # ref count is 1
于 2013-08-03T12:45:56.387 に答える