我在perl中有此脚本:
#!/usr/bin/perl
use strict;
use warnings;
while () {
if (/^PARSING IN CURSOR/../END OF STMT/) {
if (/^PARSING IN CURSOR/) {
s/^PARSING IN CURSOR \#//;
s/ [a-z]+=/!/g;
s/\n$/!/;
$_="$.!$_";
}
unless (/^END OF STMT/) {
print;
}
}
}
在llinux perl中执行时cursor.pl显示以下消息:在cursor.pl第5行的模式匹配(m //)中使用未初始化的值$ _。 该文件的作用是在oracle中将一个外部表加载到跟踪文件中,当我选择该表时,它不返回任何内容,并且仍在运行。
答案 0 :(得分:4)
while () { ... }
描述了一个无限循环(被视为while (1) { ... }
),这就是程序保持运行的原因。根据您脚本的其余部分,我想您想说的是
while (<>) { ... }
等效于
while (defined($_ = <ARGV>)) { ... }
在这种构造中,Perl从默认文件描述符中读取一行并将其分配给变量$_
。当文件句柄用尽并且没有更多的输入要读取时,Perl将$_
设置为未定义的值,然后循环结束。
答案 1 :(得分:0)
文件的作用是在oracle中将外部表加载到跟踪文件
不,不是。您的代码中没有文件IO
您的代码中没有任何内容可以将$_
设置为定义的值,因此正则表达式模式匹配将生成此警告
while () { ... }
只是一个不确定的循环,最有可能的目的是从命令行上指定的文件中读取。应该是
while ( <> ) {
...
}