Perl对象,来自模块内的toString输出

use*_*377 1 perl module object tostring data-dumper

我正在做一个课程作业,以了解Perl中面向对象的编程.我有一个真正的基础课,看起来像这样.

sub new{
  my $class = shift;
  my $self = {
    'Sides' => 3,
    'SL' => \@sidelengths};
  bless $self, $class;
  return $self;
  }
Run Code Online (Sandbox Code Playgroud)

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

"方法:toString()返回可打印字符串中的所有文件属性.如果这样做正确,则PERL

print $file->toString() . "\n";
Run Code Online (Sandbox Code Playgroud)

应该打印一份可读的文件摘要."

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

sub toString{
  my $self = @_;
  Dumper( $self );
  }
Run Code Online (Sandbox Code Playgroud)

只打印出"$ VAR1 = 1"

Joe*_*e Z 5

你想要的是shift一个争论@_.

sub toString {
  my $self = shift @_;  
  Dumper( $self );
}
Run Code Online (Sandbox Code Playgroud)

如果有$var = @array,则在标量上下文中计算数组,并返回数组中的元素数.因此,您的语句my $self = @_;设置$self为传递给的参数的数量toString,在本例中为1.($self参数.)

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

sub toString {
  my ($self) = @_;  
  Dumper( $self );
}
Run Code Online (Sandbox Code Playgroud)

什么做的是评估@_列表范围内,因为它使用列表赋值.它分配的第一个元素 @_$self.