我目前正在用Perl编写一个程序,我 * 希望 * 它做的是接受用户的输入(在我的例子中是一个字符串),读取一个文件,在文件中找到包含该输入的条目,然后打印。
这就是我目前为止在这个特定子例程中所拥有的代码,其中这段代码是:
print "What is your Sun Sign?\n";
open ( my $sun, '<', 'sunsigns.txt' ) or die "I couldn't reach the file. Please try again.";
while (my $sun_out = <STDIN>) {
if ($sun_out =~ /[\w$sun]/) {
print $sun;
}
}
当我这么做的时候,它会给我这个:
GLOB(0x1db5f8)
我已经到了极限。我觉得我已经试过了我在谷歌上能找到的所有东西。如果有人能至少给我指出正确的方向,请吧。
3条答案
按热度按时间31moq8wy1#
下面是在Perl中执行此操作的常用方法。
首先,从
STDIN
获取输入字符串。然后,打开输入文件,遍历所有行,查找输入字符串。找到字符串后,打印包含该字符串的整行。
另请参见perlintro
rxztt3cl2#
给定此文件:
你可以这样做:
测试:
xu3bshqb3#
人们已经回答了关于任务的问题,但我想指出为什么你会得到你所做的输出。
首先,你在
print
中使用了错误的变量。因为$sun
是一个文件句柄,并且这是你给予print
的唯一参数,它输出该对象的文本表示。这就是为什么你得到GLOB(...)
。我通常在结尾用h
命名我所有的句柄。对于一个文件,通常是$fh
。$dh
表示目录句柄,等等。这样,当我在错误的地方使用这些名称时,它们就会突出出来。但是,调用print的各种方法有点烦人,因为没有任何参数的
print
使用主题变量$_
:添加一个文件句柄作为第一个参数并不会将
$_
输出到该文件句柄,我对此只是有点恼火,但我已经克服了。你必须自己加上这个论证,但中间不要用逗号(出于我省略的原因):
如果您使用了逗号,则问题将返回: