Perl require File::Find:如何在没有警告的情况下使用File::Find::name?

Perl require File::Find:如何在没有警告的情况下使用File::Find::name?,perl,file,find,warnings,require,Perl,File,Find,Warnings,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_c

当我像这样加载时,如何修改此脚本以不获取警告

#!/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.

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

如果需要,只需添加:

$File::Find::name if 0;
最简单的方法是将
$File::Find::name
更改为

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

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

如果需要,只需添加:

$File::Find::name if 0;
最简单的方法是将
$File::Find::name
更改为

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

只需将
require
替换为
use
。那会解决的

通常,使用
require
的唯一原因是您有特定的理由在运行时延迟加载模块。通常,你不会

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

use File::Find ();


编辑:如果您确实有正当理由推迟模块加载,并且发现ikegami的解决方案太难看,您可以通过以下方式在本地禁用警告:

no warnings 'once';

在生成警告的语句之前。这将对最里面的封闭代码块的其余部分禁用该特定警告。要找出哪些警告消息属于哪些类别,请参阅。

只需将
要求
替换为
使用
。那会解决的

通常,使用
require
的唯一原因是您有特定的理由在运行时延迟加载模块。通常,你不会

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

use File::Find ();


编辑:如果您确实有正当理由推迟模块加载,并且发现ikegami的解决方案太难看,您可以通过以下方式在本地禁用警告:

no warnings 'once';

在生成警告的语句之前。这将对最里面的封闭代码块的其余部分禁用该特定警告。要找出哪些警告消息属于哪些类,请参阅。

这看起来不漂亮。然后在加载模块之前不要使用它。这看起来不漂亮。然后在加载模块之前不要使用它。我只想在条件为真时加载模块。好的,这是对
require
的合法使用。首先,你可能想在你的问题中提到这一点。无论如何,请参阅上面对我的答案的编辑。然后仅在相同条件下使用模块加载代码。禁用一种类型的所有警告以使一个警告静音是很难看的,因为它会削弱范围内的所有代码。或者您是在建议
执行{no warnings'once';$File::Find::name}
?在我的回答中添加了后面的内容。@ikegami:那会有用的,但是如果他的
通缉
子项真的像他的示例中那样只有几行,我只会添加
无警告“一次”开头,仔细检查这些行上是否有任何变量名拼写错误。(如果您使用的是
严格的'vars'
,那么“仅使用一次”警告实际上并没有多大用处,幸运的是,OP就是这样。)但您肯定是对的,禁用任何警告,即使是那些边际效用的警告,对于长代码段都是一个坏习惯。我只想在条件为真的情况下加载模块。好的,很公平,这是对
require
的合法使用。首先,你可能想在你的问题中提到这一点。无论如何,请参阅上面对我的答案的编辑。然后仅在相同条件下使用模块加载代码。禁用一种类型的所有警告以使一个警告静音是很难看的,因为它会削弱范围内的所有代码。或者您是在建议
执行{no warnings'once';$File::Find::name}
?在我的回答中添加了后面的内容。@ikegami:那会有用的,但是如果他的
通缉
子项真的像他的示例中那样只有几行,我只会添加
无警告“一次”开头,仔细检查这些行上是否有任何变量名拼写错误。(如果您使用的是
严格的'vars'
,那么“仅使用一次”警告实际上并没有多大用处,幸运的是,OP就是这样。)但您肯定是对的,禁用任何警告,即使是那些具有边际效用的警告,对于较长的代码段都是一个坏习惯。