刚开始学perl,本着偷懒的精神写了个脚本,大家不要笑话阿

刚开始学perl,本着偷懒的精神写了个脚本,大家不要笑话阿

开发中经常要重新启动tomcat,一天n次,想起哪位大虾说得:如果每天都要重复做一件事情就写成脚本,刚开始学perl,试着用perl做了下,启动停止放在了一起
贴出来让大家批评批评

#!/usr/bin/perl -w
use strict;
print "输入1关闭tomcat,2启动tomcat\n";
chomp($_=<STDIN>);
if(/2|1/)
{
    print "next\n";
    if($_==1)
    {
        unless(system "/home/tomcat/apache-tomcat-6.0.13/bin/shutdown.sh")
            {
            print "tomat 停止!!!\n";
            }
        else
            {
            print "停止出错($!)";
            }
    }
    else
    {
        unless(system "/home/tomcat/apache-tomcat-6.0.13/bin/startup.sh")
        {
            print "启动 tomat is ok!!!\n";
        }
        else
        {
            print "启动tomcat出错!!!($!)";
        }
    }
}
else
{
    print "未知的参数 ###\n";

很好,非常好!这种学习方法非常值得提倡!


不过我还是有几个地方要说一下,
1,UNIX 哲学告诉我们,尽量用命令行参数而不是用交互式输入(微软才那么做),假设你的程序名字叫 foo.pl,那么既然你已经输入了

[Copy to clipboard] [ - ]
CODE:
./foo.pl

来启动它,那为何不干脆写

[Copy to clipboard] [ - ]
CODE:
./foo.pl 1

连后面的输入也省了呢?


2,if (/2|1/) 这个地方写得不对,不信你输入 31 试试,建议你好好读一下入门书籍学学正则表达式。而且在你这个程序中,这一行完全可以去掉,直接写成

[Copy to clipboard] [ - ]
CODE:
if ( $_==1 ){
    ....
}
elsif( $_==2 ){
    ....
}
else{
    print "未知的参数 ###\n";
}

这样就好了。


3,总体来说,你的程序可以改成如下这样(警告!仅做等价代换,未经测试):

[Copy to clipboard] [ - ]
CODE:
#!/usr/bin/perl -w
use strict;
use warnings;

my $option = shift || '';

if( $option eq 'start' ){
    system "/home/tomcat/apache-tomcat-6.0.13/bin/startup.sh"
        or print "启动tomcat出错!!!($!)\n";
}
elsif( $option eq 'stop' ){
    system "/home/tomcat/apache-tomcat-6.0.13/bin/shutdown.sh"
        or print "停止出错($!)\n";
}
else{
    print "用法: $0 <start|stop>\n";
}

注意我把 1 2 改成了 start stop,主要是考虑到这样可读性更好一些。

最后再表扬一下,use strict 用得非常好!以后一定要继续保持这个习惯。
众多板块中,flw最勤劳
学习了


QUOTE:
原帖由 flw 于 2007-11-29 18:54 发表
很好,非常好!这种学习方法非常值得提倡!


不过我还是有几个地方要说一下,
1,UNIX 哲学告诉我们,尽量用命令行参数而不是用交互式输入(微软才那么做),假设你的程序名字叫 foo.pl,那么既然你已经输 ...

多谢flw斑竹的指点
呵呵,不错。不过我倒觉得这样的东西用shell写更方便一点。
请问
my $option = shift || '';
这一句作用是什么。


QUOTE:
原帖由 rubilly 于 2007-12-1 21:58 发表
请问
my $option = shift || '';
这一句作用是什么。

你就不能找本书看一看吗?
perldoc perlop 找 ||
perldoc -f shift
#!/usr/bin/perl -w
use strict;
use warnings;

my $option = shift || '';

if( $option eq 'start' ){
    system "/home/tomcat/apache-tomcat-6.0.13/bin/startup.sh"
        or print "启动tomcat出错!!!($!)\n";
}
elsif( $option eq 'stop' ){
    system "/home/tomcat/apache-tomcat-6.0.13/bin/shutdown.sh"
        or print "停止出错($!)\n";
}
else{
    print "用法: $0 <start|stop>\n";
}

请问flw斑竹,
-w 和 use warnings的作用是不是一样呢?
是一样的