我看了一下Slurp的来源,我很想知道它是如何slurp()工作的:
sub slurp {
local( $/, @ARGV ) = ( wantarray ? $/ : undef, @_ );
return <ARGV>;
}
Run Code Online (Sandbox Code Playgroud)
文件在哪里打开?
我在CentOS上有一个perl脚本,我正在尝试使用File :: Slurp读取文件:
my $local_filelist = '~/filelist.log';
use File::Slurp;
my @files = read_file($local_filelist);
Run Code Online (Sandbox Code Playgroud)
但是我收到以下错误:
Carp::croak('read_file \'~/filelist.log\' - sysopen: No such file or directory') called at /usr/local/share/perl5/File/Slurp.pm line 802
Run Code Online (Sandbox Code Playgroud)
尽管事实上我正在以myuser身份运行脚本,并且:
(2013-07-26 06:55:16 [myuser@mybox ~]$ ls -l ~/filelist.log
-rw-r--r--. 1 myuser myuser 63629044 Jul 24 22:18 /home/myuser/filelist.log
Run Code Online (Sandbox Code Playgroud)
这是在CentOS 6.4上的perl 5.10.1 x86_64.
可能是什么导致了这个?
我想要做的是从另一台服务器获取文件的内容.既然我不和perl一致,也不知道它的mods和函数iv'e就是这样:
my $fileContents;
if( $md5Con =~ m/\.php$/g ) {
my $ftp = Net::FTP->new($DB_ftpserver, Debug => 0) or die "Cannot connect to some.host.name: $@";
$ftp->login($DB_ftpuser, $DB_ftppass) or die "Cannot login ", $ftp->message;
$ftp->get("/" . $root . $webpage, "c:/perlscripts/" . md5_hex($md5Con) . "-code.php") or die $ftp->message;
open FILE, ">>c:/perlscripts/" . md5_hex($md5Con) . "-code.php" or die $!;
$fileContents = <FILE>;
close(FILE);
unlink("c:/perlscripts/" . md5_hex($md5Con) . "-code.php");
$ftp->quit;
}
Run Code Online (Sandbox Code Playgroud)
我认为id做的是从服务器获取文件,放在我的本地机器上,编辑内容,上传到任何地方然后删除临时文件.
但我似乎无法弄清楚如何获取文件的内容;
open FILE, ">>c:/perlscripts/" . md5_hex($md5Con) . "-code.php" or die $!;
$fileContents = <FILE>; …Run Code Online (Sandbox Code Playgroud) 我在perl中遇到了一些奇怪的东西,我以为我会分享.我有一个名为"testfile.txt"的文本文件.
这里是....
BLAH BLAH BLAH BLAH BLAH
The dollar amount is $2.30 today
BLAH BLAH BLAH BLAH BLAH
Run Code Online (Sandbox Code Playgroud)
现在我想提取2.30.在我下面的例子中,我正在啜饮文件,它工作正常.第二种方式根本不起作用.啜饮中有一些神奇的东西吗?
#!/usr/local/bin/perl
## THIS WORKS
my $content;
my $filename = "testfile.txt";
my $fh="FILEIN";
open(my $fh, '<', $filename) or die "cannot open file $filename";
{
local $/;
$content = <$fh>;
}
close($fh);
my $price;
($price)=$content=~m{is\s\$([0-9]{1,2}\.[0-9]{2})\stoday};
print "Result is $price\n"; #Correctly produces 2.30
## DOESN'T WORK
$content2="BLAH BLAH BLAH BLAH BLAH The dollar amount is $2.30 today BLAH BLAH BLAH BLAH BLAH";
my $price2; …Run Code Online (Sandbox Code Playgroud)