::和 – >之间的确切区别是什么?在Perl?
– >有时工作在::不。
解决方法
::有两个用途。
>它是包名称中的命名空间分隔符
use Foo::Bar; # Load Foo/Bar.pm $Foo::Bar::var # $var in namespace Foo::Bar
>附加到一个裸字,它创建一个字符串文字[1]。
以下内容与’hello’相同,只是如果包hello不存在则会发出警告:
hello::
– >有两个用途。
>它用于解除引用。
$array_ref->[$i] $hash_ref->{$k} $code_ref->(@args)
CGI->new() # Static method call $cgi->param() # Object method call
你可能会问它们之间有什么区别
Foo::Bar::mysub()
和
Foo::Bar->mysub()
前者是函数调用。后者是方法调用。方法调用就像一个函数调用,有两个不同之处:
>方法调用使用继承。
>方法调用将调用者( – >的左侧)作为其第一个参数传递给子。
{ package Foo::Baz; sub new { my ($class,$arg) = @_; my $self = bless({},$class); $self->{arg} = $arg; return $self; } sub mysub1 { my ($self) = @_; print($self->{arg},"\n"); } } { package Foo::Bar; our @ISA = 'Foo::Baz'; sub mysub2 { my ($self) = @_; print(uc($self->{arg}),"\n"); } } my $o = Foo::Bar->new('hi'); # Same as: my $o = Foo::Baz::new('Foo::Bar','hi'); $o->mysub1(); # Same as: Foo::Baz::mysub1($o); $o->mysub2(); # Same as: Foo::Bar::mysub2($o);
笔记
> Foo->方法欺骗性地调用名为Foo的子(如果它存在)(使用它作为调用者返回的值)。 Foo :: – >方法,意思是’Foo’ – >方法,不是。