调试问题解决

调试问题解决

@output1 = $session->cmd(-String => "$TR" , -Timeout => 300);
               $fan="@output1";
               @fan=$fan=~ m/\s+:\s+(.*\sdBm$)/img ;};
               @fan[$num]= $1 ;
               $num++;


调试时出现  Scalar value @fan[$num] better written as $fan[$num]

我要把比较出的值依次序 添加进@fan ,该怎么办??谢谢了


QUOTE:
原帖由 hustddb 于 2009-1-12 16:44 发表
@output1 = $session->cmd(-String => "$TR" , -Timeout => 300);
               $fan="@output1";
               @fan=$fan=~ m/\s+:\s+(.*\sdBm$)/img ;};
               @fan[$num]= $1 ;
           ...

提示说了@fan[$num] -> $fan[$num]
或者push @fan, $1
是在循环内给@fan添加元素吗?
看effective perl programming
里面有一条就是不要使用只有一个元素的切片(数组或者散列),那样效率不高
你这个就属于只有一个元素的数组切片,so better to use $, not @


QUOTE:
原帖由 ynchnluiti 于 2009-1-12 16:54 发表

提示说了@fan[$num] -> $fan[$num]
或者push @fan, $1

Perl 程序员很少直接用 index 访问数组,而是用 push/pop/shift/unshift,C 程序员才总是直接用 index 访问数组成员,因为没有其他方法了


QUOTE:
原帖由 MMMIX 于 2009-1-12 17:53 发表

Perl 程序员很少直接用 index 访问数组,而是用 push/pop/shift/unshift,C 程序员才总是直接用 index 访问数组成员,因为没有其他方法了

perl太智能了。
可是改成@fan[$num] -> $fan[$num]
还是报错
是在循环内给@fan添加元素  直接push 就可以?


QUOTE:
原帖由 hustddb 于 2009-1-12 23:06 发表
可是改成@fan[$num] -> $fan[$num]
还是报错

代码不全

QUOTE:
@output1 = $session->cmd(-String => "$TR" , -Timeout => 300);
               $fan="@output1";
               @fan=$fan=~ m/\s+:\s+(.*\sdBm$)/img ;};  #{没贴出来?。这样赋值,@fan之前的值会覆盖吧
               @fan[$num]= $1 ;              #上面已经把匹配的结果赋值给@fan了。并且这里应该在匹配成功时才引用$1



QUOTE:
原帖由 hustddb 于 2009-1-12 23:08 发表
是在循环内给@fan添加元素  直接push 就可以?

可以啊,贴的代码不太全,所以不是很清楚你的需求。

简单写一下

[Copy to clipboard] [ - ]
CODE:
     ...
    @output1 = $session->cmd(-String => "$TR" , -Timeout => 300);
    $fan="@output1";
    push @fan, $fan=~ m/\s+:\s+(.*\sdBm$)/img;
#};
#@fan[$num]= $1 ;