相关疑难解决方法(0)

Perl中双'at'(@@)的含义是什么?

我正在审查我们使用的Perl工具提供的供应商提供的补丁,我正在努力确定特定类型的更改的原因 - 传递给子例程的参数的'@'预先挂起.

例如,一行是:

my ($genfd) = @_;
Run Code Online (Sandbox Code Playgroud)

就是现在:

my ($genfd) = @@_;
Run Code Online (Sandbox Code Playgroud)

不是Perl开发人员,我在这里学习,但到目前为止,我知道'@_'是提供给封闭子程序的参数.

我也理解上面的赋值('$ genfd'包含在左侧的括号中)将'@_'强制转换为列表,然后将'genfd'标量变量赋给该列表的第一个元素.这应该导致子程序的第一个参数存储在'genfd'中.

我完全坚持的是第二个'@'的不同之处.我在GitHub上找到了这种用法的例子,但从未提供过解释,也无法找到任何Perl引用或SO的解释.任何帮助将非常感激.

variables syntax perl

8
推荐指数
1
解决办法
626
查看次数

为什么Dumper模块会在其设置哈希的分配周围放置parens?

看了这个问题,并且这个问题上的分歧my $varmy ($var),我仍然无法理解为什么数据::翻车机模块中从以下代码摘录使用括号.这些问题的答案中描述的差异似乎都不适用于此.

  my($s) = {
        level      => 0,           # current recursive depth
        indent     => $Indent,     # various styles of indenting
        # a bunch of other settings removed for brevity's sake
        deparse    => $Deparse,    # use B::Deparse for coderefs
        noseen     => $Sparseseen, # do not populate the seen hash unless necessary
       };
Run Code Online (Sandbox Code Playgroud)

我用一个小脚本测试了它,我觉得在声明这个my ($s)或者之间没有任何区别my $s.在这两种情况下,它都是哈希的标量引用,据我所知.

我错过了什么吗?

perl

4
推荐指数
1
解决办法
81
查看次数

标量 vs 列表赋值运算符

请帮助我理解以下片段:

  • my $count = @array;
  • my @copy = @array;
  • my ($first) = @array;
  • (my $copy = $str) =~ s/\\/\\\\/g;
  • my ($x) = f() or die;
  • my $count = () = f();
  • print($x = $y);
  • print(@x = @y);

perl assignment-operator

4
推荐指数
1
解决办法
253
查看次数

perl中$ name和($ name)变量之间的区别

我想知道是否有人可以解释之间的差异$name($name).

例如:

my @objects = ('specs','books','apple');
my ($fruit) = grep { $_ eq 'apple'} @objects;
Run Code Online (Sandbox Code Playgroud)

这给出了结果$fruit = 'apple'.但是,如果将第二个语句修改为:

$fruit = grep { $_ eq 'apple'} @objects;
Run Code Online (Sandbox Code Playgroud)

水果的价值评估为1.这是相关/具体的grep吗?

perl

3
推荐指数
1
解决办法
146
查看次数

perl分配对子程序的引用

我在子例程中使用@_来获取一个参数,该参数被指定为数组的引用,但结果不会显示为数组引用.

我的代码在下面.

my @aar = (9,8,7,6,5);

my $ref = \@aar;

AAR($ref);

sub AAR {
   my $ref = @_;
   print "ref = $ref";
}
Run Code Online (Sandbox Code Playgroud)

这将打印1,而不是数组引用,但如果我用shift替换@_,则打印结果将是引用.

任何人都可以解释为什么我不能使用@_给我一个参考?

perl

3
推荐指数
1
解决办法
102
查看次数

Perl:($ num)和$ num之间的差异

有人可以向我解释为什么这是差异:

my $num = '>33*1311875297587*eval*0*frame[0]*"A"<' =~ /(\d{3,})/;
> $num = 1
my ($num) = '>33*1311875297587*eval*0*frame[0]*"A"<' =~ /(\d{3,})/;
> $num = 1311875297587
Run Code Online (Sandbox Code Playgroud)

我很好奇看到有什么恶作剧在等我.

谢谢

regex perl regex-group

2
推荐指数
1
解决办法
155
查看次数

子程序没有返回正确的整数

我将数据传递给子例程,但子例程没有返回正确的值.

test(5);

sub test {
    my $t = @_;
    return $t;
}
Run Code Online (Sandbox Code Playgroud)

它应该返回5但正在返回2.我正在使用Mojolicious,但我认为这不应该有所作为,因为它只是一个函数?

perl subroutine

2
推荐指数
1
解决办法
66
查看次数

子例程中的Perl特殊变量"@_"不起作用

此脚本从下载的网页中删除网址.我在使用这个脚本时遇到了一些麻烦 - 当我使用它"my $csv_html_line = @_ ;" 然后打印出来时"@html_LineArray"- 它只是打印出来"1's".当我更换 "my $csv_html_line = @_ ;"使用"my $csv_html_line = shift ;"脚本工作正常.我不知道有什么不同之处"= @_" and shift- 因为我认为没有具体说明,在子程序中,转移从"@_".

#!/usr/bin/perl
use warnings;
use strict ;

sub find_url {
    my $csv_html_line = @_ ;
    #my $csv_html_line = shift ;
    my @html_LineArray = split("," , $csv_html_line ) ;
    print "@html_LineArray\n" ;
    #foreach my $split_line(@html_LineArray) {
    #    if ($split_line =~ m/"adUrl":"(http:.*)"/) {
    #        my $url = $1;
    #        $url …
Run Code Online (Sandbox Code Playgroud)

perl subroutine special-variables

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