이 문제에 대한 해결책을 찾으려고 노력했습니다. 하지만 도움이 필요할 것 같습니다. 내가 perl에서 시스템 명령에 인수의 무리를 전달하려고합니다. 하지만 관련없는 오류가 발생합니다. 올바른 범위로 내 변수를 올바르게 선언했지만 여전히이 오류가 발생합니다. 여기 내 코드가있다.perl - 시스템 명령 인수에 오류가 발생했습니다
#!/usr/bin/perl
use warnings;
use strict;
my $mi = 0;
my $mj = 0;
my @regbyte;
my @databyte;
my $filename;
my @args;
@regbyte = ("00","01","02","03","04","05","06","07","08","09","0A","0B","0C","0D","0E","0F","10","11","12");
@databyte = ("00","01","02","03","04","05","06","07","08","09", "0A", "0B");
for($mi=0; $mi<13; $mi++)
{
for($mj=0; $mj<256; $mj++)
{
$filename = "write_" . $regbyte[$mi] . "_" . $databyte[$mj] . ".atp";
system("perl perl_2_ver2.5.pl", $filename, $regbyte[$mi], $databyte[$mj], "n");
}
}
오류 메시지가 표시됩니다.
Global symbol "$databyte" requires explicit package name at perl_2_ver2.8.pl line 20.
Execution of perl_2_ver2.8.pl aborted due to compilation errors.
내가 같은 오류 어 얻지 않는다 나는 당신의 코드를 시도하고 확인한다. 축 어적으로 복제되었는지 확신합니까? 또한 논리 오류가 있다고 생각합니다. @databyte의 256 요소를 반복하지만 많은 요소가 없습니다. (foreach 루프는 어쨌든 당신이하고있는 것에 더 적합 할 것이다.) – Sobrique
우리에게'perl_2_ver2.8.pl' 스크립트를 보여주는 스크립트가 있습니까? 그렇지 않다면 관련 Perl 코드가 표시되지 않습니다. 그렇다면 왜 다시 스크립트를 실행하여 '재귀'하고 있습니까? '@ args'를 제거 할 수 있으며, 당신이 정의한 라인에서'@regbyte'와'@ databyte'를 초기화 할 수 있습니다. '$ mi','$ mj' 및'$ filename'은 모두 여러분이 가진 것보다 훨씬 작은 범위를 줄 수 있습니다. –
표시되는 오류 메시지가 Perl 소스 코드와 일치하지 않습니다. 라인 20은'system' 호출이지만'$ databyte'라는 변수에 접근하지 않습니다. 에러 메시지를 생성하지 않는'@ databyte' 배열의 원소에 접근하고 있습니다. – Borodin