我目前正在尝试使用Perl中的命令行参数设置调试标志,我似乎遇到了一些我认为很容易的问题.
my $debugvalue;
my $file = $ARGV[0] or die;
if ($ARGV[1] == "debug")
{
$debugvalue = 1;
}else
{
$debugvalue = 0;
}
Run Code Online (Sandbox Code Playgroud)
我想输入一个文件后跟一个单词纯粹说调试,如果没有,那么将标志设置为0.
test.pl file.txt debug
Run Code Online (Sandbox Code Playgroud)
将标志设置为1
test.pl file.txt调试
将标志设置为0
我会假设你这样做,除了输入的内容,它总是落入if的第一部分并将标志设置为1.
这样可以正常工作,但你需要使用字符串比较eq,而不是数字比较==.
if ($ARGV[1] eq "debug")
Run Code Online (Sandbox Code Playgroud)
此外,您可以将其简化为:
my $debugvalue = $ARGV[1] eq "debug";
Run Code Online (Sandbox Code Playgroud)
一般来说,我更喜欢使用环境进行调试设置.
my $debugvalue = $ENV{DEBUG} || 0;
Run Code Online (Sandbox Code Playgroud)
然后你可以做以下事情:
DEBUG=1 test.pl file.txt
Run Code Online (Sandbox Code Playgroud)
或者为bash或zsh中的每次运行设置测试:
export DEBUG=1
test.pl file.txt
test.pl file2.txt
test.pl file3.txt
Run Code Online (Sandbox Code Playgroud)
如果您需要积极的调试输出来帮助诊断特定问题,甚至可以有多个调试级别:
DEBUG=3 test.pl file.txt
Run Code Online (Sandbox Code Playgroud)
在你的代码中:
warn "Fiddly Detail $x\n" if $debugvalue > 2;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2409 次 |
| 最近记录: |