2010-11-20 4 views
9

다음 Perl 스크립트가 있습니다. 내가 ActivePerl의를 사용하여 Windows 7에서 실행하려고 :@ARGV는 Windows 7에서 ActivePerl을 사용하여 비어 있습니다.

#!c:\Perl64\bin\perl.exe -w 

use strict; 

my $mp3splt_exe = 'c:\Program Files (x86)\mp3splt\mp3splt.exe'; 

my $mp3splt_args = '-o "@n @f" -g "r%[@o @N]" -f -t 6.0'; 

print @ARGV; 
my $filename = $ARGV[0]; 

print "$mp3splt_exe $mp3splt_args $filename\n"; 

나는이처럼 실행하면

(당신이, 내가 mp3splt의 :-)에 대한 래퍼를 만들려고하고 볼 수) :

C : \의 Program Files (x86) \ mp3splt> run_mp3splt.pl

내가 얻을이 :

0 모든 1,232,145,316, I print @ARGV이, 아무것도 인쇄되지 도착 우선 그래서

, 그리고 두 번째, 내가 $filename = $ARGV[0]를 할당 $filenameundef, 그래서 경고를 얻을.

그래서 ... 내가 뭘 잘못하고 있니? 명령 줄 매개 변수가 스크립트에 전달되지 않는 이유는 무엇입니까?

+0

내 Win7 상자에서 스 니펫을 실행 했으므로 실제로 이상합니다. 실제로 작동했습니다. 어떤 버전의 펄을 사용하고 있으며 Windows 7에 맞는 버전을 설치 했습니까? 또한이 perl -e "print @ARGV"aaaa를 실행 해보십시오. 출력을 얻었는지 확인하십시오. 그렇지 않다면 확실히 펄 설치에 문제가 있습니다. 그렇게하면 스크립트에 충돌이 생기거나 선언 된 변수의 범위를 확인하는 등의 문제가 발생할 수 있습니다. –

답변

-2

저는 Windows 7이 shebang 라인을 이해하지 못한다고 확신합니다. perl run_mp3splt.pl a으로 실행하면 어떻게됩니까?

+5

Shebang은 문제가 될 수 없습니다. Windows는 확장 연결을 사용합니다. ActiveState 설치 프로그램은 '.pl'파일을 perl과 연결합니다. – jira

30

다른 사람들이 perl blah.pl asdf 작품을 지적한 반면 blah.pl asdf은 실패합니다. 이것은 perl 스크립트를 직접 실행할 때 Windows가 perl을 호출해야한다는 것을 인식하고 어떤 매개 변수도 아닌 perl에 스크립트 이름 만 전달하는 perl "%1" 규칙을 사용하기 때문입니다.

를 해결하려면, 당신은 조금 지루한 어떻게 그렇게 할 규칙

perl "%1" %*를 사용하는 창을 말할 필요 :

옵션 perlmonks에 따르면 1

, 명령 행에서 assocftype을 사용할 수 있어야합니다. 이 나를 위해 작동하지 않았다, assoc를 실행하려면

assoc .pl=PerlScript 
ftype PerlScript=perl.exe %1 %* 

7.

그러나 창에 관리자로 cmd를 실행해야합니다 : 당신이 help ftype를 입력하면 사실, 당신이 설치하는 방법 펄 알려줍니다 . Windows에서 연결을 무시했습니다. 레지스트리를 수정해야했습니다. Windows 7의 Default Programs 유틸리티를 실행하는 데 잘못된 지침이 있기 때문에 특정 파일 확장명에 사용할 프로그램을 지정할 수 있습니다. XP과 달리 이 아니며은 여러 명령 옵션 (오른쪽 클릭 메뉴에서 사용됨)을 지정할 수 있습니다. 만 누르면 두 번 클릭 할 때 사용되는 프로그램을 지정할 수 있습니다 파일 (또는 명령 행에서 foo.pl 실행).perl 또는 PerlScript에 대한 HKEY_CLASSES_ROOT

당신이 ASSOC/FTYPE 명령을 사용한 적이 있다면, 당신은 할 수 있습니다 항목 : 2

옵션은 레지스트리를 수정합니다. 앞에서 말했듯이 이것들은 무시 될 것입니다. pl_auto_file을 찾아, 그리고 command 드릴 다운 : 그 말에 누락 된 %*을 추가하고 당신은 갈 수 있어야한다 "C:\Perl\bin\perl.exe" "%1"

: 여기

HKCR\pl_auto_file\shell\open\command 

(Default)이 같은 설정해야합니다 : "C:\Perl\bin\perl.exe" "%1" %*

재부팅 할 필요가 없습니다.

옵션 3

당신이 게으른과 신뢰 경우, 당신이 .reg 파일로 이것을 사용하여 시도하고 레지스트리로 가져 오기 할 수 있습니다

Windows Registry Editor Version 5.00 

[HKEY_CLASSES_ROOT\pl_auto_file\shell\open\command] 
@="\"C:\\Perl\\bin\\perl.exe\" \"%1\" %*" 

이 만들하기에 충분해야한다 blah.pl asdf 작업.

+0

또한 (옵션 2 및 3의 경우)이 위치를 무시할 수있는 기존의 사용자 별 키가있을 수 있습니다. 과 같은 : HKEY_USERS \ S-X-X-XX-XXXXXXX-XXXXXX-XXXXXXX-XXXX \ Software \ Classes \ pl_auto_file. 이 키를 완전히 제거하고 옵션 2 또는 옵션 3에있는 키를 사용하는 것이 좋습니다. 그러나이 키를 편집하면 변경 사항이 사용자에게만 적용됩니다. – teeks99

6

은 내가 Win7에에서 실행하면되는 문제 했어 :

perl myprog.pl a b c 

프로그램이 제대로 (@ARGV에서) 매개 변수를 가지고,하지만 난 실행하는 경우 :

myprog.pl a b c 

프로그램 매개 변수를받지 못합니다.

웹에서 솔루션을 검색 한 결과 곧바로 ActiveState 펄 문제는 아니지만 Windows (Win7)의 파일 형식 연결 문제 (PerlMonks 웹 사이트 덕택에)가 가능하다는 것을 알았습니다.

assoc .pl=Perl 

을 변경

그러나 모든 솔루션

ftype Perl="C:\Perl\bin\perl.exe" "%1" %* 

나를 위해 퍼즐을 해결하지 않았다. 나는 ASSOC .plx = 펄을 추가

myprog.plx a b c 

가 완벽하게 작동 myprog.plx 내 프로그램 이름을 변경 한 경우 때문에 ASSOC의 .pl로 어떻게 든 사용하지 않은 것을 알 수 않았다! "시작 버튼을 클릭하여

열기 기본 프로그램하고 다음을 클릭합니다

그래서 나는이 Win7에"기능 "기본 프로그램이 언급 ​​된 마이크로 소프트 포럼에서이 문제를 읽고, 나는 내 문제에 대한 해결책을 발견 기본 프로그램".

"파일 유형 또는 프로토콜을 프로그램과 연결"을 선택하고 ".pl"을 선택하고 "프로그램 변경"을 클릭하십시오.이미 Perl 명령 줄 인터프리터가 권장 프로그램으로 지정되었지만 대신 찾아보기를 클릭하고 직접 Perl.exe를 선택했습니다. 은 "파일 형식을 연결합니다 ..."화면을 닫은 후,

myprog.pl a b c 

모든 매개 변수가 올바르게 내 프로그램에 의해 검색된, 마법처럼 실행. 도움이

희망 ...

+1

여기서 중요한 것은 exe를 명시 적으로 찾아보고 선택하는 것입니다. 나는 셋업을 조사하는데 몇 시간을 보냈고 모든 것이 옳았다. 나는 이것을했고 그것은 완벽하게 작동했습니다! 감사! – JamesG

2
윈도우 8.1에

펄 ARGV 문제 해결 방법 :

HKEY_CLASSES_ROOT의 \ 응용 프로그램 \하여 Perl.exe 쉘 \ 열려 \ 명령 \ = "C : \ 펄 \ 빈 \ perl.exe ""% 1 "% *

재부팅 할 필요가 없습니다.

관련 문제