Perl中的 – >和::有什么区别

前端之家收集整理的这篇文章主要介绍了Perl中的 – >和::有什么区别前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
::和 – >之间的确切区别是什么?在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’ – >方法,不是。

原文链接:https://www.f2er.com/Perl/172934.html

猜你在找的Perl相关文章