- 论坛徽章:
- 1
|
在附件中是我这几天写的一个可以用于跟踪变量的代码.
它的使用方法是在你要跟踪的代码中加入下面的一段
- BEGIN{
- push (@INC,".") ;
- use DebugTie;
- tie(
- $variable_you_watching,
- DebugTie,
- name => "variable_name"
- );
- }
复制代码
上面是你可以跟踪标量,如果是数组
- BEGIN{
- push (@INC,".");
- use DebugTie;
- tie(
- @variable_you_watching,
- DebugTie,
- name => "variable_name"
- );
- }
复制代码
HASH表也是相似
- BEGIN{
- push (@INC,".");
- use DebugTie;
- tie(
- %variable_you_watching,
- DebugTie,
- name => "variable_name"
- );
- }
复制代码
其中有代码可以使你动态跟踪,这个可以在命令行中指定.指定的方法是
-ts scalar_variable_name
-th hash_variable_name
-ta array_variable_name
下面是可以使用的代码,在下载的文件中也有
不过在BEGIN中也要加入下面的代码
- sub PREPARSE
- {
- use constant HASH_TIE => 1;
- use constant ARRAY_TIE => 2;
- use constant SCALAR_TIE => 3;
- my $i;
- for ($i=0;$i < @ARGV;)
- {
- my $curarg = $ARGV[$i];
- my $setval = 0;
- my @args;
- my $code = undef;
-
- if ($curarg eq "-th")
- {
- $setval = HASH_TIE;
- }
- elsif ($curarg eq "-ta")
- {
- $setval = ARRAY_TIE;
- }
- elsif ($curarg eq "-ts")
- {
- $setval = SCALAR_TIE;
- }
- if ($setval)
- {
- if ( ($i + 1 ) >= @ARGV)
- {
- die "not good ".$ARGV[$i]."\n";
- }
- $code = "tie (";
- if ($setval == HASH_TIE)
- {
- $code .="%";
- }
- elsif ($setval == ARRAY_TIE)
- {
- $code .= "@";
- }
- elsif ($setval == SCALAR_TIE)
- {
- $code .= "\$";
- }
- $code .= $ARGV[$i+1] ;
- $code .= ",DebugTie,name=>\"";
- $code .= $ARGV[$i+1];
- $code .= "\");";
- eval "$code";
- splice (@ARGV,$i,2);
-
- }
- else
- {
- $i ++;
- }
- }
- }
复制代码 |
|