我试图读取目录中的所有txt文件,并将它们作为链接输出到单个html页面上。当我打开html页面时,txt文件应显示为链接。当我点击链接时,txt文件中的内容应该在html页面上打开。这是我在perl中的代码。
my $dir = '/'; ## rem trailing slash
my $body; ## our file list
my $saveFile = '/dev/null'; ## file to save links
opendir( MYDIR, $dir ) or die 'opendir';
$body =
join( "\n", ## make it legible
map { '<a href="$_">$_</a><br>' } ## format each file
sort { $a cmp $b } ## sort them
grep { ! /^\./ } ## no .name files
grep { -T "$dir$_ } ## only text files
readdir MYDIR
);
closedir MYDIR;
## build your link page
## using $body
open( FILE, $saveFile ) or die 'open';
print FILE <<EOF;
<HTML>
<HEAD>
<TITLE>My Files</TITLE>
<BODY>
$body
</BODY>
</HTML>
EOF
close FILE;
检索文本文件的代码,我从终端执行此代码为&#34; perl showtxtfiles.pl&gt; somefile.html&#34;它检索文件夹中的所有txt文件并在html页面上显示它们。但是,我只需要在打开somefile.html页面时将每个txt文件显示为链接。
#!/usr/bin/perl
use strict;
use warnings;
my $dir = '/home/ubuntu/uisacad5.uis.edu/~rloui2/540/project2';
opendir(DIR, $dir) or die $!;
while (my $file = readdir(DIR)) {
# We only want files
next unless (-f "$dir/$file");
# Use a regular expression to find files ending in .txt
next unless ($file =~ m/\.txt$/);
print "$file\n";
}
closedir(DIR);
exit 0;
答案 0 :(得分:1)
您实际上并没有问过问题,所以我无法确定代码中哪些问题让您感到困惑。
我可以看到一个明显的问题,一个可能出现的问题,以及一些可以做出的改进。
明显的问题
map { '<a href="$_">$_</a><br>' }
变量仅以双引号字符串进行插值。这是一个单引号字符串,因此您不会获得$_
的值,您只需获取文字字符串$_
(后跟下划线的美元符号)。
可能出现的问题
看起来此程序运行一次以生成静态HTML页面,但您没有说明如何使用此页面。它是由网络服务器提供还是您只是在浏览器中使用file://
网址在本地打开它?
这将对href
元素中的<a>
属性需要的样子产生影响。您需要URL还是文件路径?这需要深思熟虑。
一些改进
您在输出行之间添加换行符,但HTTP客户端(如浏览器)通常会忽略换行符。您可以将\n
替换为<br>
元素,但使用<ul>
和<li>
可能会更好(使用opendir my $dir_h, $dir
和opendir MYDIR, $dir
。
我建议对目录句柄使用标量变量而不是裸字 - 即adb devices
而不是adb devices
。
我不知道这个程序会有多复杂,但你几乎可以肯定会从代码中取出HTML并使用模板引擎。