gpt4 book ai didi

regex - Bareword 在 Perl 脚本中的错误处找到了运算符(operator)预期的位置

转载 作者:行者123 更新时间:2023-12-03 09:53:32 24 4
gpt4 key购买 nike

我有一个脚本在我的本地系统(Windows 10 中的 Cygwin)中运行良好。

但是当我在 Linux 机器 x86_64 GNU/Linux 中运行相同的程序时,会显示以下错误:

Bareword found where operator expected at script.pl line 22, near "s/$regex/$1,/rg"
syntax error at script.pl line 22, near "s/$regex/$1,/rg"
Execution of script.pl aborted due to compilation errors.

这是我的脚本:

#!/usr/bin/perl

use strict;
use warnings;
use Data::Dumper;

my $site_name = $ARGV[0];
my $type_of_site = $ARGV[1];

chomp($site_name);
chomp($type_of_site);

my $var = `sh shell_script.sh $site_name $type_of_site`;
#The above shell script gives me following data in $var
#"Result data [[The Incident result is shown with Node and IP address. error.log warning.log http://10.0.0.11/home/node_data/2020-07-08_data.txt NODE IP NODE1 10.0.0.1 NODE2 10.0.0.2 NODE3 10.0.0.3 NODE4 10.0.0.4 NODE5 10.0.0.5 ]]";

print $var;

my $regex = qr/.*?(?P<Node>\w+)\s(?:(?:\d{1,3}\.){3}\d{1,3}) ?]?]?/mp;

my $result = $var =~ s/$regex/$1,/rg;

chop $result;

my @nodes_list = split /,/, $result;

print Dumper(\@nodes_list);

我正在使用正则表达式从 shell 脚本结果数据中提取节点名称。但是为什么在linux环境下运行会报错呢?

最佳答案

my $result = $var =~ s/$regex/$1,/rg;

我没有那么旧的 perl 版本来测试,但是 r 修饰符是在 5.14 中添加的。如果您使用的是 5.10,我敢打赌这就是您所看到的错误的原因 - 它可以解释为什么它在较新版本上运行良好。 Perl 5.10 于 2007 年 12 月发布 - 从那时起已经进行了大量工作。如果可以的话,我会升级,可能使用 perlbrew

但与此同时... r 返回已转换字符串的新副本,而不是更改正则表达式绑定(bind)到的字符串。所以你可以尝试类似的东西

my $result = $var;
$result =~ s/$regex/$1,/g;

作为解决方法。

关于regex - Bareword 在 Perl 脚本中的错误处找到了运算符(operator)预期的位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62829525/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com