【问题标题】:Perl: Can't call method "say" without a package or object referencePerl:不能在没有包或对象引用的情况下调用方法“say”
【发布时间】:2013-06-27 03:01:17
【问题描述】:

我正在尝试学习 Perl,我正在使用 OS-X 10.8.4 并拥有 Perl 版本:

这是为 darwin-thread-multi-2level 构建的 perl 5,版本 12,subversion 4 (v5.12.4)

我正在尝试运行此代码:

#!/usr/bin/env perl

use strict;
use warnings;


my $a = 1;
my $b = 1;

say $a + $b ;

我得到了这个:

Can't call method "say" without a package or object reference at test2.pl line 10.

谢谢!

【问题讨论】:

  • 我刚刚添加了“使用 5.12.4;”它奏效了。这是一种不好的做法吗?
  • 请参阅下面的@hobbs 评论。我认为该方法是首选方法。

标签: perl perl-module


【解决方案1】:

say 是 Perl 5.10 中添加的新功能。为了不破坏旧代码,默认情况下它不可用。要启用它,您可以执行

use feature 'say';

但这样做可能更好

use feature ':5.12';

这将打开 Perl 5.12(您正在运行的版本)中可用的所有新功能。这包括 saystateswitchunicode_stringsarray_base 功能。

请参阅feature documentation,了解它们各自的作用。

【讨论】:

  • 我更喜欢use 5.012 而不是use feature ':5.12',因为如果您尝试在太旧的 perl 上运行它,它会提供更具描述性的错误消息。
【解决方案2】:

你需要use feature qw (say);

say 的文档。

【讨论】:

  • 查看use 和研究 perl 模块以及如何使用它们也可能有用。
【解决方案3】:

Modern::Perl 是 CPAN 上的一个很棒的包,它可以打开现代版本的 perl 中的函数以及诸如 warn 和 strict 之类的编译指示,(恕我直言)所有 perl 程序员都应该使用。我所有的程序现在都是这样开始的:

使用 Modern::Perl '2013';

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-12-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多