**已关闭。**此问题需要debugging details。当前不接受答案。
编辑问题以包含desired behavior, a specific problem or error, and the shortest code necessary to reproduce the problem。这将有助于其他人回答问题。
昨天关门了。
Improve this question
我是一个MASM,Perl,Qbasis和HTML的老程序员,但已经脱离它20年了。现在我有一个在线商店,想用Perl再次制作一些我自己的脚本。
所以,现在,我正在搜索一些CSV文件,以找到客户的电子邮件。我的Perl脚本工作正常,如果我使用my $searchName = 'mchanna@gmail.com';
但如果我想设置它从控制台获取一个值chomp(my $searchName = <STDIN>);
它找不到它们。这是整个脚本
#!/usr/bin/perl
use strict;
use CGI;
my @filenames = ("2019 Sales.csv", "2020 Sales.csv", "2021 Sales.csv", "2022 Sales.csv", "2023 Sales.csv" );
my $file = "";
my $count = 0;
my $searchName = 'mchanna@gmail.com';
chomp(my $searchName = <STDIN>);
foreach $file (@filenames) {
open(FH, '<', $file) or die $!;
while( my $line = <FH>) {
if (index(lc($line), lc($searchName)) != -1) {
$count = $count + 1;
}
}
close(fh);
}
print "$searchName has $count matches found\n";
有什么建议吗?
我尝试了单引号和双引号,在Perl中通过索引、chomp和字符串阅读网页。
以为是因为<STDIN>
上的\n
,但chomp没有什么区别
我肯定漏掉了什么小东西。
3条答案
按热度按时间bfnvny8b1#
一些意见:
use CGI;
通过将变量的值放在双引号字符串中的单引号内,可以更容易地查看您是否得到了您所期望的内容。例如,如果值的末尾有额外的空格,您将看到类似于以下内容的内容:
u4vypkhs2#
当我在包含
mchanna@gmail.com
的文件中尝试你的代码时,我发现了这个字符串。因为我们没有看到你的输入,我怀疑电子邮件不在任何这些文件中,或者这不是你实际上作为搜索词的内容。得到输入后,输出它,这样你就可以看到它是什么:
如果你没有发现问题所在,你可能需要更加努力:
额外的东西
除此之外,你正在做很多Perl可以为你做的工作。不要自己处理所有的文件,玩大小写等等,让Perl来做:
你可以这样运行:
这并不是说你需要一行代码,但是同样的快捷方式可以让你轻松完成。
BEGIN
和END
在开始和结束时分别执行一次操作:但实际上,看起来将这些东西导入数据库可能会更好。像SQLite这样简单的东西可以工作(在电子邮件上使用索引)。然后数据库可以处理您正在做的几乎所有事情,如果您有大量数据,则会更快。
1zmg4dgp3#
至少有一部分问题是不是$searchname已经用
my
初始化了两次?my $searchName = 'mchanna@gmail.com'; chomp(my $searchName = <STDIN>);
Def按照@Packy的建议在测试时打印/回显输入。
但是请尝试不使用第二个
my
的相同脚本。