perl脚本在perl中只向输出文件写入一行

perl脚本在perl中只向输出文件写入一行,perl,Perl,我编写了一个脚本,在web上打开一个文件,并在名称中使用wireless拉出所有行。它将输出写入另一个文件,但只记录输出文件中的一行,应该是多行 #!\Perl64\eg\perl -w use warnings; use strict; use LWP::Simple; my $save = "C:\\wireless\\"; my $file = get 'http://dhcp_server.test.com/cgi-bin/dhcp_utilization_csv_region.pl

我编写了一个脚本,在web上打开一个文件,并在名称中使用wireless拉出所有行。它将输出写入另一个文件,但只记录输出文件中的一行,应该是多行

#!\Perl64\eg\perl -w
use warnings;
use strict;

use LWP::Simple;

my $save = "C:\\wireless\\";
my $file = get 'http://dhcp_server.test.com/cgi-bin/dhcp_utilization_csv_region.pl?region=test';

open( FILE, '>', $save . 'DHCP_Utilization_test.csv' ) or die $!;
binmode FILE;
print FILE $file;
close(FILE);

open( F, "C:\\wireless\\DHCP_Utilization_test.csv" ) || die "can't opern file: $!";
my @file = <F>;
close(F);

my $line;

foreach $line (@file) {
    chomp $line;
    if ( $line =~ m/Wireless /g ) {

        my ($ip,     $rtr,   $mask,    $zip,    $blc, $address, $city,
            $state,  $space, $country, $space2, $noc, $company, $extra,
            $active, $used,  $percent, $extra3, $nus, $construct
        ) = split( /,/, $line );

        my $custom_directory = "C:\\wireless\\";
        my $custom_filename  = "wireless_DHCP.csv";
        my $data             = "$ip $mask $rtr $active $used $percent $nus $construct";

        my $path = "$custom_directory\\$custom_filename";

        open( my $handle, ">>", $path ) || die "can't open $path: $!";
        binmode($handle);    # for raw; else set the encoding

        print $handle "$data\n";

        close($handle) || die "can't close $path: $!";
    }
}
#\Perl64\eg\perl-w
使用警告;
严格使用;
使用LWP::Simple;
my$save=“C:\\wireless\\”;
我的$file=get'http://dhcp_server.test.com/cgi-bin/dhcp_utilization_csv_region.pl?region=test';
打开(文件'>',$save.'DHCP\u usilization\u test.csv')或死亡$!;
二进制文件;
打印文件$FILE;
关闭(文件);
打开(F,“C:\\wireless\\DHCP_-Utilization_-test.csv”)| | die“无法操作文件:$!”;
my@file=;
关闭(F);
我的美元线;
foreach$行(@file){
chomp$行;
如果($line=~m/Wireless/g){
我的($ip、$rtr、$mask、$zip、$blc、$address、$city、,
$state、$space、$country、$space2、$noc、$company、$extra、,
$active、$used、$percent、$extra3、$nus、$construct
)=拆分(/,/,$行);
my$custom_directory=“C:\\wireless\\”;
my$custom_filename=“wireless_DHCP.csv”;
my$data=“$ip$mask$rtr$active$used$percent$nus$construct”;
my$path=“$custom\u目录\\$custom\u文件名”;
打开(我的$handle,“>>”,$path)| | die“无法打开$path:$!”;
binmode($handle);#用于原始;否则设置编码
打印$handle“$data\n”;
关闭($handle)| die“无法关闭$path:$!”;
}
}

我认为问题是因为您在Windows上,但使用
:raw
保存文件,然后使用
:crlf
重新打开文件

open( FILE, '>', $save . 'DHCP_Utilization_test.csv' ) or die $!;
binmode FILE;
print FILE $file;
close(FILE);

open( F, "C:\\wireless\\DHCP_Utilization_test.csv" ) || die "can't opern file: $!";
my @file = <F>;
close(F);

我相信问题是因为您在Windows上,但使用
:raw
保存文件,然后使用
:crlf
重新打开文件

open( FILE, '>', $save . 'DHCP_Utilization_test.csv' ) or die $!;
binmode FILE;
print FILE $file;
close(FILE);

open( F, "C:\\wireless\\DHCP_Utilization_test.csv" ) || die "can't opern file: $!";
my @file = <F>;
close(F);

不要用
foreach
迭代文件-您正在将整个过程读入内存来执行此操作。最好使用
while(my$line=
。另外:为什么每次迭代都要打开/关闭文件?@Sobrique,我不担心,他已经用lwp get将整个文件存储在内存中,两次应该不会有问题;)同一模块中的
getstore
函数将阻止文件进入内存。@RMax,您的代码似乎不必要地复杂,可能会减少到几行。你到底想实现什么?@TLP,除非有特殊需要保存原始CSV,不需要存储中间文件:但是在这种情况下,我怀疑一切都可以通过
print join map grep split get实现
不要用
foreach
迭代一个文件-您正在将整个过程读入内存来完成。最好使用
while(my$line=
。另外:为什么每次迭代都要打开/关闭文件?@Sobrique,我不担心,他已经用lwp get将整个文件存储在内存中,两次应该不会有问题;)同一模块中的
getstore
函数将阻止文件进入内存。@RMax,您的代码似乎不必要地复杂,可能会减少到几行。您到底想实现什么?@TLP,除非有保存原始CSV的特殊需要,否则不需要存储中间文件:但是在这种情况下,我怀疑一切都可以通过
print join map grep split get