如何从终端在Mac上运行这个简单的Perl CGI脚本?



这个简单的.pl脚本应该抓取目录中的所有图像并输出一个HTML(在浏览器中打开时(,该HTML以自然尺寸显示该目录中的所有图像。

从 mac 命令行,我只想说perl myscript.pl并让它运行。

。它曾经在/cgi-bin年在 apache 上运行。

#!/usr/bin/perl -wT
# myscript.pl
use strict;
use CGI;
use Image::Size;
my $q = new CGI;
my $imageDir = "./";
my @images;
opendir DIR, "$imageDir" or die "Can't open $imageDir $!";
@images = grep { /.(?:png|gif|jpg)$/i } readdir DIR;
closedir DIR;
print $q->header("text/html"),
$q->start_html("Images in $imageDir"),
$q->p("Here are all the images in $imageDir");
foreach my $image (@images) {
my ($width, $height) = imgsize("$image");
print $q->p(
$q->a({-href=>$image},
$q->img({-src=>$image,
-width=>$width,
-height=>$height})
)
);
}
print $q->end_html;

Perl 曾经在标准库中包含 CGI 模块,但在 v5.22 中被删除(参见 The Long Death of CGI.pm(。许多较旧的代码假设它总是在那里,但现在你必须自己安装它:

$ cpan CGI

Perl 曾经在标准库中包含 CGI 模块,但在 v5.22 中被删除了。许多较旧的代码假设它总是在那里,但现在你必须自己安装它。

Perl 附带的corelist程序对于检查这些内容非常方便:

$ corelist CGI
Data for 2020-03-07
CGI was first released with perl 5.004, deprecated (will be CPAN-only) in v5.19.7 and removed from v5.21.0

我通过使用我的模块::提取::使用模块中的extract_modules程序来处理这种事情。否则,我最终会安装一个模块,然后再次运行并发现另一个要安装的模块,依此类推:

$ extract_modules some_script.pl | xargs cpan

对于模块编写者来说,还有另一个有趣的观点。很长一段时间,我们只会在 Makefile.PL中列出外部先决条件。你甚至应该列出内部的,因为Perl有将模块踢出标准库的先例。除此之外,为您实际使用的任何模块指定依赖项,而不是依赖于特定发行版中的依赖项。

而且,我移动了太多遗留程序,以至于我写了一个小工具scriptdist,将模块基础结构包装在单文件程序周围,以便我可以将它们作为模块安装。最大的胜利是cpan和类似的工具为您安装先决条件。我已经很久没有使用它了,因为我现在只是将程序作为常规的Perl发行版启动。

最新更新