【问题标题】:Prototype mismatch: sub main::strftime原型不匹配:sub main::strftime
【发布时间】:2013-06-15 18:13:56
【问题描述】:

在我的 perl 程序中,我使用 use POSIX qw( strftime ); 库执行 unixtimestamp 到日期的转换,如下所示,

my $dt = strftime("%m/%d/%y", localtime($fields[0]));

转换按预期进行,但出现以下错误。

 Prototype mismatch: sub main::strftime ($\@;$) vs none at 
 /usr/lib/perl5/5.8.5/Exporter.pm line 67.
 at /usr/lib64/perl5/5.8.5/x86_64-linux-thread-multi/POSIX.pm line 19

有没有人指导我是什么原因以及如何摆脱它?

【问题讨论】:

    标签: perl unix-timestamp strftime


    【解决方案1】:

    您要么有两个名为 strftime 的函数(但随后您可能还会收到另一个警告),或者您在声明之前使用了 strftime


    我总是明确指定我的导入,所以我从来没有遇到第一个问题。

     use Date::Format qw( );
     use POSIX        qw( strftime );
    

    【讨论】:

    • 在脚本顶部我使用了“use POSIX qw(strftime)”库,在脚本中间我使用了“strftime”函数。
    • 正如你所说,我也使用了“使用 Date::Parse;使用 Date::Format”库.. 有问题吗?
    • 如果您在代码顶部放置“使用警告”,您将得到一个更容易理解的警告,即 strftime 正在被重新声明。基本上Date::Format 也在导出一个名为strftime 的方法。这就是为什么最好使用 EXPORT_OK 而不是 EXPORT 并强制用户说出他们想要导入的方法。
    • use strictuse warnings 在任何地方都非常重要。起初它们看起来很烦人,但会发现如此多的拼写错误和奇怪的错误,从长远来看会为您节省 如此 很多时间。
    • @plusplus 使用警告确实添加任何东西;它在范围内是词法的,并且重新定义发生在范围之外的 Exporter 中。 -w 将给出重新定义警告。
    【解决方案2】:

    当我在声明/定义之前使用函数时,我遇到了同样的错误。 尽管由于答案已被接受,可能还有更多原因,但这可能会对某人有所帮助。

    sub func1{
     func2();
    }
    
    sub func2{
    }
    

    解决方案只是将 func2 移到 func1 之前。

    sub func2{
    }
    
    sub func1{
     func2();
    }
    

    【讨论】:

      猜你喜欢
      • 2017-12-10
      • 1970-01-01
      • 2023-03-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-09
      • 2021-03-09
      • 2018-08-22
      相关资源
      最近更新 更多