Perlコーディング初心者質問スレ Part 61
■ このスレッドは過去ログ倉庫に格納されています
0236nobodyさん
2010/09/21(火) 08:10:37ID:???http://perldoc.perl.org/perlop.html#The-Arrow-Operator
http://perldoc.jp/docs/perl/5.12.1/perlop.pod
a. 右辺が [Num] なら左辺を配列リファレンスと看做し、添え字 Num の値を返す。
右辺が {Key} なら左辺をハッシュリファレンスと看做し、キー Key の値を返す。
右辺が (Args) なら左辺をコードリファレンスと看做し、Args を渡して呼び出す。
my $ref = bless [qw( foo bar baz )], 'Foo';
print $ref->[1]; # bar
print { a => 'Foo', b => 'Bar', c => 'Baz' }->{'b'}; # Bar
sub { print join '-', @_ } -> (0..2, 'a'..'c'); # 0-1-2-a-b-c
b. 左辺がクラス(パッケージ)名かそれを収めたスカラー変数なら、右辺にはそのクラス
から辿れるサブルーチン名かそれを収めたスカラー変数、又はコードリファレンスを
収めたスカラー変数を置ける。この場合、右辺のサブルーチンには左辺が第1引数と
して渡される。他の引数は (...) を続ける事で渡せる。
sub Foo::foo { print map("[$_]", @_), "\n" }
my $bar = sub { print 'Bar:', map("[$_]", @_), "\n" }; # パッケージに依存しない
my($Baz, $baz) = ('Foo', 'foo');
Foo->foo, $Baz->foo, Foo->$baz; # [Foo]\n[Foo]\n[Foo]\n
Foo->foo('quux'), $Baz->$baz('quux'); # [Foo][quux]\n[Foo][quux]\n
Foo->$bar, $Baz->$bar('quux'); # Bar:[Foo]\nBar:[Foo][quux]\n
c. 左辺が bless されたリファレンスなら、bless されたクラスを元に b. 同様の動作
をする。第1引数にはクラス名でなくリファレンス自身が渡される。
$ref->$baz('quux'); # [Foo=ARRAY(0xhhhhhh)][quux]
■ このスレッドは過去ログ倉庫に格納されています