自己写的browse.bat与perl写的url_handler.pl的比较
以前自己也写过Windows下自动打开多个浏览器测试某个URI,提高浏览器兼容性测试效率。
但是写的browse.bat文件还是最基础简陋的
- @echo off
- if '%1'=='-c' (
- start /d "C:\Program Files\Google\Chrome\Application\" chrome.exe -new-tab %2
- exit
- )
- if '%1'=='-f' (
- start /d "C:\Program Files\Mozilla Firefox" firefox.exe -new-tab %2
- exit
- )
- if '%1'=='-i' (
- start /d "C:\Program Files\Internet Explorer" iexplore.exe %2
- exit
- )
- if '%1'=='-d' (
- rundll32 url.dll,FileProtocolHandler %2
- exit
- )
- if '%1'=='-a' (
- call browse -c %2
- call browse -f %2
- call browse -i %2
- ) else (
- explorer %1
今天恰巧看到cygwin安装目录下用perl写的url_handler.pl,感觉作者的思路挺有趣。
代码共赏析:C:\cygwin\bin\url_handler.pl
- if ($ENV{BROWSER}) {
- push(@try, split(/:/, $ENV{BROWSER}));
- } else { # set some defaults
- push(@try, 'firefox -a firefox -remote openURL\(%s\)');
- push(@try, 'mozilla -remote openURL\(%s\)');
- push(@try, 'opera -remote openURL\(%s\)');
- push(@try, 'galeon -n');
- push(@try, 'lynx'); # prefer lynx over links as it can handle news:-urls
- push(@try, qw('links2 -g' links w3m));
- push(@try, 'kfmclient newTab'); # has no useful return-value on error
- }
上面的亮点:
1.使用了@try这样一个思路,尝试打开.(没有理解perl的@try的含义?)
2.没有用很多的if-else而是用push放入一个数组(没有查阅过perl的push含义?)
- #! /usr/bin/perl -w
- # example of how to call an appropriate viewer
- #
- # URLs must start with a scheme and shell metas should be already quoted
- # (tin doesn't recognize URLs without a scheme and it quotes the metas)
- use strict;
- use warnings;
- (my $pname = $) =~ s#^.*/##;
- die "Usage: $pname URL" if $#ARGV != 0;
- # version Number
- my $version = "0.1.1";
- my ($method, $url, $match, @try);
- $method = $url = $ARGV[];
- $method =~ s#^([^:]+):.*#$1#io;
- # shell escape
- $url =~ s#([\&\;\`\'\\\"\|\*\?\~\<\>\^\(\)\[\]\{\}\$\010\013\020\011])#\\$1#g;
- if ($ENV{"BROWSER_".uc($method)}) {
- push(@try, split(/:/, $ENV{"BROWSER_".uc($method)}));
- } else {
- if ($ENV{BROWSER}) {
- push(@try, split(/:/, $ENV{BROWSER}));
- } else { # set some defaults
- push(@try, 'firefox -a firefox -remote openURL\(%s\)');
- push(@try, 'mozilla -remote openURL\(%s\)');
- push(@try, 'opera -remote openURL\(%s\)');
- push(@try, 'galeon -n');
- push(@try, 'lynx'); # prefer lynx over links as it can handle news:-urls
- push(@try, qw('links2 -g' links w3m));
- push(@try, 'kfmclient newTab'); # has no useful return-value on error
- }
- }
- for my $browser (@try) {
- # ignore empty parts
- next if ($browser =~ m/^$/o);
- # expand %s if not preceded by odd number of %
- $match = $browser =~ s/(?<!%)((?:%%)*)%s/$$url/og;
- # expand %c if not preceded by odd number of %
- $browser =~ s/(?<!%)((?:%%)*)%c/$:/og;
- # reduce dubble %
- $browser =~ s/%%/%/og;
- # append URL if no %s expansion took place
- $browser .= " ".$url if (!$match);
- # leave loop if $browser was started successful
- last if (system("$browser 2>/dev/null") == );
- }
- exit ;
- __END__
- =head1 NAME
- url_handler.pl - Spawn appropriate viewer for a given URL
- =head1 SYNOPSIS
- B<url_handler.pl> I<URL>
- =head1 DESCRIPTION
- B<url_handler.pl> takes an URL as argument and spawns the first executable
- viewer found in either B<$BROWSER_I<SCHEME>> or B<$BROWSER>.
- =head1 ENVIRONMENT
- =over
- =item B<$BROWSER_I<SCHEME>>
- The user's preferred utility to browse URLs of tye I<SCHEME>. May actually
- consist of a sequence of colon-separated browser commands to be tried in
- order until one succeeds. If a command part contains %s, the URL is
- substituted there, otherwise the browser command is simply called with the
- URL as its last argument. %% is replaced by a single percent sign (%), and
- %c is replaced by a colon (:).
- Examples:
- =over 4
- =item $BROWSER_FTP="wget:ncftp"
- =item $BROWSER_GOPHER="lynx:links"
- =item $BROWSER_MAILTO="mutt:pine -url"
- =item $BROWSER_NEWS="lynx"
- =item $BROWSER_NNTP="lynx"
- =back
- Z<>
- =item B<$BROWSER>
- The user's preferred utility to browse URLs for which there is no special
- viewer defined via B<$BROWSER_I<SCHEME>>. Again it may actually consist of a
- sequence of colon-separated browser commands to be tried in order until one
- succeeds. If a command part contains %s, the URL is substituted there,
- otherwise the browser command is simply called with the URL as its last
- argument. %% is replaced by a single percent sign (%), and %c is replaced
- by a colon (:).
- Examples:
- =over
- =item $BROWSER="firefox -a firefox -remote openURL\(%s\):opera:konqueror:links2 -g:lynx:w3m"
- =back
- =head1 SECURITY
- B<url_handler.pl> was designed to work together with B<tin>() which only
- issues shell escaped absolute URLs thus B<url_handler.pl> does not try hard
- to shell escape its input nor does it convert relative URLs into absolute
- ones! If you use B<url_handler.pl> from other applications be sure to at
- least shell escaped its input!
- =head1 AUTHOR
- Urs Janssen E<lt>urs@tin.orgE<gt>
- =head1 SEE ALSO
- http://www.catb.org/~esr/BROWSER/
- http://www.dwheeler.com/browse/secure_browser.html
- =cut
自己写的browse.bat与perl写的url_handler.pl的比较的更多相关文章
- 横竖两个数字塔的效果BAT批处理怎么写?
横竖两个数字塔的效果BAT批处理怎么写?@echo offfor /l %%a in (0,1,1) do ( for /l %%i in (0,1,9) do ( for ...
- 再议perl写多线程端口扫描器
再议perl写多线程端口扫描器 http://blog.csdn.net/sx1989827/article/details/4642179 perl写端口多线程扫描器 http://blog.csd ...
- 瞧一瞧,看一看呐,用MVC+EF快速弄出一个CRUD,一行代码都不用写,真的一行代码都不用写!!!!
瞧一瞧,看一看呐用MVC+EF快速弄出一个CRUD,一行代码都不用写,真的一行代码都不用写!!!! 现在要写的呢就是,用MVC和EF弄出一个CRUD四个页面和一个列表页面的一个快速DEMO,当然是在不 ...
- 刺猬大作战(游戏引擎用Free Pascal写成,GUI用C++写成,使用SDL和Qt4)
游戏特性[编辑] 游戏引擎用Free Pascal写成,GUI用C++写成,使用SDL和Qt4[2]. 0.9.12开始支持实时动态缩放游戏画面. 个性化[编辑] 刺猬大作战有着高度定制性 游戏模式: ...
- php 写内容到文件,把日志写到log文件
php 写内容到文件,把日志写到log文件 <?php header("Content-type: text/html; charset=utf-8"); /******** ...
- 以前写SpringMVC的时候,如果需要访问一个页面,必须要写Controller类,然后再写一个方法跳转到页面,感觉好麻烦,其实重写WebMvcConfigurerAdapter中的addViewControllers方法即可达到效果了
以前写SpringMVC的时候,如果需要访问一个页面,必须要写Controller类,然后再写一个方法跳转到页面,感觉好麻烦,其实重写WebMvcConfigurerAdapter中的addViewC ...
- 出错的方法有可能是JDK,也可能是程序员写的程序,无论谁写的,抛出一定用throw
应对未检查异常就是养成良好的检查习惯. 已检查异常是不可避免的,对于已检查异常必须实现定义好应对的方法. 已检查异常肯定跨越出了虚拟机的范围.(比如“未找到文件”) 如何处理已检查异常(对于所有的已检 ...
- C++代写,代写C++,C++程序代写,C++ assignment代写
C++代写,代写C++,C++程序代写 关于C++代写,我们的涉猎范围: C++数据结构.算法题目 C++操作系统os题目 C++网络编程networking题目 C++ Linux题目 C++ Wi ...
- 剖析手写Vue,你也可以手写一个MVVM框架
剖析手写Vue,你也可以手写一个MVVM框架# 邮箱:563995050@qq.com github: https://github.com/xiaoqiuxiong 作者:肖秋雄(eddy) 温馨提 ...
随机推荐
- Activity总结
1)Activity在app构建中的位置: 2)与window和视图体系.事件处理的关系: 3)生命周期: 4)启动方式: 5)activity管理: 6)加载管理:
- Android UI开发神兵利器之Android Action Bar Style Generator
版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/x359981514/article/details/26283129 ActionBar是3.0后的 ...
- centos7下安装docker(7docker base command 命令词典)
上一章中我总结了学习docker 镜像时所用过的命令,今天先来将docker base command 记录一下,参考:https://docs.docker.com/edge/engine/refe ...
- c++函数库中一些实用的函数
有一些程序,虽然写起来不难,但是可能比较麻烦或容易出错,这时就可以用c++函数库里自带的一些实用的函数. 这里只记录一些不太常见的函数. ------------------------------- ...
- JSON数据解析(自写)
自写的JSON解析数据 void setup() { Serial.begin(115200); char chArray[50] = "some characters"; Str ...
- 说明split()与join()函数的区别?
前者是切割成数组的形式,后者是将数组转换成字符串join函数获取一批字符串,然后用分隔符字符串将它们连接起来,从而返回一个字符串.Split函数获取一个字符串,然后再分隔符处将其断开,从而返回一批字符 ...
- infura的使用
infura 官网: https://infura.io/本地安装geth的方法需要花比较多的时间和空间来同步区块,利用infura可以简单很多,infura提供公开以太坊和测试节点,可以利用infu ...
- 【Luogu P1074】靶形数独
Luogu P1074 题意:给一个数独,问怎么填会使每个位置填的数乘以它的权值得到的和最大.其中每个位置的权值在题面中给出了. 思路:首先我们考虑搜索.由于我们不可能搜每个格子取太多的数,所以我们从 ...
- jquery中的选择器:has和:not的用法
这两个选择器可以帮助我们在选择父级和子孙之间关系的dom更从容~ <div><p><span>Hello</span></p></di ...
- php和js字符串的acsii码函数
简单普及下编码知识: javascript中有charCodeAt(),根据字符查找ascii码. String.fromCharCode(),根据ascii码查找对应的字符. console.log ...