2012-01-15 28 views
10

Perlスクリプトの最後に、http://www.example.com/などのURLを開きたいとします。私はWWW :: Mechanizeでそれにアクセスするのではなく、グラフィカルなWebブラウザでユーザーにWebページを実際に表示したい。オペレーティングシステムでPerlでデフォルトのWebブラウザを起動するにはどうすればよいですか?

Mac(open URL)とWindowsでこれを行う方法がありますが、私はすべてのオペレーティングシステムで動作するソリューションを望んでいます。

答えて

17

"open url" at search.cpan上の第二のヒットはBrowser::Openが表示されます:

use Browser::Open qw(open_browser); 

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

お使いのOSは、パッチやバグレポートを送って、サポートされていない場合。

+0

ブラウザ:: OpenはCygwinでは機能しません。それは 'cygstart'ではなく 'start'だけを使用します。 – Chloe

+1

@Chloe、はい、それは[Browser :: Openのバグです](https://rt.cpan.org/Public/Bug/Display.html?id=85972)です。うまくいけば、すぐに修正されるでしょう。 – cjm

8

変数$^Oを使用すると、プラットフォームを特定し、各OSに異なるコマンドを使用できます。

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

なぜブラウザ::オープンを書き直すのですか? – cjm

+2

スクリプトの使用場所によって異なります。単一のスクリプトであれば、移植性を高めるために、より少ない外部依存関係を使用する必要があります。しかしモジュールはスクリプトと一緒に使うことができます。この場合、 'Browser :: Open'を使う方が良いでしょう。 – Taras

+1

"git bash" $ platform eq "msys" –

1

CPANモジュールBrowser::Openをインストールするオプションまたは望ましくないでない場合は、Taras' answerが良好な代替手段を提供するが、次の方法で改善することができる:

  • が作るたとえば

    機能は、Windows上で、&^などのシェルメタキャラクタを含むURLで堅牢に機能します。 Windows上の

  • は、MSYS、Gitのバッシュ、とCygwin Unixのエミュレーション環境のサポートを追加
  • freedesktop.orgは互換、つまり、GUIを使用しているにもxdg-open有用性を有する追加のオペレーティング・システム、すなわち、すべてのOSのサポートを追加これはX Windowベースで、PC-BSD(FreeBSDベース)やOpenSolarisなどのLinux以外のプラットフォームを含みます。
# 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という環境変数がある場合は、が不注意に展開されます。

関連する問題