试图在Perl中告诉我什么是“在范围内(或翻转)使用统一值$。”

太空麋

我在Perl中有以下代码片段:

my $argsize = @args;
if ($argsize >1){
    foreach my $a ($args[1..$argsize-1]) {
    $a =~ s/(.*[-+*].*)/\($1\)/; # if there's a math operator, put in parens
    }
}

在执行时,我得到“范围(或翻转)中使用统一值$。,后跟参数“”在数组元素中不是数字,都指向foreach行。

有人可以帮助我解读错误消息(并解决问题)吗?我有一个数组@args的字符串。该代码应循环通过第二个到第n个元素(如果存在),并且如果单个args包含+,-或*,则将它们用()包围。

我不认为错误源于args中的值,我认为我以某种方式搞定了范围...但是当args具有> 1个元素时,我却失败了。一个例子可能是:

<"bla bla bla">  <x-1>  <foo> 
清醒

它的长短是-您的foreach行断开:

foreach my $a (@args[1..$argsize-1]) {

工作正常。这是因为您使用的$是表示“标量值”的而不是@表示数组(或列表)的。

如果use diagnostics得到的话;

使用未初始化的值$。在(W未初始化)的范围内(或翻转)。使用未定义的值,就好像它已被定义一样。它被解释为“”或0,但也许是错误的。为消除此警告,请为变量分配一个已定义的值。

为了帮助您弄清未定义的内容,perl会尝试告诉您未定义的变量的名称(如果有)。在某些情况下,它不能执行此操作,因此它还告诉您使用了未定义值的操作。但是,请注意,perl会优化您的程序,警告中显示的操作不一定一定会在您的程序中出现。例如,通常将“ that $ foo”优化为“ that”。$ foo,并且警告将引用级联(。)运算符,即使没有。在您的程序中。

您可以通过以下方式重现此错误:

my $x = 1..3;

实际上,这实际上是您在此处所做的事情-您正在尝试将数组值分配给标量。

这个问题有更多的细节:

带范围运算符的Perl上下文是什么?

但基本上:将其视为范围运算符,就好像您正在处理文件一样。您将可以通过此运算符对文件中的特定行进行“操作”。

例如:

use Data::Dumper;
while (<DATA>) {
    my $x = 2 .. 3;
    print Dumper $x;
    print if $x;
}

__DATA__
line one
another line
third line
fourth line

该范围运算符正在测试行号-并且因为您没有行号(因为您没有迭代文件)所以它会出错。(但是,否则可能会起作用,但是您会得到一些非常奇怪的结果;)

但是我建议您以一种复杂的方式进行操作,并使(可能会是)错误,因为您将数组从1开始而不是从0开始。

您可以改为:

s/(.*[-+*].*)/\($1\)/ for @args; 

哪个会有相同的结果。

(如果您需要跳过第一个参数:

my ( $first_arg, @rest ) = @args; 
s/(.*[-+*].*)/\($1\)/ for @rest;

但是在运行时出现此错误是您正在馈入某些数据的结果。但是,您在这里得到的是:

use strict;
use warnings;

my @args =  ( '<"bla bla bla">',  '<x-1>',  '<foo>' );

print "Before @args\n";
s/(.*[-+*].*)/\($1\)/ for @args;
print "After: @args\n";

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

您能告诉我为什么这些方法不在范围内吗?

这个Ecto Constraint Error试图告诉我什么?

为什么我的Xcode编译器告诉我即使使用类也使用值类型?

试图通过MPI中的多个等级绕行发送阵列,但遇到段错误。谁能告诉我为什么?

试图删除我范围内具有错误值的行

谁能告诉我为什么不返回该值?

VBA:StrComp-返回值告诉我什么?

有人可以告诉我为什么我不理解此示例中的范围吗?

在bash中的浮动范围内生成统一的随机数

这个错误试图告诉我什么,我该如何解决?

MySQL EXPLAIN中的“已过滤”列告诉我什么,如何使用它?

从范围内的数组中获取唯一值?

谁能告诉我为什么 JavaScript 中的 {For} 循环返回所有值,包括数组的第一个元素?

如何使用Python中同一列的值填充范围内的列?

检测列中的最后一个条目以搜索使用范围内的值

在一个查询中,MySQL SELECT值在范围内,而下一个值在范围内

使用nodejs和套接字,我试图在循环中将流一起加载。有人可以告诉我我要去哪里错吗?

为什么我已经声明了Perl却告诉我我的数组未声明?

谁能告诉我为什么我得到IndexError:列表索引超出范围?

有人能告诉我什么是 iOS 中的移动设备证书认证吗?使用它的目的是什么?

选择在一定范围内的值,但排除在 Sqlite 中确定范围的值

斯威夫特告诉我_:是什么?

auto &&告诉我们什么?

CMake告诉我什么(Windows错误)?

这是想告诉我什么?

为什么使用 Nsurl 请求一直告诉我重命名为“init(url)”

对范围内的多个值使用 XLookup

使用IF获得的范围内的值计数

对变量使用范围内的值