0

当我像这样使用require加载File::Find时,如何修改此脚本以不收到警告?

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

2 回答 2

3

只需将 替换requireuse。那会解决它。

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

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

use File::Find ();

或者

use File::Find qw();

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

no warnings 'once';

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

于 2013-01-19T11:20:11.233 回答
2

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

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

$File::Find::name if 0;

这样做的干净方法是更改$File::Find::name​​为

do { no warnings 'once'; $File::Find::name }
于 2013-01-19T09:11:23.103 回答