Nếu cài đặt CPAN mô-đun Browser::Open không phải là một lựa chọn hay không mong muốn, Taras' answer cung cấp một lựa chọn tốt, nhưng có thể được cải thiện trong các cách sau:
- làm cho chức năng hoạt động mạnh mẽ trên Windows với các URL chứa các siêu ký tự shell như
&
và ^
.
- trên Windows, hỗ trợ thêm cho các MSYS, Git Bash, và môi trường Unix-thi đua Cygwin
- thêm hỗ trợ cho hệ điều hành bổ sung mà còn có các tiện ích
xdg-open
, cụ thể là tất cả các HĐH có freedesktop.org -tương thích, ví dụ, sử dụng giao diện đồ họa dựa trên X Window, bao gồm các nền tảng không phải Linux như PC-BSD (FreeBSD-based) và 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 caveat: Bizarrely, cách duy nhất để bảo vệ các URL được chuyển đến cmd.exe
từ giải thích các ký tự. chẳng hạn như &
và ^
là nối thêm dấu cách. Điều này hoạt động trong tất cả trừ một trường hợp cạnh, tuy nhiên, hiếm khi xảy ra trong thế giới thực: nếu URL chứa một cái gì đó như %FOO%
và biến môi trường có tên FOO
tồn tại, %FOO%
vô tình được mở rộng.
Trình duyệt :: Mở không hoạt động cho Cygwin. Nó chỉ sử dụng 'bắt đầu' không phải 'cygstart'. – Chloe
@Chloe, vâng, đó là [một lỗi trong Trình duyệt :: Mở] (https://rt.cpan.org/Public/Bug/Display.html?id=85972). Hy vọng rằng, nó sẽ được sửa chữa sớm. – cjm