首页|操作系统|软件开发|网页制作|媒体动画|数据库|ASP教程|ASP.NET教程|PHP教程|JSP教程|XML教程|建站资料|软件学院|行业资讯|平面设计|网络安全|晒IT论坛|IT人才
  位置: 晒IT >> 软件开发 >> Perl编程教程 >> 正文
 
 
perl常问问题集--第三篇
perl常问问题集--第三篇
 
 

OS/2下只要用: 

    extproc perl -S -your_switches

当作 *.cmd档案的第一行 (-S 是因 cmd.exe中其 `extproc'处理的臭虫才要的)。DOS使用者应先制作一个相对的 batch 档案然後将它以 ALTERNATIVE_SHEBANG 的方式写成程式。(更多讯息在原始码版本的 INSTALL档案里) 

若安装 Activeware版的 Win95/NT 专用 Perl,它会更动 Registry的内容,把 .pl 的扩充档名与 perl直译器结合。如果你安装另一版本或是用 WinGCC建构你自己的 Win95/NT用 Perl,那你就得自己更动 Registry的内容了。 

麦金塔的 perl程式将会有适当的创造者与形态 (Creator and Type),所以双击它们就会执行这些 perl 应用程式。 

重要:不论你做什麽,请千万不要因为觉得沮丧,就把 perl 直译器丢到你的 cgi-bin目录下,好让你的 web 伺服器能执行你的程式。这是一个非常大的安全漏洞。花点时间想 想怎样才是正确的做法吧。 


--------------------------------------------------------------------------------

我能利用命令列写出有用的程式吗? 
可以。详情请看 perlrun。以下有些范例 (假设用的是标准的 Unix shell引言规则)。 

    #把第一栏和最後一栏相加
    perl -lane 'print $F[0] + $F[-1]'

    #辨别是否为文字档
    perl -le 'for(@ARGV) {print if -f && -T _}' *

    #移除 C程式中的说明
    perl -0777 -pe 's{/\*.*?\*/}{}gs' foo.c

    #让档案年轻一个月,躲避追杀的魔鬼 (daemon)
    perl -e '$X=24*60*60; utime(time(),time() + 30 * $X,@ARGV)' *

    #找出第一个未用的 uid
    perl -le '$i++ while getpwuid($i); print $i'

    #显示合理的使用说明路径 (manpath)
    echo $PATH | perl -nl -072 -e '
        s![^/+]*$!man!&&-d&&!$s{$_}++&&push@m,$_;END{print"@m"}'

好吧,最後一个例子事实上是「perl程式困惑化」竞赛 (Obfuscated Perl)的 参赛作品。 :-) 


--------------------------------------------------------------------------------

为何一行的 perl程式无法在我的 DOS/Mac/VMS系统上运作? 
问题通常出在那些系统的命令解译器对於参数的引用与 Unix shells 所作的解释不同,而後者很不幸的是这些一行 perl 的生父。在某些系统,也许你得把单引号改成双引号,但这却是你万万 不可在 Unix或 Plan9系统上作的事。你也许还得把一个 %改成 %%。 

例如说: 

    # Unix
    perl -e 'print "Hello world\n"'

    # DOS,等。
    perl -e "print \"Hello world\n\""

    # Mac
    print "Hello world\n"
     (然後执行 "Myscript"或按 Shift-Command-R)

    # VMS
    perl -e "print ""Hello world\n"""

问题是,这些方法没有一个是完全可靠的:它都得看命令解译器的脸色。在 Unix中,前两者通常可以用。在 DOS下,两者可能都没有用。若 4DOS是命令解译器,下面此法可能比 较有希望: 

  perl -e "print "Hello world\n""

在 Mac 下,端视你所用的环境为何。 MacPerl所附的 shell,或是 MPW, 其所支援的参数格式有不少都蛮像 Unix shells的,除了它自在地使用 Mac 的非 ASCII字元当成控制字元。 

恐怕我得说这问题并没有一般解。白话一点说,它真是一团乱。 

[部份答案是由 Kenneth Albanowski 所提供的。] 


--------------------------------------------------------------------------------

我得去哪里学 Perl的 CGI或是 Web程式设计呢? 
就模组来说,去 CPAN抓 CGI 和 LWP 两个模组。就书本来看,参考关於书那部份里特别和 web 相关的问题。若有与 web相关的疑难杂症,像“为何我收到 500错误”或“它在命令列模式下跑得好好的,怎麽不能在浏览器下正常执行”时,请参看: 

    The Idiot's Guide to Solving Perl/CGI Problems, by Tom Christiansen
        http://www.perl.com/perl/faq/idiots-guide.html

    Frequently Asked Questions about CGI Programming, by Nick Kew
        ftp://rtfm.mit.edu/pub/usenet/news.answers/www/cgi-faq
        http://www3.pair.com/webthing/docs/cgi/faqs/cgifaq.shtml

    Perl/CGI programming FAQ, by Shishir Gundavaram and Tom Christiansen
        http://www.perl.com/perl/faq/perl-cgi-faq.html

    The WWW Security FAQ, by Lincoln Stein
        http://www-genome.wi.mit.edu/WWW/faqs/www-security-faq.html

    World Wide Web FAQ, by Thomas Boutell
  • 上一篇: perl常问问题集--第二篇
  • 下一篇: Perl的经典用法:用Sysopen()进行更多的控制
  •  告诉好友  打印此文 关闭窗口 返回顶部
     
    热点文章
     
     
    推荐文章
     
     
    相关文章

    | 设为首页 | 加入收藏 | 联系我们 | 友情链接 | 诚聘英才 |
    Copyright© 2008 ShaiIT.Com .All Rights Reserved
    下载alexa工具,提升您的网站排名