相关疑难解决方法(0)

Perl中我和本地有什么区别?

我看到他们在这个脚本中使用它们我试图调试,文献还不清楚.有人可以为我揭开这个神秘面纱吗?

perl scoping

63
推荐指数
9
解决办法
4万
查看次数

揭开Perl glob的神秘面纱(*)

这个问题中,海报询问如何在一行中执行以下操作:

sub my_sub {
    my $ref_array = shift;
    my @array = @$ref_array;
}
Run Code Online (Sandbox Code Playgroud)

凭借我对基本Perl魔法的了解,我可以通过简单地使用以下内容来避免:

sub my_sub {
    my $ref_array = shift;
    for (@$ref_array) {
      #do somthing with $_ here
    };

    #use $ref_array->[$element] here
}
Run Code Online (Sandbox Code Playgroud)

然而,在这个答案中,SO的当地僧侣之一提出:

sub my_sub {
  local *array = shift();
  #use @array here
}
Run Code Online (Sandbox Code Playgroud)

当我问

在尝试学习中级Perl魔法时,我可以问一下,你在这里设置什么是什么?您是否将@array的引用设置为已传入的arrayref?你怎么知道你创建@array而不是%array或$ array?我在哪里可以了解有关此*运算符的更多信息(perlop?).谢谢!

有人建议我把它作为一个新帖子,尽管他确实提供了很好的参考.无论如何,这里呢?有人可以解释什么被分配给什么以及如何创建@array而不是%array或$ array?谢谢.

perl glob

18
推荐指数
1
解决办法
7554
查看次数

外部"如果"的Perl匹配不会在循环上重置$ 1

我正在修补Zoidberg Perl shell以修复现代Perl版本在测试时抛出的一些错误.请注意,我不是原作者,也不是我批评他.我遇到了一个有趣的问题,我想要一点历史.

下面的代码采用一系列输入,每个条带关闭和结束sigil.然后它将该sigil存储在一个变量中,如果它没有找到它存储0.原始文件中的代码看起来像测试A,并且必须已经工作,直到并包括perl v5.8给出cpantesters结果.无论如何问题是如果s ///不在"if"测试中,循环时$ 1变量会持续使用最后一个值.这是我的测试.我想知道人们是否可以解释为什么会发生这种情况和/或为什么它曾经工作,我想我明白发生了什么.

#!/usr/bin/perl

use strict;
use warnings;

my @a = qw/n a$ b@ c/;
my @b = @a;
my @c = @a;

print "Test A -- Doesn't work (c !-> 0)\n";
for (@a) {
  s/([\$\@\%])$//;
  my $arg = $1 || 0;
  print $_ . " -> " . $arg . "\n";
}

print "\nTest B -- Works\n";
for (@b) {
  my $arg;
  if (s/([\$\@\%])$//) {;
    $arg = $1;
  }
  $arg ||= 0;
  print …
Run Code Online (Sandbox Code Playgroud)

regex perl

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

在Perl中检索特定的返回值

我正在寻找一个单行程,让我从子程序中获取第二个返回值.

而不是这个:

($a,$b)=function;
print $b
Run Code Online (Sandbox Code Playgroud)

应该可以做这样的事情

print ??? function
Run Code Online (Sandbox Code Playgroud)

perl

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

标签 统计

perl ×4

glob ×1

regex ×1

scoping ×1