コマンドを実行し、正規表現に基づいて出力を解析し、statusとipという2つの値を返す関数を作成しました。関数呼び出しは、期待どおりに両方の値を返します。スカラーを返す代わりに、私はハッシュ・リファレンスを返したい。いくつかの人が、以下の関数のハッシュリファレンスを返す方法を教えてくれますか?perlの関数からハッシュリファレンスを返します
sub status {
my ($self,$int) = @_;
my $status = 0;
my $ip = 0;
my $cmd = 'cisco ios command ' . $interface;
my $out = $self->{sshObj}->exec($cmd);
foreach my $line ( $out) {
if ($line =~ m/Session\s+status:\s+(.*)/) {
$status = $1;
}
if ($line =~ /(\d+.\d+.\d+.\d+)/) {
$ip = $1;
}
}
return ($status,$ip);
}
関数コール:私は上記のコメントで述べた私の不安は別に
my ($status, $ip) =
$self->{'$tunnel_obj'}->status($self->{'outer_t_1'});
INFO ("status : $status");
INFO ("ip : $ip");
Output :
status : UP
ip : 172.10.78.33
だろう
を扱っているモジュール言う場合にのみ、私はそれを修正することができます!私は機能コードだけを残し、スカラーをハッシュに変換する関数を追加します。私はそれが答えではないことを知っていますが、それはあなたの作業コードをそのまま維持します。 – Sparky256
@ Sparky256複数の値を返す場合は、スカラーを使うのは良い考えではないと思います。私は、ハッシュrefは良い選択だろうと思う。 – nims
これはあなたの本当のコードですか? '$ self'とは何ですか?そして特に、 '$ out'とは何ですか?あなたのループ 'foreach my $ line($ out)'はちょうど1回実行されるので、ループは必要ありません。それはあなたの期待ですか? – Borodin