У меня есть сценарий, который отлично работает в моей локальной системе (Cygwin в Windows 10).
Но когда я запускаю его на 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);
Я извлекаю имена узлов из результирующих данных сценария оболочки с помощью регулярного выражения. Но почему он показывает ошибку, когда я запускаю его в среде Linux?