2012-06-06 4 views
1

파이프 된 실행을위한 일부 Perl 스크립트를 수정하고 주어진 입력 매개 변수 집합을 사용하여 실행하기위한 래퍼 스크립트를 작성해야합니다. 내가 할 수 있기 전에, 나는 첫 번째 프로그램에 무엇이 들어가고 있는지 이해해야한다.해시 배열을 배열에 저장 하시겠습니까?

# declare and initialise an empty hash 
my %to_keep=(); 

# an array 
@line = ('some\one', 'two', 'three', 'four'); 

# trim the identifier 
$line[0]=~s/\/[1]$//; 

# store this into an array 
@{$to_keep{$line[0]}{'1'}}=($line[1],$line[2]); 
print @; 

내가 펄 대체 기능의 /// 잘 알고 있어요 :이 코드를 해독 도움이 필요합니다. 다음과 같습니다 :

s/text-regex_to_be_replaced/replacement/modifier. 

그러나 위의 코드가 무엇을하는지 잘 모르겠습니다. 내가 올바르게 이해하면 문자열 끝에 '$ /'가 붙을 때까지 '\'이 (가) 줄 바꿈으로 바뀝니다. 이 올바른지?

다른 부분은 'store'덧글 아래의 코드입니다. 어레이의 해쉬를 배열에 저장하고 있다고 생각합니다. 어떤 사람이 코드가 어떻게 작동하는지, 그리고 변수가 주어지면 어떻게 인쇄 할 수 있는지 설명 할 수 있습니까? 또한 배열에 저장 한 데이터를 검색하려면 어떻게해야합니까?

보너스 질문 : 누군가가 파이프 연결 실행을위한 펄 스크립트 수정 방법을 설명 할 수 있습니까?

감사합니다.

+0

Ummmmm .... 무엇을'print @;'수행합니까? 그건 오타예요? –

+1

줄 $ line [0] = ~ s/\/[1] $ //; 가장 이상한 것 같아서 - 왜 1 대신에 [1]을 써야합니까? – mzedeler

+0

첫 번째 질문에 답하기 위해 $ line [0] = ~ s/\/[1] $ // 문자열이 끝에있을 경우/1을 제거합니다. 그것은 타이핑 오류처럼 보입니다. 문자열의 끝에서 [1]이 $ line [0] = ~ s/\ // [1] /로 바뀌면 읽어야 할 내용입니다. – mzedeler

답변

1

흠, 이것은 유선입니다.

s/\/[1]$//; 

문자열 끝 부분에서만 일치하고 제거됩니다. 그래서 당신의 예에서는 영향력이 없습니다.

@{$to_keep{$line[0]}{'1'}}=($line[1],$line[2]); 

는 분해 왼쪽에 당신이 예에서 정의되지 $to_keep{'some\one'}{1}있어! 그러나 값이 foo이라고하면이 값을 받아 이라는 기본 값인 foo을 배열 이름으로 사용한다는 것을 의미하는 @{foo}으로 바꿉니다.

오른쪽의 $line의 두 번째와 세 번째 요소를이 변수 이름 @foo에 목록으로 저장합니다.

정의되지 않은 것을 무시하고 의도를 추측하려고하면 자체 변수 이름을 정의하는 스크립트가 있습니다. list의 첫 번째 요소를 변수 이름으로 사용하고 목록의 나머지 부분과 동일하게 설정하십시오.

+0

예제를 실제 코드에 적용 해 보겠습니다. 다시 한 번 감사드립니다. – cooldood3490

관련 문제