我有一個在 Perl < 5.36 下運行良好的腳本:
#!/usr/bin/env perl
use strict;
use warnings FATAL => 'all';
use feature 'say';
use autodie ':all';
use Parallel::ForkManager;
sub execute {
my $command = shift;
print "Executing Command: $command\n";
if (system($command) != 0) {
my $fail_filename = "$0.fail";
print "$command failed.\n";
die;
}
}
sub run_parallel {
my $cmd = shift;
my $manager = new Parallel::ForkManager(2);
foreach my $command (@{ $cmd }) {
$manager->start and next;
execute( $command );
$manager->finish;
}
$manager->wait_all_children;#necessary after all lists
}
my @commands = ('echo "a"','echo "b"','echo "c"','which ls','which rm');
run_parallel(\@commands);
但是當我對5.36的上述內容進行細微更改時:
#!/usr/bin/env perl
use 5.036;
use warnings FATAL => 'all';
use autodie ':all';
use Parallel::ForkManager;
sub execute {
my $command = shift;
print "Executing Command: $command\n";
if (system($command) != 0) {
my $fail_filename = "$0.fail";
print "$command failed.\n";
die;
}
}
sub run_parallel {
my $cmd = shift;
my $manager = new Parallel::ForkManager(2);
foreach my $command (@{ $cmd }) {
$manager->start and next;
execute( $command );
$manager->finish;
}
$manager->wait_all_children;#necessary after all lists
}
my @commands = ('echo "a"','echo "b"','echo "c"','which ls','which rm');
run_parallel(\@commands);
我收到一個錯誤:
Bareword found where operator expected at debug.pl line 20, near "new Parallel::ForkManager"
我切換的只是use 5.036
與 perl 5.36不Parallel::ForkManager兼容還是我做錯了什么?
uj5u.com熱心網友回復:
Perl v5.36use v5.36關閉了間接物件表示法,其中方法位于呼叫者之前:
my $p = new Some::Module; # indirect object notation
my $p = Some::Module->new(); # what you should do
如果這在短期內對您不方便,您可以require使用最低版本,這樣您仍然可以通過以下方式關閉這些功能use v5.36:
require v5.36;
如果您實際上不使用 v5.36 功能,還可以考慮要求您的代碼實際需要的最低版本。在您的代碼段中,我沒有立即看到任何最低版本要求(除了 Perl 5)。
uj5u.com熱心網友回復:
加載 5.36 功能包(您通過 執行use 5.036;)禁用間接方法呼叫語法,就像您已經完成一樣no feature qw( indirect );。
這是使用間接語法的方法呼叫:
METHODNAME INVOCANT ARGS
重新啟用該功能或??使用“直接”語法:
INVOCANT->METHODNAME( ARGS )
在你的情況下,
my $manager = Parallel::ForkManager->new( 2 );
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/513189.html
標籤:perl并行处理
上一篇:使用包含$符號的perl將字串替換為包含$符號和bash變數的其他字串
下一篇:Perl變數名前的*是什么意思?
