gpt4 book ai didi

perl - 如何在 Perl 对象中存储文件句柄以及如何访问结果?

转载 作者:行者123 更新时间:2023-12-01 10:57:29 24 4
gpt4 key购买 nike

我想在 Perl 对象中存储一个文件句柄。以下是我的做法。

sub openFiles {
my $self = shift;
open (my $itemsFile, "<", "items.txt") or die $!;
open (my $nameFile, "<", "FullNames.txt") or die $!;
$self->{itemsFile} = $itemsFile;
$self->{nameFile} = $nameFile;
return $self;
}

然后我想从其中一个文件中获取一些信息。以下是我的处理方法。

sub getItemDescription {
my $self = @_;
chomp(my $record = $self->{itemsFile});
return $record;
}

我尝试在另一个过程中访问它,如下所示:

print "Test 3: $self->getItemDescription()\n";

我的问题如下:

  1. 我在对象中保存文件句柄的方式是否正确?如果不是,那怎么错了?
  2. 我读取文件行的​​方式是否正确?如果不是,我怎样才能做对?
  3. 最后,我打印返回对象的方式是否正确?

这对我来说真的很重要。如果有任何方法可以改进我的代码结构,即为文件处理创建一个全局变量或更改对象的结构,请告诉我。

最佳答案

我在对象中保存文件句柄的方式是否正确?

是的。

我读取文件行的​​方式是否正确?

没有。那只是分配文件句柄。使用 readline 从文件中读取一行运营商。

通常会使用 <...> readline 的语法运算符,但是 <...>readline(...) 的快捷方式和 glob(qq<...>) , Perl 认为 <$self->{itemsFile}>glob(qq<$self->{itemsFile}>) 的缩写.你必须使用 readline特别是

my $record = readline($self->{itemsFile});
chomp($record) if defined($record);

或者做一些额外的工作

my $fh = $self->{itemsFile};
my $record = <$fh>;
chomp($record) if defined($record);

(请注意,我不会无条件地调用 chomp,因为 readline/<> 可以返回 undef。)

最后,我打印返回对象的方式是否正确?

我猜你指的是返回的字符串,就像 getItemDescription 返回的字符串一样.问题是,您实际上从未调用过该方法。 ->getItemDescription()在双引号字符串文字中没有任何意义,即使在变量之后。你需要移动$self->getItemDescription()在双引号之外。

您也无法检查是否已到达文件末尾。

关于perl - 如何在 Perl 对象中存储文件句柄以及如何访问结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14351410/

24 4 0
文章推荐: magento - 禁止在 Magento 中将所有商店运送到特定国家/地区,但一家商店除外
文章推荐: java - 无法使用文件的 URL
文章推荐: java - Linkedhashmap<字符串,对象>
文章推荐: block - 移除 EPiServer 7 Shared Block 周围生成的
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com