如何从终端 运行 Mac 上的这个简单的 Perl CGI 脚本?
How to run this simple Perl CGI script on Mac from terminal?
这个简单的 .pl
脚本应该抓取一个目录中的所有图像并输出一个 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 program from my Module::Extract::Use 模块来处理这类事情。否则,我最终会安装一个模块,然后再次 运行 并发现另一个要安装的模块,依此类推:
$ extract_modules some_script.pl | xargs cpan
模块编写者还有一个有趣的地方。长期以来,我们只会在 Makefile.PL 中列出外部先决条件。既然 Perl 有将模块踢出标准库的先例,您甚至应该列出内部模块。除此之外,为您实际使用的任何模块指定一个依赖项,而不是依赖它在特定的分布中。
而且,我经常移动遗留程序,以至于我编写了一个小工具,scriptdist 来将模块基础结构包装在单文件程序周围,这样我就可以将它们作为模块安装。最大的好处是 cpan
和类似的工具会为您安装先决条件。我已经很长时间没有使用它了,因为我现在只是将程序作为常规 Perl 发行版启动。
这个简单的 .pl
脚本应该抓取一个目录中的所有图像并输出一个 HTML - 当在浏览器中打开时 - 在他们的位置显示该目录中的所有图像自然尺寸。
从 mac 命令行,我只想说 perl myscript.pl
并得到它 运行。
…它曾经在 /cgi-bin
.
#!/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 program from my Module::Extract::Use 模块来处理这类事情。否则,我最终会安装一个模块,然后再次 运行 并发现另一个要安装的模块,依此类推:
$ extract_modules some_script.pl | xargs cpan
模块编写者还有一个有趣的地方。长期以来,我们只会在 Makefile.PL 中列出外部先决条件。既然 Perl 有将模块踢出标准库的先例,您甚至应该列出内部模块。除此之外,为您实际使用的任何模块指定一个依赖项,而不是依赖它在特定的分布中。
而且,我经常移动遗留程序,以至于我编写了一个小工具,scriptdist 来将模块基础结构包装在单文件程序周围,这样我就可以将它们作为模块安装。最大的好处是 cpan
和类似的工具会为您安装先决条件。我已经很长时间没有使用它了,因为我现在只是将程序作为常规 Perl 发行版启动。