perlのpackage越しのサブルーチン呼び出し時の引数

perlでpackage越しのサブルーチンを呼ぶ際に"::"と"->"だと引数が違う気がしていたけど、あまりよく考えていなかった。というわけでこんなスクリプトを書いた。

$ cat package_args.pl
#!/usr/bin/env perl

package Foo;
use Data::Dumper;

sub bar {
  print Dumper(\@_);
}

package main;

print "Foo::bar\n";
Foo::bar;

print "\n";

print "Foo->bar\n";
Foo->bar;

1;

さて、実行してみる。

$ perl package_args.pl
Foo::bar
$VAR1 = [];

Foo->bar
$VAR1 = [
          'Foo'
        ];

つまり、

  • Foo::bar() だと引数にパッケージが含まれない
  • Foo->bar()だと第1引数にパッケージが含まれる