我想在Perl脚本的末尾打开一个URL,例如http://www.example.com/
。我不想使用WWW :: Mechanize访问它,但实际上是在图形Web浏览器中向用户显示网页。
有很多方法可以在Mac(open URL
)和Windows中执行此操作,但我想要一个适用于任何操作系统的解决方案,而不仅仅是一个。
答案 0 :(得分:18)
"open url" at search.cpan上的第二次点击会显示Browser::Open:
use Browser::Open qw( open_browser );
my $url = 'http://www.google.com/';
open_browser($url);
如果您的操作系统不受支持,请发送补丁或错误报告。
答案 1 :(得分:8)
您可以使用$^O
变量来识别平台,并为每个操作系统使用不同的命令。
例如:
sub open_default_browser {
my $url = shift;
my $platform = $^O;
my $cmd;
if ($platform eq 'darwin') { $cmd = "open \"$url\""; } # Mac OS X
elsif ($platform eq 'linux') { $cmd = "x-www-browser \"$url\""; } # Linux
elsif ($platform eq 'MSWin32') { $cmd = "start $url"; } # Win95..Win7
if (defined $cmd) {
system($cmd);
} else {
die "Can't locate default browser";
}
}
open_default_browser("http://www.example.com/");
答案 2 :(得分:1)
如果无法选择或不需要安装CPAN模块Browser::Open,Taras' answer提供了一个不错的选择,但可以通过以下方式进行改进:
&
和^
的网址)在Windows上强大地运行该功能。xdg-open
实用程序的其他操作系统的支持,即所有与freedesktop.org兼容的操作系统,即使用基于X Window的GUI,其中包括非Linux平台例如PC-BSD(基于FreeBSD)和OpenSolaris。# SYNOPSIS
# openurl <url>
# DESCRIPTION
# Opens the specified URL in the system's default browser.
# COMPATIBILITY
# OSX, Windows (including MSYS, Git Bash, and Cygwin), as well as Freedesktop-compliant
# OSs, which includes many Linux distros (e.g., Ubuntu), PC-BSD, OpenSolaris...
sub openurl {
my $url = shift;
my $platform = $^O;
my $cmd;
if ($platform eq 'darwin') { $cmd = "open \"$url\""; } # OS X
elsif ($platform eq 'MSWin32' or $platform eq 'msys') { $cmd = "start \"\" \"$url\""; } # Windows native or MSYS / Git Bash
elsif ($platform eq 'cygwin') { $cmd = "cmd.exe /c start \"\" \"$url \""; } # Cygwin; !! Note the required trailing space.
else { $cmd = "xdg-open \"$url\""; } # assume a Freedesktop-compliant OS, which includes many Linux distros, PC-BSD, OpenSolaris, ...
if (system($cmd) != 0) {
die "Cannot locate or failed to open default browser; please open '$url' manually.";
}
}
Cygwin警告:奇怪的是,保护传递给cmd.exe
的URL的唯一方法是解释字符。例如&
和^
将追加一个尾随空格。这适用于除一个边缘外的所有情况,但在现实世界中应该很少见:如果URL包含%FOO%
之类的内容,并且存在名为FOO
的环境变量 ,%FOO%
无意中被扩大了。