在使用select返回的文件句柄时,我正在拔头发。
有关select的文档如下:
选择
返回当前选定的文件句柄。
我有一段代码,它打印一些数据,通常在没有任何重定向的情况下执行。但是有一个用例,其中select用于将打印输出重定向到一个文件。
在这段代码中,我需要使用当前选定的文件句柄。我尝试了以下代码片段:
my $fh = select;
print $fh "test\n";
我编写了一个简短的测试程序来演示我的问题:
#!/usr/bin/perl
use strict;
use warnings;
sub test
{
my $fh=sel
下面是我的perl脚本
@array = qw(one two three four five);
sleep (60);
foreach (@array){
open(new,">>$_.txt");
print new "$_ This is testing\n";
}
sleep(120);
open (new2,">>for2.txt");
print new2 "Hai";
在我的剧本里。新文件是由foreach条件打开的。在我的脚本中打开五个文件。但是我的问题是,首先打开新的五个
我有一个shell脚本,它调用perl脚本来操作一些数据。一旦Perl脚本完成,它应该关闭并返回shell (bash)脚本的数据文件,然后在函数中使用该文件。如何在关闭文件后结束perl脚本?
举一个简单的例子:
#!/usr/bin/environment perl
my $filename = shift @ARGV;
open(my $fh, '+<', $filename) or die "Couldn't Open File";
sort $fh;
close $fh;
编辑:所以,这里可能出现了其他问题。要排序的文件每一行包含一个
当我运行我的perl脚本时,我会得到这个错误:
不能在scr第44行使用未定义的值作为文件句柄引用。
第44行:
open my $fh, "|-", "mail", "-s", $subject, $owner, "-c", $sendto
or die "$0: could not start mail: $!";
一切看起来都很好。这个错误意味着什么?
有没有办法检查文件是否已经在Perl中打开?我想拥有读文件访问权限,所以不需要flock。
open(FH, "<$fileName") or die "$!\n" if (<FILE_IS_NOT_ALREADY_OPEN>);
# or something like
close(FH) if (<FILE_IS_OPEN>);
给出了以下(中古时代)代码:
# Method to save and close the Standard output(STDOUT) and after to redirect the
# STDOUT in the log file of the step
sub doSomething{
open(_OLDOUT, ">&STDOUT") or Error('001', "open", "Standard OUT", __PACKAGE__, $ERRNO);
close(STDOUT) o
我的脚本使用LWP::Simple的get()函数从互联网下载一个纯文本文件。
我想用文件句柄的方式处理这个字符串。我从上发现了这样一种“优雅”(嗯,我喜欢)的方式。
my $filelike = get($url); # whole text file sucked up in single string
open my $fh, '<', \$filelike or die $!;
while (<$fh>) {
# do wildly exciting stuff;
};
但是我喜欢使用FileHandle;但是,我还没有找到一种使用它来完成上述
我刚接触Perl,已经用了大约一天的时间。我正在尝试写一个脚本,将去每个.cpp文件和.hpp文件更改文件的读写权限,同时也搜索字符串和替换它。这就是我到目前为止所拥有的。我能够更改每个文件的读写权限问题是当我尝试替换字符串时。打印正确,但不会保存到文件中。欢迎提出任何建议。
#gets first first value of array being past as argument.
my $path = shift;
#open directory
opendir(DIR, $path) or die "Unable to open $path: $!";
#read
我正在试用$*ARGFILES.handles,它似乎以二进制模式打开文件。
我正在编写一个zip-merge程序,它打印每个文件中的一行,直到没有更多的行可读。
#! /usr/bin/env perl6
my @handles = $*ARGFILES.handles;
# say $_.encoding for @handles;
while @handles
{
my $handle = @handles.shift;
say $handle.get;
@handles.push($handle) unless $handle.eof;
}
我像这样调用它: zip-
在尝试执行此操作时:
my $obj = new JavaScript::Minifier;
$obj->minify(*STDIN, *STDOUT);
// modified above line to
$obj->minify(*IP_HANDLE,*OP_HANDLE)
如果IP_HANDLE和OP_HANDLE是文件句柄,那么上面的方法是有效的,但是我仍然不能弄清楚*在应用于文件句柄或任何其他数据类型时到底做了什么。
谢谢,
我使用这个函数来修改我的csv文件:
sub convert
{
# open the output/input file
my $file = $firstname."_lastname_".$age.".csv";
$file =~ /(.+\/)(.+\.csv)/;
my $file_simple = $2;
open my $in, '<', $file or die "can not read the file: $file $!";
open my $out, '>',
我希望用户输入一个文件名,并让程序输出文件的内容。
我得到2x“未加引号的字符串可能与未来的保留字冲突”和“全局符号$filename需要显式的包名。
use strict;
use warnings;
print 'Enter file name: ';
my $fileName = <STDIN>;
chomp($fileName);
open(fh, $filename or die $!);
另外,为什么文件句柄不是一个变量(实际上取决于我见过的例子是否是一个变量,就像我在这里看到的一样)?
我知道裸字可以用作文件句柄作为下面的第一行,即使不推荐它,但第二行似乎也有效。为什么普通字符串作为文件句柄工作?
perl -E"open FH, 'somefile.txt' or die 'open failed';print <FH>"
perl -E"open 'FH', 'somefile.txt' or die 'open failed';print <FH>"
UPDATE:如果裸字FH与普通字符串'FH‘相同,为什么下面的行不能工作?
我想使用命令行在输入文件中解析。我按下面的方式运行,但是当我按下面的方式运行时,会收到错误(无法打开文件名):我的代码是错误的还是我在命令行上输入的内容是不正确的?
commandline> perl script.pl FILENAME1.TXT
下面是我要在输入文件中解析的代码:
my $filename = <STDIN>;
open (my $file, '<', $filename) or die "could not open file '$filename': $!";
my $str = do {local
我有一个散列数组,我用以下方式填充它:
# Array of hashes, for the files, regexps and more.
my @AoH;
push @AoH, { root => "msgFile", file => my $msgFile, filefh => my $msgFilefh, cleanregexp => s/.+Msg:/Msg:/g, storeregexp => '^Msg:' };
这是其中一个条目,我有更多这样的。并且一直在使用散列的每个键值对来创建文件,清理文本文件中的行等等。问题
我希望将stdout和stderr重定向到file1,但也只将stderr重定向到file2。这个是可能的吗?我已经为第1部分编写了一个工作脚本,但是不将重定向覆盖到file2 (实际上,第一个stderr重定向将进入stdout,然后再转到file1),我无法理解如何将stderr附加到file1。我试图这样做,这样file1就可以像在控制台中运行时那样包含打印语句和错误,而file2只记录错误。
你知道怎样才能做到这一点而又不偏离我已经拥有的东西吗?
open STDOUT, '>', "$file1" or die $!; # redirect st
我试图从perl脚本的__END__部分读取一些tgz数据。我遇到了文件句柄的问题,有时使用它不会导致问题,有时脚本会抛出错误。
下面是一些示例代码,我知道数据不是tgz,但它确实显示了问题。)
#!/usr/bin/env perl
use strict;
use warnings;
my $raw_time = (stat(DATA))[9];
my $size = -s DATA;
my $kilosize = int($size / 1024) . 'k';
print "<P>Script size is $kilosize at $r
通常,我使用以下方法从文件加载解析ldif:
use Net::LDAP::LDIF;
use Net::LDAP::Entry;
use Data::Dumper;
my $ldif = Net::LDAP::LDIF->new( "filename.ldif", "r") or die "file not exits\n";
while( not $ldif->eof ( ) ) {
$entry = $ldif->read_entry ( );
print Dumper $entry;
}
但是,不需要从