在我的代码中,我尝试在$result
循环条件中传递变量while
。
我该怎么做?
use strict;
use warnings;
use File::Find::Rule;
my $output="/data/file.txt";
my @files=File::Find::Rule->file ->in($output);
foreach my $file(@files)
{
my ($file)=~m|(.*)|;
my $outfile="$file.txt";
open my $fh_out,'>',$outfile or die "error";
open my $fh,'<',$file or die "error";
while(my $line=<$fh>)
{
my @data=split/:/,$line);
for my $result(@data)
{
if(-f $outfile)
{
open my $fh1,'<',$result || die "$!";
$result=~s/("\S+|\S+")\s*/$1/g;
while($result)##Note:Error at this part $result from local variable should pass as loop condition.Then only it will print $result statement inside the while loop.Now the print $result is not printing.
{
$result.=$_;
print $result;
}
push @data,$fh1;
}
}
}
}
在我的代码@data
中,内容可以存储为本地变量$result
。
现在应在$result
条件中使用相同的while
内容。
我该怎么做?
有没有其他方法可以使用文件句柄?
$file
sync_logic : a
symbol1: b
symbol2: c
symbol3: d
@data
将包含以下内容'sync_logic', 'a'
'symbol1', 'b'
'symbol2', 'c'
'symbol3', 'd'
$result
的预期输出应如下sync_logic a
symbol1 b
symbol2 c
symbol3 d
错误:
I got the following error message when i run the above code:
Killed
答案 0 :(得分:2)
与yesterday's question一样,它真的不清楚你要做什么。
为了理解这里发生的事情,我采用了处理一个文件并转换它的代码部分,以便从DATA文件句柄中读取数据。清理你的奇怪格式给了我这段代码:
#!/usr/bin/perl
use strict;
use warnings;
my $outfile = 'test.txt';
while (my $line = <DATA>) {
my @data = split/:/,$line);
for my $result (@data) {
if (-f $outfile) {
open my $fh, '<', $result || die "$!";
$result=~s/("\S+|\s+")\s*/$1/g;
while ($result) {
$result .= $_;
print $result;
}
push @data, $fh;
}
}
}
__DATA__
sync_logic : a
symbol1: b
symbol2: c
symbol3: d
运行这个,给了我一个错误:
test.pl第9行的语法错误,接近&#34; $ line)&#34;
所以你甚至不给我们编译的代码。
看。成为优秀程序员的一个重要部分是注重细节。如果您与人共享代码,希望他们会为您查看代码并帮助您找到问题,那么您需要为他们提供可以运行的代码。在与我们共享示例代码之前,您需要对其进行测试并确保其编译。不要只是在SO编辑器中动态编辑代码,并期望它仍然可以工作。我们不想花时间修复您的拼写错误 - 我们希望帮助您解决代码中的实际问题。
所以我担心我会放弃这一点。我会找人帮忙,不要浪费我的时间。
(并且,是的,我知道这不是问题的严格答案,所以我希望被投票或者标记答案。但是虽然它不是问题的答案,我确实认为salar33需要听到的有用信息。)
答案 1 :(得分:1)
从您的预期输出中,您似乎只想从每行中删除冒号:
。这看起来像这样
use strict;
use warnings 'all';
my $file = 'test.txt';
open my $fh, '<', $file or die "Can't open $file: $!";
while ( my $line = <$fh> ) {
chomp $line;
my @data = split /\s*:\s*/, $line;
print join(' ', @data), "\n";
}
根据您在问题中显示的输入数据,产生此输出
sync_logic a
symbol1 b
symbol2 c
symbol3 d