相关疑难解决方法(0)

func2如何知道上下文?

func1(func2);
Run Code Online (Sandbox Code Playgroud)

我们知道Perl需要知道要评估的上下文,但在上面的例子中,如何func2知道它在标量或列表上下文中?

perl

0
推荐指数
1
解决办法
54
查看次数

使用Perl的原型有什么缺点吗?

我想在参数列表周围不使用括号来调用我的潜艇.例如,我想使用

mypush \@list, $item;
Run Code Online (Sandbox Code Playgroud)

代替

mypush(\@list, $item);
Run Code Online (Sandbox Code Playgroud)

为了实现这一点,我已经用原型声明了我的子.

sub mypush (+@) { push shift, @_ }
Run Code Online (Sandbox Code Playgroud)

事实上,这也允许我进行以下操作,但这只是一个奖励:

mypush @list, $item;
Run Code Online (Sandbox Code Playgroud)

除了在代码中的任何地方使用它们之前必须使用原型声明子例程之外,在Perl中使用原型是否有任何严重的缺点?

代码看起来对我来说绝对清晰.但一般情况下原型出错的地方?我什么时候后悔呢?

perl prototype subroutine

0
推荐指数
1
解决办法
135
查看次数

perl中的子例程参数

我已浏览了几个,他们都使用Perl模块的$$%,$$,$$$,@,$%,@..等在功能参数.

我知道$$在参数中确保您必须传递2个非可选参数和$1个非可选参数.其他人也有类似的含义吗?

perl

0
推荐指数
1
解决办法
87
查看次数

在perl脚本中使用$ self创建实例时出错

我尝试在perl脚本中创建一个对象.因此我有一个构造函数

new(;@)
{
     my $class = shift;
     my $self = {};
     bless $self, $class;
     $self->_init(@_);
     return $self;
}
Run Code Online (Sandbox Code Playgroud)

和我的_init(;@)功能,初始化对象

my $self = shift;
if( @_ )
{
    my %extra = @_;
    @$self{keys %extra} = values %extra;
}
return;
Run Code Online (Sandbox Code Playgroud)

我使用这两个功能的方式是错误的吗?我用两条线开始每隔一个子线

my $self = shift;
croak "instance method called for class" unless ref $self;
Run Code Online (Sandbox Code Playgroud)

但是我每次使用它时都会得到syntax/ String found where operator expected错误.

因此我的问题是:我是否正确使用这两种功能?我一直认为我只需要$self像我一样初始化一次,并且可以为脚本的其余部分指出我想要的一切.

perl attributes self shift

0
推荐指数
1
解决办法
50
查看次数

使用"\"通过引用子程序w/o来传递哈希:my_subroutine(%my_hash)

我如何通过引用子例程来传递哈希,而不使用\子例程调用表达式中的字符my_subroutine(%my_hash)


更多解释 :( 如果以前的单行问题不够具有描述性)

通过引用变量通过引用子例程而不使用\子例程调用表达式中的字符,my_subroutine($my_var)可以通过定义子例程来实现:

sub my_subroutine {
    my $var_ref = \shift;
    ...
}
Run Code Online (Sandbox Code Playgroud)

我已尝试使用哈希相同的方法,但它无法正常工作:

sub my_subroutine {
    my $hash_ref = \shift;
    ...
}
Run Code Online (Sandbox Code Playgroud)

我认为这是因为perl片段在列表(一维数组)中传递哈希的键 - 值对,这@_也与传入的数组相同(但是对于不使用键的值).

我正在寻找一个解决方法,使得每次调用子程序时都my_subroutine(%my_hash)需要通过反斜杠字符在我的子程序参数(哈希)之前进行传递哈希引用\.这将有助于使我的主代码看起来更整洁,并让不整洁的内容看到子程序的内部.此外,如果我与一大群开发人员合作,有人可能会忘记添加引用字符.我需要在子例程中设置(哈希总是通过引用my_subroutine传递)而不是由调用my_subroutine的其他开发人员设置.

perl

0
推荐指数
1
解决办法
435
查看次数

Perl子例程声明意外符号

我一直在看一些Perl代码,它有一些对我没用的子例程声明.它们显示为:

foo($$$$;$);
foo(\$\$\$);
Run Code Online (Sandbox Code Playgroud)

符号是什么";" 和"\"在这些声明中做或意味着什么?

syntax perl declaration function-declaration

-1
推荐指数
1
解决办法
56
查看次数