免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2359 | 回复: 5
打印 上一主题 下一主题

求翻译 该子程序功能 [复制链接]

论坛徽章:
1
数据库技术版块每日发帖之星
日期:2016-01-14 06:20:00
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-11-29 15:30 |只看该作者 |倒序浏览
求翻译啊 子程序debug大概是干什么的 我知道shift是取数组的头一个元素,那么$@是指我们输入的数组吗?不然数组数据从哪儿来?
  1. my $debug = $ENV{SERIALSERVER_DEBUG}||DEBUG_LEVEL;
  2. sub debug($@)
  3. {
  4.     my $msglevel = shift;

  5.     unshift(@_ , getLongTime()." : ");
  6.     print @_
  7.         if ($debug >= $msglevel);
  8. }
复制代码

论坛徽章:
1
数据库技术版块每日发帖之星
日期:2016-01-14 06:20:00
2 [报告]
发表于 2011-11-29 15:42 |只看该作者
回复 1# 吹风筒


    还有,程序的后面
  1. debug 0,"程序 $DomainId : $PrgName 启动...\n";
复制代码
这里是引用了上面的 子程序 sub debug?0是传入参数?
求大虾们 给我指点指点啦

论坛徽章:
145
技术图书徽章
日期:2013-10-01 15:32:13戌狗
日期:2013-10-25 13:31:35金牛座
日期:2013-11-04 16:22:07子鼠
日期:2013-11-18 18:48:57白羊座
日期:2013-11-29 10:09:11狮子座
日期:2013-12-12 09:57:42白羊座
日期:2013-12-24 16:24:46辰龙
日期:2014-01-08 15:26:12技术图书徽章
日期:2014-01-17 13:24:40巳蛇
日期:2014-02-18 14:32:59未羊
日期:2014-02-20 14:12:13白羊座
日期:2014-02-26 12:06:59
3 [报告]
发表于 2011-11-29 16:05 |只看该作者
回复 1# 吹风筒

$ perldoc perlsub

NAME
       perlsub - Perl subroutines

SYNOPSIS
       To declare subroutines:

           sub NAME;                     # A "forward" declaration.
           sub NAME(PROTO);              #  ditto, but with prototypes
           sub NAME : ATTRS;             #  with attributes
           sub NAME(PROTO) : ATTRS;      #  with attributes and prototypes

           sub NAME BLOCK                # A declaration and a definition.
           sub NAME(PROTO) BLOCK         #  ditto, but with prototypes
           sub NAME : ATTRS BLOCK        #  with attributes
           sub NAME(PROTO) : ATTRS BLOCK #  with prototypes and attributes

           ...

论坛徽章:
1
数据库技术版块每日发帖之星
日期:2016-01-14 06:20:00
4 [报告]
发表于 2011-11-29 17:03 |只看该作者
回复 3# jason680


第二行开始是 子程序debug定义 能明白
但是子程序调用冒似 要用符号&
而这里的第一句$debug 指的是另外一个变量?

论坛徽章:
0
5 [报告]
发表于 2011-11-29 17:08 |只看该作者
回复 4# 吹风筒


    &不用也行;
   是你第一行定义的变量,跟你传入的0比较看是否打印

论坛徽章:
0
6 [报告]
发表于 2011-11-30 09:45 |只看该作者
呵呵,其实这是一段经常见的程序中打印debug信息的方式
可以依据程序的debug level,而有效增加或者减少打印调试的语句。

知识点:
1)标量$debug
2)函数debug定义与声明
3)函数debug调用

具体解释如下:

my $debug = $ENV{SERIALSERVER_DEBUG}||DEBUG_LEVEL;
#这句话定义标量debug,注意'$';后面我猜测应该是一个数值,用以表示debug level
sub debug($@)
{
    my $msglevel = shift;
    #取第一个参数作为msglevel变量,msglevel的用处后面可以看到

    unshift(@_ , getLongTime()." : ");
    #将时间单位加入到默认变量@_当中,注意pop,push是在数组的后段增减;而shift,unshift是作用在数组的前段
    print @_
        if ($debug >= $msglevel);
    #一个判断逻辑,即如果变量msglevel不大于变量debug,那么打印传入进来的参数并加上当前时间
}

debug 0,"程序 $DomainId : $PrgName 启动...\n";
#调用debug函数,该函数已经在调用之前定义并声明
#传入的第一个参数为0,表示msglevel;所以只要变量值debug > 0,就打印传入的第二个参数内容并且加上当前时间
#同样,如果第一个参数的值 > debug变量值,函数就忽略打印语句

hehe, have a nice day!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP