为什么这个插入的插值被Perl解释为除法?

Rob*_*lls 4 perl string-interpolation

天儿真好,

为什么我从下面的脚本片段中得到以下两个错误?

参数"www4.mh.xxxx.co.uk.logstatsto20090610.gz"在第56行的分部(/)中不是数字

参数"/logs/xxxx/200906/mcs0.telhc/borg2"在第56行的分区(/)中不是数字

变量$ dir和$ log都是字符串,两个字符串的串联以及中间的斜杠也用引号括起来.

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

编辑:第56行绝对是if语句.但是,保罗,你是对的,用引号围绕第57行的分区来解决问题.谢谢.

编辑: Perl版本报告第56行是

stats@fs1:/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.

stats@fs1:/var/tmp/robertw> 
Run Code Online (Sandbox Code Playgroud)

编辑:虽然在Perl中使用插值字符串的方法,假设变量本身就是字符串,并且我试图将它们与斜杠字符连接在一起,不是净结果字符串连接吗?

干杯,

Pau*_*xon 12

第56行可能是它后线,在那里你试图分裂两个字符串.你可能想要的是什么

   foreach my $dir (@log_dirs) {
        foreach my $log (@log_list) {
            if ( -s "$dir/$log" ) {
                push(@logs, "$dir/$log");
            }
        }
    }
Run Code Online (Sandbox Code Playgroud)


bri*_*foy 9

您不会在推送中引用该字符串.而不是自己创建路径,尝试养成使用File :: Spec创建可移植路径的习惯:

use File::Spec::Functions;

my $path = catfile( $dir, $file );
Run Code Online (Sandbox Code Playgroud)

然后你$path只要你想要那个字符串就可以使用,这样你就不会再通过重新设置字符串来重复自己(也许下次再做错了;).


180*_*ION 5

它由以下行引起:

push(@logs, $dir/$log);
Run Code Online (Sandbox Code Playgroud)

你有一个师.