perl如何实现C语言中宏的功能?

我想实现在打印输出信息前输入文件名(__FILE__)和行号(__LINE__),望大神指点... 我想实现在打印输出信息前输入文件名(__FILE__)和行号(__LINE__),望大神指点 展开
 我来答
jianxia2k
2015-11-23 · TA获得超过399个赞
知道小有建树答主
回答量:368
采纳率:82%
帮助的人:143万
展开全部
可以直接使用,例:
print "FILE: ", __FILE__, " Line: ", __LINE__, "\n";

参见perldoc perldata
The special literals __FILE__, __LINE__, and __PACKAGE__ represent the current filename, line number, and package name at that point in your program.
追问
首先谢谢你的解答,这种方案我知道,不过比较繁琐,在每次打印日志输出的时候每次都要输入这些内容print  __FILE__,__LINE__,$msginfo,"\n";   我是想实现像C语言宏一样的功能:eg
#define LOG __FILE__,__LINE__
然后在代码需要打印日志的地方就使用 print LOG, $msginfo,"\n";这样的方式,不知道是否可行?
追答

可以考虑自定义一个函数,在里面使用caller关键字。

caller  Returns the context of the current subroutine call.

                   # 0         1          2

                   ($package, $filename, $line) = caller;


#!/usr/bin/perl
use strict;
use warnings;

my $Debug_Flag = 1;

sub logmsg {
    return if (!$Debug_Flag);
    my $msg = shift;
    my ($package, $file, $line) = (caller)[0,1,2];
    my $timestring = "";   # 生成当前时间

    print "PACKAGE: $package, FILE: $file, LINE: $line\n";
    print "TIME; $timestring\n";
    print "$msg\n";
}


&logmsg("I'm line 19 in file test.pl");
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友d580670
2015-11-23 · TA获得超过1984个赞
知道大有可为答主
回答量:2054
采纳率:82%
帮助的人:757万
展开全部
print __LINE__, __FILE__;一样的方式也是可行的
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式