1

我正在做一个课堂作业来学习 Perl 中的面向对象编程。我有一个看起来像这样的真正的基础课程。

sub new{
  my $class = shift;
  my $self = {
    'Sides' => 3,
    'SL' => \@sidelengths};
  bless $self, $class;
  return $self;
  }

我有两个模块来改变边和长度(虽然不知道如何用访问器修改边长)但我的工作要求我有这样的方法

“一种方法:toString(),它以可打印字符串的形式返回所有文件属性。如果正确完成,PERL

print $file->toString() . "\n";

应该打印文件的可读摘要。”

我已经认为我想使用 Data::Dumper 来执行此操作,并且可以在脚本中使用,但听起来我需要在模块中使用它并调用它来打印对象中的内容字符串。到目前为止我有这个

sub toString{
  my $self = @_;
  Dumper( $self );
  }

只打印出“$VAR1 = 1”

4

2 回答 2

5

你在这里想要shift的是从@_.

sub toString {
  my $self = shift @_;  
  Dumper( $self );
}

当你有时,它会在标量上下文$var = @array中评估数组,并返回数组中元素的数量。因此,您的语句设置为传递给 的参数数量,在本例中为 1。(参数。)my $self = @_;$selftoString$self

@_或者,您可以通过这种方式捕获第一个元素:

sub toString {
  my ($self) = @_;  
  Dumper( $self );
}

这样做是@_列表上下文中评估,因为它使用列表分配。它将第一个元素分配给 @_to $self

于 2013-12-03T02:05:53.110 回答
4
my $self = @_;

是一个标量赋值运算符,所以它@_在标量上下文中,它是它包含的元素的数量。您想使用列表赋值运算符。

sub toString {
   my ($self) = @_;
   return Dumper( $self );
}
于 2013-12-03T02:05:56.787 回答