Ответ 1
Второй хит "open url" в search.cpan вызывает Browser::Open:
use Browser::Open qw( open_browser );
my $url = 'http://www.google.com/';
open_browser($url);
Если ваша ОС не поддерживается, отправьте патч или отчет об ошибке.
Я хочу открыть URL-адрес, например http://www.example.com/
, в конце Perl script. Я не хочу обращаться к нему с помощью WWW:: Mechanize, но на самом деле показывать веб-страницу пользователю в графическом веб-браузере.
Есть способы сделать это в Mac (open URL
) и Windows, но я хочу, чтобы решение работало в любой операционной системе, а не только в одном.
Второй хит "open url" в search.cpan вызывает Browser::Open:
use Browser::Open qw( open_browser );
my $url = 'http://www.google.com/';
open_browser($url);
Если ваша ОС не поддерживается, отправьте патч или отчет об ошибке.
Вы можете использовать переменную $^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/");
Если установить модуль CPAN Browser:: Open, это не вариант или не требуется, Taras "ответ является хорошей альтернативой, но может быть улучшен следующими способами:
&
и ^
.xdg-open
, а именно все ОС, которые freedesktop.org - совместимы, т.е., используйте графические интерфейсы, основанные на X Window, которые включают платформы, отличные от Linux, такие как PC-BSD (на основе FreeBSD) и OpenSolaris.# SYNOPSIS
# openurl <url>
# DESCRIPTION
# Opens the specified URL in the system 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 caveat: Bizarrely, единственный способ защитить URL-адрес, переданный cmd.exe
из интерпретации символов. такие как &
и ^
, должны добавить конечное пространство. Это работает во всех случаях, кроме одного края, который, однако, должен быть редок в реальном мире: если URL-адрес содержит что-то вроде %FOO%
и существует переменная среды с именем FOO
, %FOO%
непреднамеренно расширяется.