2012-01-15 14 views

Respuesta

17

El segundo golpe en "open url" at search.cpan nos lleva a Browser::Open:

use Browser::Open qw(open_browser); 

my $url = 'http://www.google.com/'; 
open_browser($url); 

Si no se admite su sistema operativo, enviar un parche o un informe de error.

+0

El navegador :: Open no funciona para Cygwin. Solo usa 'start' y no 'cygstart'. – Chloe

+1

@Chloe, sí, eso es [un error en el navegador :: Abrir] (https://rt.cpan.org/Public/Bug/Display.html?id=85972). Con suerte, se solucionará pronto. – cjm

8

Puede usar la variable $^O para identificar una plataforma y usar diferentes comandos para cada sistema operativo.

Por ejemplo:

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

¿Por qué reescribir el navegador :: abrir? – cjm

+2

Depende de dónde se usará el script. Si se trata de un solo script, debe usar menos dependencias externas para una mejor portabilidad. Sin embargo, los módulos pueden estar junto con el script y en este caso es mejor usar 'Browser :: Open'. – Taras

+1

Si ejecuta este comando desde "git bash" $ platform eq "msys" –

1

Si se instala el módulo CPAN Browser::Open no es una opción o no deseada, Taras' answer proporciona una buena alternativa, pero se puede mejorar en las siguientes maneras:

  • hacer que el funcionan de forma robusta en Windows con URL que contienen metacaracteres de shell como & y ^.
  • en Windows, añadir soporte para la MSYS, Git Bash, y entornos Unix-emulación Cygwin
  • añadir soporte para sistemas operativos adicionales que también tienen la utilidad xdg-open, a saber, todos los sistemas operativos que son freedesktop.org compatible, es decir, usar GUIs que están basados ​​en X Window, que incluye plataformas que no son Linux, como PC-BSD (basado en FreeBSD) y 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 advertencia: Curiosamente, la única manera de proteger la URL pasada a cmd.exe de interpretación de caracteres. como & y ^ es anexar un espacio posterior. Esto funciona en todos menos en un caso límite, que, sin embargo, debería ser raro en el mundo real: si la URL contiene algo como %FOO% y una variable de entorno llamada FOOexiste, %FOO% se ha expandido inadvertidamente.

Cuestiones relacionadas