백그라운드에서 벌어지고있는 것입니다. 이러한 옵션은 클래스 생성자에 배열로 전달됩니다. 인수는 항상 배열로 전달됩니다.
따라서 나는 서브 루틴이있는 경우, (또는 방법 또는 클래스 생성자을, 그들은 그들의 옷을 입고 외부 아래 모든 서브 루틴을 것), 나는 다음과 같이 호출 전달 :
foo (
-bar => "far",
-foo => "boo",
);
는 사실은이 일을 오전 :
foo("bar", "far", "foo", "boo");
을 그리고 내 서브 루틴이 점점 :
을 내가 원하는
sub foo (
my @array = [email protected];
say $array[0]; # -bar
say $array[1]; # far
say $array[2]; # -foo
say $array[3]; # boo
say $array[4]; # -more
say $array[5]; # ARRAY reference
say $array[5]->[0]; # -fubar
say $array[5]->[1]; # bufar
say $array[5]->[2]; # -barfu
say $array[5]->[3]; # farbu
:
foo (
-bar => "far",
-foo => "boo",
-more => [
-fubar => "bufar",
-barfu => "farbu",
],
};
내가 통과하고있어이 같은 배열은 다음과 같습니다
하자 '는 내가 배열에 대한 참조입니다 더 옵션을 전달할 수 있다고 방법을 강조하기 위해 간단히이 전부입니다. 때로는 사람이 상황을 생각하고 이상하게 생각할 때가 있습니다. 배열 참조를 -more
으로 전달해야한다면 배열 참조의 뒤에 배열의 다음 요소 인 -more
이 오는 것입니다. 따라서 배열 참조를 전달하려고합니다. 이 할 수있는 올바른 방법입니다 :
-more => \@more_args;
또는 당신은 그것을 많이 나는 위의 서브 루틴 foo
을 위해 그것을 어떻게 같은 익명의 배열 참조를 나타 내기 위해 [...]
를 사용하여 옵션의 실제 목록을 제공 할 수 있습니다.여기
당신이 올바르게 서브 루틴의 매개 변수 (그냥 배열의 기억)의 배열을 전달하지 않는 의심되는 경우 당신이 할 수있는 작업은 다음과 같습니다
my @temp_array = (-host => server, -user => bob, -more => [ -c => "cypher" ]);
: 당신의 매개 변수를 포함하는 임시 배열 만들기 지금, 당신은 생성자에 직접 배열을 전달 할 수 있습니다
:
my $ftp = Net::SFTP::Foreign->new(@temp_array);
이 당신이 할 수 있습니다 어떤 것은 올바른 형식의 매개 변수가 포함되어 있는지 확인하기 위해 @temp_array
덤프하는 것입니다 6,
say Dumper \@temp_array;
출력은 다음과 비슷한 모습이 될 것
이
VAR1 = {
-host => "server",
-user => "bob"
-more => {
-c => "cypher"
}
}
또는,이 같은 (결국,이하던 ARRAY 참조) :
VAR = [
"-host",
"server",
"-user",
"bob",
"-more",
[
"-c",
"cypher",
],
]
어쨌든, 나는 것을 볼 수 있습니다 내 매개 변수가 생성자에 올바르게 전달됩니다. Net :: SFTP :: Foreign에 여전히 문제가있는 경우 문제 해결을 위해 매개 변수 전달을 제거 할 수 있습니다. 대신 문제는 다른 문제로 인한 것일 수 있습니다. 예를 들어 클래스가 내 ssh
명령 줄 기능을 사용하는 방식 때문일 수 있습니다. (예,이 클래스는 외부 명령을 사용합니다!). 즉, Windows 시스템에 있고 ssh
클라이언트를 설치하지 않은 경우 프로그램이 작동하지 않을 수 있습니다.
백 슬래시가없고 세미콜론이 없습니다 :'more => [@sftp_opts]' – toolic
"아무것도 작동하지 않습니다"라고 정의하면, 펄은 오류를 발생 시키거나 SFTP 연결이 실패합니까? – grebneke