Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Perl Can';t在第12行使用未定义的值作为符号参考_Perl - Fatal编程技术网

Perl Can';t在第12行使用未定义的值作为符号参考

Perl Can';t在第12行使用未定义的值作为符号参考,perl,Perl,因此,我试图将perl作为一种新的语言自学。我发现学习一门新语言的最好方法是给自己设定一个项目。这个项目是一个文本游戏。我今天晚上才开始。我需要从用户那里获取输入,然后将其写入文件。由于我将一遍又一遍地做这件事,我认为最好将代码放入子例程中,正如您在下面看到的 唯一的问题是,我不断得到以下错误: 无法将未定义的值用作book1.pl第12行第2行的符号引用 任何帮助都将不胜感激:) #/usr/bin/perl 使用5.010; 严格使用; 使用警告; 我的$filename='save.txt

因此,我试图将perl作为一种新的语言自学。我发现学习一门新语言的最好方法是给自己设定一个项目。这个项目是一个文本游戏。我今天晚上才开始。我需要从用户那里获取输入,然后将其写入文件。由于我将一遍又一遍地做这件事,我认为最好将代码放入子例程中,正如您在下面看到的

唯一的问题是,我不断得到以下错误: 无法将未定义的值用作book1.pl第12行第2行的符号引用

任何帮助都将不胜感激:)

#/usr/bin/perl
使用5.010;
严格使用;
使用警告;
我的$filename='save.txt';
子打开保存{
打开(my$fh,“>”,$filename)或死亡“无法打开文件“$filename”$!”;
}
子关闭保存{
关闭我的$fh;
}
打印“欢迎来到40K世界\n您的名字是什么?”;
我的$first_name=;
打印“你姓什么?”;
我的$姓=;
我的$name=$first\u name$姓氏;
打开_save();
打印“$name”;
关闭_save();

my
创建并返回一个新变量。您将这个新变量传递给
close
,它合理地抱怨它不是一个文件句柄

#!/usr/bin/perl

use 5.010;
use strict;
use warnings;

sub open_save {
    my ($filename) = @_;
    open(my $fh, '>', $filename)
       or die "Can't open file '$filename': $!\n";
    return $fh;
}

sub close_save {
    my ($fh) = @_;
    close $fh;
}

{
    my $filename = 'save.txt';
    ...
    my $fh = open_save($filename);
    print $fh "$name\n";
    close_save($fh);
}

my
声明局部变量。感谢您提供的信息:)在
open\u save
中,您可以打开一个文件句柄,但将其范围限定在该子例程中。所以它立即关闭,变量无效。@Sobrique非常感谢让它更清晰的人:D
#!/usr/bin/perl

use 5.010;
use strict;
use warnings;

sub open_save {
    my ($filename) = @_;
    open(my $fh, '>', $filename)
       or die "Can't open file '$filename': $!\n";
    return $fh;
}

sub close_save {
    my ($fh) = @_;
    close $fh;
}

{
    my $filename = 'save.txt';
    ...
    my $fh = open_save($filename);
    print $fh "$name\n";
    close_save($fh);
}