【发布时间】:2009-11-19 18:00:08
【问题描述】:
此代码有效 - 它采用一组完整的 txt 文件路径并将它们剥离,以便在调用 $exam_nums[$x] 时返回文件名
for (0..$#exam_nums)
{
$exam_nums[$_] =~ s/\.txt$//; #remove extension
$exam_nums[$_] =~ s/$dir//g; #remove path
}
当我尝试对单个变量执行此操作时,它不起作用。我正在调用一个子程序并向它发送一个礼物,但变量最后是空的。 (它正在进入 if 语句块,因为那里的其他行运行良好。)这是代码:
呼叫下属:
notify($_);
$_ 来自一个有效的 foreach(@files) 循环
子:
sub notify
{
if(shift)
{
$ex_num = shift;
$ex_num =~ s/\.txt$//; #remove extension
$ex_num =~ s/$dir//g; #remove path
print $ex_num;
print "\nanything";
}
}
我尝试在正则表达式的“删除扩展名”部分删除$,但这没有帮助。
【问题讨论】:
-
当您遇到这些问题时,请在使用之前打印变量的值,以验证它是否具有您认为的值。
-
@brian - 我喜欢生活在边缘......但说真的......真正的问题是我不知道询问是否存在转变会破坏它......在通过它之前到函数,它会打印。在函数之后,它不会
-
如果您不知道 Perl 内置函数会做什么,请阅读它的文档。不过,打印前后的值会对您有所帮助。您可以做很多事情来帮助自己,在提问之前您应该尝试这样做。
-
我明白......有时我什至不知道从哪里开始,因此问题的措辞......我认为这个问题出在正则表达式中,而不是使用 shift(s )
标签: regex perl variables shift