我正在尝试打开并读取文本文件,然后将每行的此文件行的内容写入HTML文件。到目前为止,我已经想出了这个:
use strict;
use locale;
my (@datei, $i);
open (FHIN,"HSS_D.txt") || die "couldn't open file $!";
@datei= <in>;
close FHIN;
open (FHOUT, ">pz2.html");
print FHOUT "<HTML>\n";
print FHOUT "<HEAD>\n";
print FHOUT "<TITLE>pz 2</TITLE>\n";
print FHOUT '<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">';
print FHOUT "\n</HEAD>\n";
print FHOUT "<BODY>\n";
for ($i = 0; $i < @datei; $i++) {
print FHOUT "<p>$datei[$i]</p>\n";
}
print FHOUT "</BODY></html>\n";
close (FHOUT);
但是,每次都会出现编译错误,我无法弄清楚是什么问题。谢谢你的帮助!
答案 0 :(得分:1)
脚本中的问题
您在阵列中存储的错误处理程序是您的问题。 @datei = <in>
它应该是
@datei = <FHIN>;
您应该知道的其他一些事情
1)始终使用警告并在程序的顶部使用strict。
2)不要将整个文件存储在一个数组中,而是必须逐行处理文件。
while (my $line = <FHIN>)
{
Do your stuff here.
3)使用三个参数进行文件句柄。如下所示
open my $fh,'<', "filename"
4)从数组中访问每个元素,可以使用Perl foreach而不是C样式循环
for my $elemnts(@arrray)
{
如果您想要迭代循环索引,请使用以下格式。
for my $index(0..$#arrray)
{
高于..
表示范围运算符$#
将给出最后一个索引值
答案 1 :(得分:1)
如果您通过use warnings
或use warnings qw(all)
- 启用了warnings,那么您应该总是这样做 - 您会看到类似这样的内容:
Name "main::in" used only once: possible typo at foo.pl line 6.
当然,这一行:
@datei= <in>;
问题的根本原因是您打开了一个名为FHIN
的文件句柄,但您尝试从名为in
的文件句柄中读取。但是,使用词法文件句柄和open
的三参数形式(被认为是best practice)可以更好地编写整个操作:
open(my $fh, '<', 'HSS_D.txt') or die "couldn't open file $!";
顺便说一下,我已经投票决定将这个问题作为一个主题来关闭,因为这是一个由简单的印刷错误引起的问题。