的Perl:我怎么从文件中读取和打印文本
问题描述:
我试图返回一个文件替换为\ n换行符的一行输出所有行,而无需使用CPAN的Perl:我怎么从文件中读取和打印文本
这里是我到目前为止
#! /usr/local/bin/perl
if ($#ARGV = "1") {
print "$ARGV[0]\n";
my $file = "$ARGV[0]";
my $document = do {
local $/;
open my $fh, "<", $file
or die "could not open $file: $!";
<$fh>;
};
print "Doc: $document\n";
}
答
您可以使用啜食模式(while循环不再需要)和一些正则表达式:
print map { $_ =~ s/\n/\\n/; $_ } (<>);
或者一些SPE cial变量:
my @a = <>;
$\ = $, = '\n';
chomp @a;
print @a;
($ \是输出记录分隔符,而$是输出字段分隔符。这两种适用于印刷者)
答
我想这...
#! /usr/bin/perl
if ($#ARGV = "1") {
open FILE, "<", "$ARGV[0]" or die $!;
chomp $_;
@chars = map ({ $_ =~ s/\n/\\n/; $_ } (<FILE>));
print @chars;
print "@chars\n";
}
..它给了我正确的输出(除了一些空间,我需要学习如何去掉)
+1
当你没有任何参数运行你的脚本时会出现什么内容? – Toto 2010-07-01 15:26:28
答
这是一个清晰的长期解决方案。简而言之,chomp将删除所有尾随的空格和控制字符。
#!/usr/bin/perl
use strict;
use warnings;
my $filename = shift;
my @contents;
my $lines = 0;
if (! -e $filename) {
print "Please provide a valid filename\n";
exit;
}
print "Examining $filename\n";
open(FILE, "<$filename");
while (<FILE>) {
chomp();
push(@contents, $_);
print ".";
$lines++;
if ($lines % 10 == 0) {
print "\n";
}
}
close(FILE);
print "done\n";
foreach (@contents) {
print "$_";
}
print "\n";
换行符是*'\ n' ..除非你在其中一个疯狂的系统上。 – Ether 2010-07-01 00:00:05
你真的想要一个字面反斜杠后跟一个n吗?你为什么要这样? – Ether 2010-07-01 00:41:14
现在我们来说一切:开启警告!或者在#的末尾加上-w!或者在代码中使用“警告”。这将揭示一个重要问题。 – Schwern 2010-07-01 01:36:50