2012-05-29 1 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: «Комментирование„использовать строгий“не помогает» - * Facepalm *, к сожалению, я не знаю, как объясните проблему с этим конструктивно. Но кто-то должен, просто сказать. – djechlin

+4

У моей машины была ошибка. Я вышла из-под контроля, пробираясь вниз по холму в моей машине до определенной смерти. Даже снятие ремня безопасности не помогло. – Borodin

+3

Я много горюю во время приготовления пищи, и пожарная тревога в зале действительно раздражает, поэтому я избавился от нее. Кажется, мне не помогает моя кулинария ... – delicateLatticeworkFever

ответ

5

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

my $ret = system($pisa_start);

% v. $.

Это две линии, которые вы использовали, которые не соглашаются друг с другом. Если он все еще не выглядит вам нехорошим, прочитайте свой любимый учебник Perl по переменным.

3

Вы не объявляли $pisa_input в любом месте, и вы используете хэш-карту с именем то же самое (%pisa_input).

вероятно Вы имели в виду:

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