大家好日子, 我根本不是程序员,所以我非常感谢你的帮助。 我有一个服务器,用于保存以下目录结构中的文件:
/usr/httpd/htdocs/statements
在这个语句目录下,我有很多子目录:
ab, ac, ad
等。这些是指不同的网站。
在这些网站下我有目录,基本上是年和月的格式
201101
201102
这些目录中有很多包含.body扩展名的文件。这种文件的典型示例是:
S117873000.body
S117873000x.body
我有一个网络界面,用户可以在其中输入要搜索的数字,例如:S117873000
HTML搜索:
print "</select></td><td>
<form method=POST action=/cgi-bin/search.pl>
enter a number to search for:
<input type=text name=query size=15>
</td></tr><tr><td colspan=2><center><input type=submit value=Search <input type=reset>
</center></form></td></tr>\n";
我尝试编写一些perl来递归搜索这些目录,并在他可以点击的链接中显示用户的结果。我已经删除了我尝试过的大部分内容,因此以下内容不会显示太多内容。我需要从网络搜索中提取参数,递归搜索匹配的数字并显示一个链接。
#!/usr/bin/perl -w
use CGI qw(:standard);
use strict;
use warnings;
use File::Find;
my $dirs = '/usr/httpd/htdocs/statements/';
## Collect the value of 'query' submitted by the webpage
my $cgi = new CGI;
my $query=$cgi->param('query');
find( sub
{}
'$dirs');
sub return_html {
print "Content-type: text/html\n\n";
print "<html>\n <head>\n <title>Results of Search</title>\n </head>\n";
print "<ul>\n";
print "<li><a href=\......\n";
}
答案 0 :(得分:0)
my $query = $cgi->param('query');
print header;
use vars qw/*name *dir *prune/;
*name = *File::Find::name;
*dir = *File::Find::dir;
*prune = *File::Find::prune;
find ( sub
{
print 'Results:';
/$query/ && print $name . "\n";
}, $dirs);
这应该有效或类似的东西
答案 1 :(得分:0)
我设法让它使用下面的代码。我只需要用超链接显示结果,以便用户可以点击它。目前,它在一行中显示所有结果,没有超链接。 /usr/httpd/htdocs/statements/ec/200501/T047906000x.body /usr/httpd/htdocs/statements/ec/200501/T047906000.body
有关如何使用可点击的超链接显示结果的任何想法吗?
#!/usr/bin/perl -w
use CGI qw(:standard);
use strict;
use warnings;
use File::Find;
my $dir = '/usr/httpd/htdocs/statements/';
## Collect the value of 'query' submitted by the webpage
my $cgi = new CGI;
my $query=$cgi->param('query');
print header();
print start_html();
# for the convenience of &wanted calls, including -eval statements:
use vars qw/*name *dir *prune/;
*name = *File::Find::name;
*dir = *File::Find::dir;
*prune = *File::Find::prune;
#sub wanted;
# Traverse desired filesystems
File::Find::find({wanted => \&wanted}, '/usr/httpd/htdocs/statements/');
exit;
sub wanted {
/^$query.*\z/s &&
print("$name\n");
}
print end_html()
&#13;