입력으로리스트를 가져 오는 Perl 서브 루틴 first
을 작성하고 목록의 첫 번째 요소를 리턴하고 목록에서 첫 번째 요소를 제거합니다.서브 루틴 매개 변수 수정 (Perl)
sub first(@) {
return shift @_;
}
내가 얻을 것은 :
는print first(@list); // 1
print @list; // 123
스택 변수는 @_ 내가 기대하는 방식을 변경
@list = (1,2,3);
print first(@list); // 1
print @list; // 23
이 매우 작동하지 않습니다 : 이것처럼
to (처음에는 (1, 2, 3)
이고, 그 값은 (2, 3)
입니다.) 그러나 입력으로주는 목록 (@list
)은 변경되지 않습니다. 스택 변수가 참조하는 변수에 대한 참조를 저장한다고 생각했습니다.
나는 서브 루틴에서 목록 요소를 변경하면 그것은 또한 @list
에 뭔가를 변경하지만 나는 서브 루틴에서 내가 쓸 수 있다면 내가하고 싶은 일,하지만 그래서 하나 + 1 :
@_[0] = "X";
그리고 서브 루틴 인쇄 @list
을 실행 한 후에는 2X6
이됩니다.
이것을 달성하기 위해 'shift'를 사용하지 않는 이유는 무엇입니까? –
그게 서브 루틴에서 내가하고있는 것입니다 – d9h
하지만 왜 서브 루틴을 쓰고 싶습니까? 언제 'shift'를 사용하면 될까요? –