我有以下代码但可以在一个声明中完成吗?
heroku run rake db:migrate
heroku run rake db:seed
答案 0 :(得分:4)
open FILE, $file; while (<FILE>) { $filestr .= $_; }
但是,换行符的存在是令我担心该片段的最后一件事。我会更担心以下事项:
open
,open
,use strict;
和
open(my $fh, '<', $qfn)
or die("Can't open \"$qfn\": $!\n");
my $file; { local $/; $file = <$fh>; }
答案 1 :(得分:0)
$ perldoc perlvar # /slurp<enter><copy example code><paste>
$ perl -E '
my $file = "test.txt";
my $content = "";
open my $fh, "<", $file or die $!;
{
local $/;
$content = <$fh>;
}
close $fh;
print $content;'
它永远不会成为一个声明。但任何东西都可以是一行代码&#34; in perl。
那么......我们做得对吗?你的意思是没有循环没有你。
需要考虑的其他事项:
open my FILE, '<', $file or die $!;
my @filestrs = <FILE>;
或cpanm File::Map
之后:
use File::Map qw(map_file);
map_file my $filestr, $file;
与Path::Tiny
类似:
use Path::Tiny;
my $filestr = path($file)->slurp; # or ->slurp_utf8;
排成一行:
my $filestr = do { local(@ARGV, $/) = $file; <> };
更少的陈述仍然是:
open(my $fh, '<', $file);
read($fh, $filestr, -s $fh);
答案 2 :(得分:0)
我会将你的问题解释为:
如何将两个语句写成单个语句而不用 使用其他模块或子程序。
Perl并不会阻止你在脚下射击自己,所以如果你认为分号是声明分隔符,可以将以下内容视为一个声明:
open (FILE, $file) and do {$filestr .= $_ while (<FILE>)};
尽管在do
块的末尾有一个隐式分号,但这种结构永远不应该在实际代码中使用,因为它会阻止以通常的方式检查open
错误:
open (FILE, $file) or die "Could not open file '$file': $!";