제가 물어 보려고하는 것은 쉽게 나타납니다.
이 $foo
라는 이름의 변수로 문자열 일치 $a[0]
가능하다
my ($foo, $bar) = (0,0);
및
my @a = ("foo","bar","beyond","recognition");
라는 이름이 개 변수를 상상하고 ("안녕하세요"라고)이 에 값을 할당 일치하는 경우에만?
(내 제품이 아님) 코드를 디버깅하려고하는데 힘든 부분에 부딪 혔습니다. 기본적으로 스크립트의 일부에는 여러 변수가 있습니다.
my ($p1, $p2, $p3, $p4)= (0,0,0,0); # *Edited*
my @ids = ("p1","p2","p3","p4")
루프 내에서 특정 작업을 호출하기 위해 이러한 각 변수를 해시 키로 전달해야하는 경우가 있습니다. 루프의 첫 번째 반복에 대한
for (0..3){
my $handle = get_my_stuff(@ids);
my $ret = $p1->do_something(); # <- $p1 is used for the first instance of loop.
...
...
...
}
, 나는
$p1
를 사용해야하지만 루프의 두 번째 반복을 위해 내가했던이었다 그래서
my $ret = $p2->do_something(); # not $p1
을 통과 (또는 전화) 할 필요가;
my $p;
for (1..4){
my $handle = get_my_stuff(@ids);
no strict 'refs';
my $ret = $p{$_}->do_something();
...
...
...
use strict 'refs';
...
}
그러나 위의 작업이 허용되지 않습니다, 나는 그것이 나오는 것에 따라. :(방식으로 내 키를 호출 할 수 없습니다 생각은, $의 P1은 즉시 get_my_stuff()
가. 그리고에 호출 된 후에 축복받은 해시되었다 내 가장 놀라운, (너무 많은 여기에 붙여 넣기하는 데 시간이 너무 오래) 할당을하거나 일치하는 경우에만 내 변수에 해시 참조를 전달하는 기능 에서 어떻게 든 스크립트.
'내 ($ P1, $ P2, $ P3, $ P4) = 0 × 4;'$의 p1' 설정 뜻' "0000" '및 다른 모든 것들은'undef'에요. '$ p {$ _} -> ...'는'$ p'가 아니라'% p'를 가리 킵니다. 마지막 코드 블록은 의미가 없습니다. 그래서'$ p1' 등은 객체입니다. 그리고'get_my_stuff'는 이름들의리스트를 취하고, 그 이름들에 대응하는 객체들의리스트를 반환합니다. 왜 그걸 목록에서 불러내나요? – simbabque
그건 내 실수 였어. 나는'($ p1, $ p2, $ p3, $ p4) = (0,0,0,0); '을 할 의도였습니다. 원래 코드가 작성된 것과 비슷하게 유지하려고했습니다. var 이름 만 변경했습니다. – YouHaveaBigEgo
질문을 수정하고 수정하십시오. 실제 코드를 표시하지 않거나 실행을 테스트 한 코드가 적어도 [mcve]라면 원하는 용도로 사용할 수 없습니다. – simbabque