Perl“全球符号”

时间:2012-05-29 20:29:37

标签: perl

在以下perl脚本中,

#!/usr/local/bin/perl
use Env;
use strict;
use warnings;
my $oscar_file = "input/oscar_single_piminus_1k.input";
my $PISAEvent_file  = "output/PISAEvent_piminus_1k.root";
my %pisa_input = "pisa_piminus_1k.input" ;
my %pisa_start = "pisa < pisa_piminus_1k.input";
my $nevents = 1000;
open(INPUT, ">" . $pisa_input);
print INPUT "0\nN\n0\n";
close(INPUT);
open(INPUT2,">glogon.kmac");
print INPUT2 "macro glogon.kumac\npisafile $PISAEvent_file\ntext_file $oscar_file -1 1\nptrig $nevents\nexit\nreturn\n";
close(INPUT2);
my $ret = system($pisa_start);

它返回以下错误,

Global symbol "$pisa_input" requires explicit package name at pisa.pl line 26.
Global symbol "$pisa_start" requires explicit package name at pisa.pl line 32.
Execution of pisa.pl aborted due to compilation errors.

评论“使用严格”并没有帮助,

Name "main::pisa_input" used only once: possible typo at pisa.pl line 26.
Name "main::pisa_start" used only once: possible typo at pisa.pl line 32.
Odd number of elements in hash assignment at pisa.pl line 15.
Odd number of elements in hash assignment at pisa.pl line 20.
Use of uninitialized value in concatenation (.) or string at pisa.pl line 26.
print() on closed filehandle INPUT at pisa.pl line 27.
Use of uninitialized value in system at pisa.pl line 32.

发生了什么事?

2 个答案:

答案 0 :(得分:5)

my %pisa_start = "pisa < pisa_piminus_1k.input";

my $ret = system($pisa_start);

% v。$

这些是您使用的两条彼此不一致的行。如果你看起来仍然不错,请阅读你喜欢的关于变量的Perl教程。

答案 1 :(得分:3)

您没有在任何地方声明$pisa_input,并且您正在使用名为相同(%pisa_input)的散列图。

你可能意味着:

my $pisa_input = "pisa_piminus_1k.input" ;
my $pisa_start = "pisa < pisa_piminus_1k.input";