$ outfile、 '>'、$ outpathまたは$ logger-> logdieを開きます( "エラー:$ outpathを開くことができません。 $! ");私は出力が配列(改行で分割)に読み込まれ、次に解析されるコマンドを持っています。 ファイルからスラップしてローカルの$/= "";しかし、私は中間ファイルを持っていることは無駄であり、それを変更したことを読んでいます。今私は次の行を全く読むことができません!ここ を解析する必要が出力されたデータの異なる種類があります:のpWWNが表示されたときに次の行の関連するデータで配列を解析するには
fcalias name DA540_MAE_I0032 vsan 24
pwwn X0:00:00:63:ab:03:86:e1
fcalias name NAEMS02_DH6_AUX0 vsan 53
fcalias name NRTMF02_DM3_BE0 vsan 53
fcalias name DMSRT56-777_09C0 vsan 53
interface fc2/33 swwn 20:13:ev:0d:ed:3e:da:00
、私はそれがデータに応じて、変数「タイプ」=のpWWN/sWWNを/なしで、FCエイリアスに追加します。
はここにあなたが気づいているかもしれないとして当然の
sub fcalias
{ my ($path, $commandfile, $switch_ip, @data) = @_;
my $outpath = "$path${switch_ip}_${commandfile}.csv";
open my $outfile, '>', $outpath or $logger->logdie("Error: Can't open $outpath. It may be open.:$!");
my ($type, $fcalias, $vsan);
while (@data)
{ $_ = shift(@data);
s/^\s+//; # Delete leading whitespaces
next if (/^$/); # Skip empty lines
if (/^fcalias name (\S+) vsan (\S+)/)
{($fcalias, $vsan) = ($1, $2);next;}
elsif (/^pwwn (\S+)/)
{$type = "pwwn"; my $pwwn = $1;
print ($outfile, "$fcalias;$vsan;$type;$pwwn;;;$switch_ip\n");
}
elsif (/interface (\S+) swwn (\S+)/)
{$type = "interface";
my ($interface,$swwn) = ($1,$2);
print ($outfile, "$fcalias;$vsan;$type;;$swwn;$interface;$switch_ip\n");
}
else {$type = "none";
print ($outfile, "$fcalias;$vsan;$type;;;;$switch_ip\n");
# print "$_ \n";
}
}
print "..................DONE\n";
}
、私のコードですが、それ以外のdoesntの仕事は、すべて、私はFCエイリアスダブルスを取得します。しかし、私が何をしようと、私は必要な出力を追加することはできません。このサブルーチンは、最適化された大きなスクリプトの一部で、この部分が欠落しています.....ヘルプ!
参考までに、古いコードループをご紹介します。長い投稿とコードの書式を許してください。私は試した。ありがとう!
local $/ = "";
while (<DATA>)
{ if ($_ =~ m/^fcalias name (\S+) vsan (\S+)\s+pwwn (\S+)/)
{ my ($fcalias, $vsan, $pwwn) = ($1, $2, $3);
my $type = "pwwn";
print (OUTFILE "$fcalias;$vsan;$type;$pwwn;;;$switch_ip\n");
}
elsif ($_ =~ m/^fcalias name (\S+) vsan (\S+)\s+interface (\S+) swwn (\S+)/)
{ my ($fcalias, $vsan, $interface, $swwn) = ($1, $2, $3 ,$4);
my $type = "interface";
print (OUTFILE "$fcalias;$vsan;$type;;$interface;$swwn;$switch_ip\n");
}
else ($_ =~ m/^fcalias name (\S+) vsan (\S+)/)
{ my ($fcalias, $vsan) = ($1, $2);
my $type = "none";
print (OUTFILE "$fcalias;$vsan;$type;;;;$switch_ip\n");
}
}
あなたのインデントはひどいです。なぜ自分のために物事を難しくするのですか? – TLP
このページの書式設定に20分かかる。それはそうではありませんでした...最初の投稿、しかし、私は今それを修正したと思う、TABボタンに注意!、笑。 – Comocho00
助けてくれてありがとう。本当に。あなたなしでは、私はこの問題を決して解決することができませんでした。 – Comocho00