Se l'installazione del modulo CPAN Browser::Open non è un'opzione o meno desiderata, Taras' answer fornisce una buona alternativa, ma può essere migliorato nei seguenti modi:
- fare la la funzione funziona in modo affidabile su Windows con URL che contengono metacaratteri di shell come
&
e ^
.
- su Windows, aggiungere il supporto per la MSYS, Git Bash, e gli ambienti Unix-emulazione Cygwin
- aggiungere il supporto per i sistemi operativi aggiuntivi che hanno anche l'utilità
xdg-open
, vale a dire tutti i sistemi operativi che sono freedesktop.org compatibile, vale a dire, utilizzare le GUI che sono basati su X Window, che include piattaforme non Linux come PC-BSD (basato su FreeBSD) e 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 avvertimento: Stranamente, l'unico modo per proteggere l'URL passato a cmd.exe
dall'interpretazione di caratteri. ad esempio &
e ^
è a aggiungere uno spazio finale. Questo funziona in tutti i casi tranne uno, che, tuttavia, dovrebbe essere raro nel mondo reale: se l'URL contiene qualcosa come %FOO%
e una variabile di ambiente denominata FOO
esiste, %FOO%
viene inavvertitamente espansa.
Browser :: Open non funziona per Cygwin. Usa solo 'start' e non 'cygstart'. – Chloe
@Chloe, sì, questo è [un bug in Browser :: Open] (https://rt.cpan.org/Public/Bug/Display.html?id=85972). Spero che venga risolto presto. – cjm