我的脚本从某些数组中的某些文件加载一些东西,你从键盘输入一个文本,脚本搜索那些数组中文本的相关部分,如果找到它,它会做什么,如果没有,那么,另一件事,至少在理论上。
我收到以下错误:
Use of uninitialized value in pattern match (m//) at emo_full_dynamic.pl line 120, <STDIN> chunk 2.
Modification of a read-only value attempted at emo_full_dynamic.pl line 121, <STDIN> chunk 2.
line 120 = $plm3 =~ /arr_(\w+.txt)/;
我认为我的问题是$plm3 =~ /arr_(\w+.txt)/;
。我使用它,以便我可以在$1
中存储数组的名称。
这是我的代码:
#!/usr/bin/perl
use warnings;
$idx = 0;
$oldsep = $/;
opendir(DIR, 'c:/downloads/text_files/arrs/');
@files = readdir(DIR);
while ($idx <= $#files )
{
$value = $files[$idx];
if ( $value !~ m/^arr/i)
{
splice @files, $idx, 1;
}
else
{
$idx++;
}
}
foreach $plm (@files)
{
if($plm =~ m/txt$/)
{
open(ARR, "C:/downloads/text_files/arrs/$plm") or die $!;
while(<ARR>)
{ {
chomp($_);
$plm =~ m/arr_(\w+).txt/;
push(@{$1}, $_);
}
close ARR;
}
}
$plm = 0;
$idx = 0;
$stare = <STDIN>;
chomp($stare);
while($stare)
{
foreach $plm2 (@files)
{
if($plm2 =~ m/txt$/)
{
$plm2 =~ m/arr_(\w+).txt/;
if(grep $stare =~ m/$_/i, @{$1})
{
$flag = 1;
}
else
{
$flag = 0;
}
}
}
if($flag == 1)
{
$/ = "%\n";
$plm3 =~ /arr_(\w+.txt)/;
open SUPARARE, "C:/downloads/text_files/replies/$1" or die $!;
etc etc....
答案 0 :(得分:1)
首先,使用严格的编译指示总是一个好主意 - 除非你有正当理由避免它 - 。
其次,我没有在你的代码中看到$ plm3初始化。你可能忘了初始化它。
答案 1 :(得分:0)
我认为你在121行
上为变量$1
分配了一些东西
答案 2 :(得分:0)
显然有一些复制/粘贴问题否定了我的初步答案。
其他错误,无论大小:
open my $fh, ...
)splice
代替grep
(@files=grep /^arr/i, @files
)chomp($_)
会选择$_
变量我甚至不知道这条线是什么意思:
if(grep $stare =~ m/$_/i, @{$1}) {
你似乎正在使用模式匹配,其中$_
是模式(在这种情况下是......什么?没什么?有什么?),其返回值用作数组引用的grep模式,可能会或可能不会被初始化。一个非常可怕的声明。如果它确实按预期工作,则可读性非常低。
$/
似乎是一件无聊的事情,但我无法说出来,因为剧本在那里结束。