我有一个数据文件,每行有一个数字,比如
10
20
30
40
Run Code Online (Sandbox Code Playgroud)
如何读取此文件并将数据存储到数组中?
这样我就可以对这个数组进行一些操作了.
Sea*_*ean 77
只需将文件读入一个数组,每个元素一行,是微不足道的:
open my $handle, '<', $path_to_file;
chomp(my @lines = <$handle>);
close $handle;
Run Code Online (Sandbox Code Playgroud)
现在文件的行在数组中@lines.
如果你想确保有错误处理,open并close执行类似的操作(在下面的剪辑中,我们也以UTF-8模式打开文件):
my $handle;
unless (open $handle, "<:encoding(utf8)", $path_to_file) {
print STDERR "Could not open file '$path_to_file': $!\n";
# we return 'undefined', we could also 'die' or 'croak'
return undef
}
chomp(my @lines = <$handle>);
unless (close $handle) {
# what does it mean if close yields an error and you are just reading?
print STDERR "Don't care error while closing '$path_to_file': $!\n";
}
Run Code Online (Sandbox Code Playgroud)
Tar*_*ras 12
使用File::Slurp模块有最简单的方法:
use File::Slurp;
my @lines = read_file("filename", chomp => 1); # will chomp() each line
Run Code Online (Sandbox Code Playgroud)
如果您需要对每条线路进行一些验证,您可以grep在前面使用read_file.
例如,仅包含整数的过滤行:
my @lines = grep { /^\d+$/ } read_file("filename", chomp => 1);
Run Code Online (Sandbox Code Playgroud)
小智 10
我喜欢...
@data = `cat /var/tmp/somefile`;
Run Code Online (Sandbox Code Playgroud)
它并不像其他人那样迷人,但是,它的工作方式完全相同.和...
$todays_data = '/var/tmp/somefile' ;
open INFILE, "$todays_data" ;
@data = <INFILE> ;
close INFILE ;
Run Code Online (Sandbox Code Playgroud)
干杯.