2009-06-11 7 views
4

G'day、この補間がPerlによる除算として解釈されるのはなぜですか?

以下のスクリプトの部分で、次の2つのエラーが発生します。

引数 "www4.mh.xxxx.co.uk.logstatsto20090610.gz" はライン56

引数「/logs/xxxx/200906/mcs0.telhcで除算(/)内の数値はありません/ borg2 "は、行56の除算(/)では数字ではありません

変数$ dirと$ logは両方とも文字列であり、2つの文字列の連結は中央のスラッシュとともにラップされます引用符で囲みます。

 foreach my $dir (@log_dirs) { 
      foreach my $log (@log_list) { 
line 56:  if (-s "$dir/$log") { 
        push(@logs, $dir/$log); 
       } 
      } 
     } 

編集:ライン56は間違いなくif文です。しかし、ポール、あなたは正しく、引用符で囲まれた行57の部門を取り巻く問題が解決されます。ありがとう。

編集:ライン56を報告するPerlのバージョンが

[email protected]:/var/tmp/robertw> /usr/local/perl/bin/perl -v  

This is perl, v5.6.1 built for sun4-solaris 

Copyright 1987-2001, Larry Wall 

Perl may be copied only under the terms of either the Artistic License or the 
GNU General Public License, which may be found in the Perl 5 source kit. 

Complete documentation for Perl, including FAQ lists, should be found on 
this system using `man perl' or `perldoc perl'. If you have access to the 
Internet, point your browser at http://www.perl.com/, the Perl Home Page. 

[email protected]:/var/tmp/robertw> 

編集です:Perlで補間された文字列の方法を使用してものの、変数は文字列そのものであり、私はそれらを結合しようとしていますことを考えますスラッシュ文字と一緒にネット結果の文字列の連結ではありませんか?

歓声、

+2

IMHO、あなたは少なくとも、エラーメッセージを真剣に受け取り、投稿する前にエラーの原因となっている行を見ているべきです。 –

+0

Perlで文字列内の変数を展開することを補間といいます。しかし、変数に文字列が含まれている場合、ネットエフェクトは必ず連結されます。 Jees。 –

+0

/演算子の動作は、Perlの除算です。オペランドが現在文字列型の場合、Perlは数値型に変換しようとします。つまり、問題の文字列は数値ではないため、エラーが発生します。 –

答えて

12

ライン56は、おそらくあなたは2つの文字列を分割する試してくださいそれの後の行、です。あなたの意図したもの

foreach my $dir (@log_dirs) { 
     foreach my $log (@log_list) { 
      if (-s "$dir/$log") { 
       push(@logs, "$dir/$log"); 
      } 
     } 
    } 
+0

3人の皆さん(Paul Dixon、brian d foy、1800 INFORMATION)が1秒で私を打ち負かしました... +1 – AllenG

9

pushの文字列は引用しません。代わりに、自分でパスを作成する、File::Specでポータブルパスを作るのが習慣に取得しよう:

use File::Spec::Functions; 

my $path = catfile($dir, $file); 

あなたは、その文字列をしたい時はいつでもあなたが(再び文字列を作り直すことによって自分自身を繰り返されていないので、次にあなたが$pathを使用次回は間違っているかもしれない)。

5

次の行によって引き起こされています:あなたはそこに部門を持っている

push(@logs, $dir/$log); 

2

私はあなたが使っているperlのバージョンを知りたいのですか?私が簡単に試すことができるのは、プッシュの行番号を正しく報告しているものです。

+0

G'day、Perlバージョンについてのメモを追加しました。 –

+0

あなたの興味のためにthatnksを忘れてしまった。 ( - : –

+0

どこかに#lineのコメントがあるかもしれませんが、私は2回以上それをやりましたが、もう一度やり直してください。5.6はエラーの行を誤って報告しています。 。 – Axeman

関連する問題