2016-04-29 15 views
0

2つの変数を1行に出力すると、2番目の変数が最初の変数を上書きします。ここで説明するように、文字列の1つに「隠れた」文字が含まれている可能性があります。concatenateing string variables overwrites themPerlの2つの変数が最初の変数を上書きする

"正しく"印刷するにはどうすればよいですか? Perlに変数に割り当てられた文字列のすべての文字を正確に教えてもらうにはどうすればいいですか?それが「隠された」キャラクターでないなら、何が問題なのですか?ファイルからの入力データの一部が扱う

#!/usr/bin/perl 
use strict; 
use warnings; 

print "\n\nstart\n\n"; 
open CFG, "sw.cfg" 
     or die "Unable to open file sw.cfg: $!"; 
my $a; 
my $b; 
my $c; 
while (<CFG>) { 
    if (/interface/) { 
     $a = substr ($_, 10); 
    } 
    if (/description/) { 
     $b = substr ($_, 12); 
     chomp ($a); 
     chomp ($b); 
     # $c = join ("--", $a, $b); 
     print "$a,\n"; 
     # print "$c\n"  
    } 
} 

コードがある...私のスクリプトは、実際に出力何

interface FastEthernet0/1 
spanning-tree portfast 
! 
interface FastEthernet0/2 
spanning-tree portfast 
! 
interface FastEthernet0/3 
description AP STM 
spanning-tree portfast 
! 
interface FastEthernet0/4 
description PORTAGE 
spanning-tree portfast 
    enter code here 

...

start 

,astEthernet0/3 
,astEthernet0/4 
,astEthernet0/5 
,astEthernet0/7 
,astEthernet0/9 
,astEthernet0/11 

私は思います"FastEthernet 0/3"を印刷した後にコンマを入れてください。

この問題を修正

...

while (<CFG>) { 
     **s/\r\n\z//;** 
     if (/interface/) { 
+0

サンプル入力データの一部と表示する出力を入力してください。データを見ることなく、 'interface'と' description'が同じ行にあるのかどうかわかりません。あなたが間違った場所から印刷しているかもしれないという事実であるように、それは一つの可能​​性のある問題です。 – stevieb

+0

interface FastEthernet0/1 スパニングツリーポートファスト ! interface FastEthernet0/2 スパニングツリーポートファスト ! interface FastEthernet0/3 説明AP STM スパニングツリーポートファスト ! interface FastEthernet0/4 description PORTAGE spanning-tree portfast – dspicer

+0

また、現在のコードでは2つの変数を出力しないので、 "$ a、\ n"だけを出力します。 –

答えて

3

は、UNIX形式のテキストファイル(LF語尾)が期待されているWindowsスタイルのテキストファイル(CRLF終末を)読んでいます。

のどちらか、

  • dos2unixを使用してなど)のファイルを変換し、
  • s/\s+\z//;代わりのchomp;を使用することによって、たとえば(CRを自分で削除するには、ファイルを開いたときに:crlf層を追加したり、
  • )。
+0

それでした!私はs/\ r \ n \ z //を追加しました。ループには、今すぐ正しく動作します。それではどうしたのですか?これはなぜ問題なのでしょうか?私はWindowsを実行していない、私はMacがあります。 – dspicer

+0

(少なくとも)2つの標準行終了文字列があります。 Unix形式( "\ n")、Windows形式( "\ r \ n")です。あなたのファイルは明らかに後者で作成されました。これはMacでは珍しいが、不可能ではない。あなたが作成したものに依存します。 –

+0

それは私が理解していないものです。 "sw。"show run"と入力して$ exp-> logfile( "sw.cfg"、 "w")で指定されたファイルに出力をキャプチャして、cfgファイルを作成しました。 ;行。私のMacでスクリプトが実行されました。 – dspicer

関連する問題