【发布时间】:2014-09-28 15:07:26
【问题描述】:
我有以下代码:
#!/usr/bin/perl -w
use warnings;
use diagnostics;
open $fh, "<", "$ARGV[0]" or die "Could not open file: $!";
sub getsub {
my $sub = $_[0];
print "sub entered for $sub\n";
while (<$fh>) {
if ( /\.subckt $sub/ .. /\.ends/ ) {
print;
}
}
}
while (<$fh>) {
if ( $_ =~ /^xa1/ ) {
$line = $_;
print "line found to be $line\n";
while ( ( my $nxt = readline($fh) ) =~ /^\+/ ) {
$line = $nxt;
print "line changed to $line\n";
}
$line =~ s/\s+$//;
print "last line is $line\n";
my $sub = ( split '\s', $line )[-1];
print "subcircuit found is $sub in $line\n";
getsub($sub);
}
}
在这里,我试图在getsub 例程中的两个模式之间打印一些文本。但是当我尝试运行它时,我进入了子例程,但没有进入子例程内的 if 块。我正在尝试在以下文件上运行它:
.subckt a1 x y z
xa a b c1
xb c d e1
xc f g h1
.ends
.subckt c1 x y z
xa a b f
xb c d e
xc f g h
.ends
.subckt e1 x y z
xa a b c1
xb c d k1
xc f g h1
.ends
xa1 a s f a1
我想打印.subckt a1和.ends之间的文件内容。
我知道这可以通过命令行上的 perl 一行来完成,但我想为不同的文件创建一些通用脚本,所以我只需要这样做。上面的代码有什么问题。
【问题讨论】:
-
你能放置预期的输出吗?我们可以看到 $line 没有声明,甚至文件句柄也应该是我的 $fh 因为它是一个变量。尽量使用严格;并使用警告;那么你就会知道代码中的错误出现在哪里。
-
您想要解释为什么您的代码不工作,还是只想让别人编写脚本的工作版本?
-
@ialarmedalien 如果你能说出什么是错的,那将是最好的我不想让你为我写代码我想我在问题中说清楚了......
标签: perl scope subroutine