2012-05-29 38 views
0

在下面的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. 

这是怎么回事?

+3

我只是想指出,从OP这一行:“注释掉‘使用严格的’没有帮助” - *捂脸*不幸的是我真的不知道该怎么用建设性的方式解释问题。但有人应该,只是说。 – djechlin

+4

我的车发生了故障。我无法控制,在车上的山坡上溺爱,以致死亡。即使拆下安全带也没有帮助。 – Borodin

+3

在烹饪时我会烧很多东西,大厅里的火警真的很烦人,所以我摆脱了它。似乎没有帮助我的烹饪寿... – delicateLatticeworkFever

回答

5

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

my $ret = system($pisa_start);

%$

这些是你使用的两条不相符的线。如果它仍然对你看起来不错,那么请阅读你最喜欢的关于变量的Perl教程。

3

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

你大概的意思是:

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