当我在不同行的同一个 .pl 文件上尝试打印和说命令时,它不会运行并给出:错误未捕获异常来自用户代码

问题描述

我对 Perl 非常陌生,目前只是按照 YouTube 教程指南 (https://www.youtube.com/watch?v=WEghIXs8F6c) 进行操作。首先,他解释了使用 print 打印变量的语法,然后在视频中大约 8:50,他解释了如何使用另一种称为“say”的打印方法。但是,此时当我尝试完全运行此代码时,我收到以下弹出消息:

世界你好! 不能使用字符串(“curt 位于“123 main st” ") 作为符号 ref 而 "strict refs" 在 Hello_world.pl 第 21 行 (#1) 中使用 (F) "strict refs" 只允许硬引用。象征性的 不允许引用。参见 perlref。 来自用户代码的未捕获异常: 不能使用字符串(“curt 位于“123 main st” ") 作为符号 ref 而在 Hello_world.pl 第 21 行使用“strict refs”。 在 Hello_world.pl 第 21 行 按任意键继续 。 . .

作为序言,这是我目前使用的代码行:

#!/usr/bin/perl

use strict;
use warnings;
use diagnostics;
use feature 'say';
use feature "switch";
use v5.12.3;
print " Hello World!\n";
my $name = 'curt';
my ($age,$street) = (40,'123 main st');
my $my_info = "$name lives on \"$street\"\n";
print $my_info
my $bunch_of_info = <<"END";
This is 
a lot of information
for different lines
END
say $bunch_of_info

我感谢所有帮助。非常感谢您提前。

解决方法

你有

print $my_info
my $bunch_of_info = ...;

缺少分号意味着 $my_info 应该是文件句柄。

print $fh ...;

文件句柄可以是对包含文件句柄的 glob 的引用。字符串 123 main st 在技术上是一个有效的引用,除非启用了限制(特别是 strict refs)。因此,你会得到你得到的错误。

,

请查看更正后的代码并与您的代码进行比较

#!/usr/bin/env perl

use strict;
use warnings;
use diagnostics;
use feature 'say';
use feature "switch";
use v5.12.3;

print " Hello World!\n";

my $name = 'curt';
my ($age,$street) = (40,'123 main st');
my $my_info = "$name lives on \"$street\"\n";

print $my_info;

my $bunch_of_info = <<"END";
This is
a lot of information
for different lines
END

say $bunch_of_info;

输出

 Hello World!
curt lives on "123 main st"
This is
a lot of information
for different lines