如何在任何操作系统上启动Perl中的默认Web浏览器?

时间:2012-01-15 03:03:43

标签: perl url browser default

我想在Perl脚本的末尾打开一个URL,例如http://www.example.com/。我不想使用WWW :: Mechanize访问它,但实际上是在图形Web浏览器中向用户显示网页。

有很多方法可以在Mac(open URL)和Windows中执行此操作,但我想要一个适用于任何操作系统的解决方案,而不仅仅是一个。

3 个答案:

答案 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::OpenTaras' answer提供了一个不错的选择,但可以通过以下方式进行改进:

  • 使用包含shell元字符(例如&^的网址)在Windows上强大地运行该功能。
  • 在Windows上,添加对MSYS,Git Bash和Cygwin Unix仿真环境的支持
  • 添加对具有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%无意中被扩大了。