【发布时间】:2011-01-29 12:05:03
【问题描述】:
我的命令提示符中有两个输入,第一个是我正在编写的程序要搜索的一系列单词,第二个是包含要找到单词的文件。因此,例如,我的命令提示符读取 perl WebScan.pl word WebPage000.htm
现在,我可以毫无问题地访问这些输入中的任何一个以进行打印,但是我很难访问网页的内容,因此我可以执行正则表达式来删除 html 标签并访问内容。我意识到有一个子程序可以在没有正则表达式的情况下更有效地执行此操作,但我需要使用正则表达式:(。
我可以毫无问题地访问 html 文件进行打印:
open (DATA, $ARGV[1]);
my @file = <DATA>;
print @file;
它打印了 html 页面的整个代码,但我无法传递正则表达式来删除 html 块。我不断收到一条错误消息,上面写着“无法修改 s/// near 中的数组取消引用”,这是我有特定正则表达式的地方。我不知道如何解决这个问题-我尝试将数组转换为标量,但是我根本无法访问 html 中的任何数据(不,它不只是打印数组中的值 :P)
如何访问数组的内容,以便使用正则表达式来优化所需的输出?
【问题讨论】:
-
我们需要查看正则表达式代码。
-
@codaddict => 你会从
perl -e '@array =~ s/.//'之类的地方得到这个错误,因为在标量上下文中数组返回的值是只读的,所以 perl 会退出。 -
不要使用 DATA 作为文件句柄名,它是一个特殊的文件句柄。实际上,不要使用全局文件句柄,使用词法文件句柄。使用
open的 3 参数形式来制作它们。open my $fh, '<', $ARGV[1] or die "Can't open $ARGV[1]: $!\n";
标签: perl