2011-11-20 1 views
3

루비 파일에 다음 2 개의 정규식이 있습니다. 그들은 ruby 명령을 사용할 때 잘 실행되지만 ./apachereport.rb을 통해 실행하려고하면 오류가 발생합니다.루비 정규식은 루비 명령과 함께 작동하지만 셰방 (shebang)은 사용하지 않습니다

정규식 :

urls = parse(@file, /(?<=GET)\S+/) 
codes = parse(@file, /(?<=HTTP\/[0-9]\.[0-9]")\S+/) 

오류 :

./apachereport.rb:34: undefined (?...) sequence: /(?<=GET)\S+/ 
./apachereport.rb:47: undefined (?...) sequence: /(?<=HTTP\/[0-9]\.[0-9]")\S+/ 

다른 루비 파일을 잘 작동하는 것 같다, 이는 다음과 같이 내가 사용하고있어 오두막은 다음과 같습니다

#!/usr/bin/ruby 
+0

'which ruby'을 시도하십시오 -'ruby'를 실행할 때'apachereport.rb'가 사용하는 것과 동일한 * 루비 명령이 사용됩니까? – freiheit

+0

덕분에 도움이되었습니다. – CoryDorning

답변

5

을 가장 가능성있는 설명은 여러 버전의 루비가 설치되어 있다는 것입니다. /usr/bin에 설치되어있는 버전 (귀하가 shebang 행에 사용하고있는 버전)은 1.8.X이며, 정규식에서는 ?<= (look-behind)을 지원하지 않습니다. ruby apachereport을 입력 할 때 실행하는 루비는 아마도 루비 1.9이고 ?<=을 지원합니다.

는이 which ruby의 경우 유형이 있는지 확인하고 /usr/bin/ruby보다 다른 무언가를 인쇄 통지 및/또는 ruby --version/usr/bin/ruby --version의 결과를 비교합니다.

+0

감사합니다. – CoryDorning