require File :: Find:如何在不收到警告的情况下使用File :: Find :: name?

时间:2013-01-19 08:53:01

标签: perl file find warnings require

当我像这样File::Find加载require时,我怎么能修改此脚本才能收到警告?

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

require File::Find;
File::Find->import('find');

find( {
    wanted     => sub {
        my $file = $File::Find::name;       
        #say $file; 
    },
    no_chdir   => 1,
},
shift );

输出:

#Name "File::Find::name" used only once: possible typo at ./perl9.pl line 11.

2 个答案:

答案 0 :(得分:3)

只需将require替换为use即可。那就解决了。

通常,使用require的原因是,如果您有某些特定的理由在运行时加载延迟模块。通常,你没有。

如果您只是不想从模块导入任何符号,请将空列表传递给use,如下所示:

use File::Find ();

use File::Find qw();

修改:如果你有合理的理由推迟加载模块,并且发现ikegami的解决方法太难看了,你可以通过写下来禁用本地警告: / p>

no warnings 'once';
在生成警告的语句之前

。这将禁用最内层封闭代码块的其余部分的特定警告。要找出哪些类别中包含哪些警告消息,请参阅perldiag

答案 1 :(得分:2)

对于初学者,请不要加载这样的文件。 :)

如果你这样做,只需添加:

$File::Find::name if 0;

干净的方法是将$File::Find::name更改为

do { no warnings 'once'; $File::Find::name }