我编写了Perl模块来从用户那里获取用户名<stdin>并打印出来,如下所示,
use strict;
use warnings;
{
package Insert;
sub Insert_DATA
{
my $User_Name;
print "Please Enter the User Name: ";
chomp ( $User_Name = <stdin> );
print $User_Name , "\n";
}
}
return 1;
Run Code Online (Sandbox Code Playgroud)
但是当我执行这段代码时,它会给出这样的错误,
readline() on unopened filehandle stdin at Insert_Data.pm line 26.
Use of uninitialized value $User_Name in chomp at Insert_Data.pm line 26.
Use of uninitialized value $User_Name in print at Insert_Data.pm line 27.
Run Code Online (Sandbox Code Playgroud)
所以请帮助解决这个问题.
谢谢.
在perl启动时打开的文件句柄是STDIN或者main::stdin,但是您已经更改了包并且正在尝试读取Insert::stdin,这不存在
如果你写<STDIN>或<main::stdin>代替它,它将按预期工作
但是你可能不应该在一个包子程序中做顶级IO,我建议你积累主程序中的所有数据并将其作为参数传递给 Insert::Insert_DATA()
我会写这样的东西
use strict;
use warnings 'all';
use Insert;
print "Please Enter the User Name: ";
chomp(my $user_name = <STDIN>);
insert_data($user_name);
Run Code Online (Sandbox Code Playgroud)
package Insert;
use strict;
use warnings 'all';
use Exporter 'import';
our @EXPORT = 'insert_data';
sub insert_data {
my ($user_name) = @_;
print $user_name, "\n";
}
1;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
147 次 |
| 最近记录: |