문제

html :: element-> as_trimmed_text를 html :: 요소에서 일부 변수로 할당하는 코드 줄을 단축하려고합니다.

my ($var1, var2) = ($columns[1]->as_trimmed_text, $columns[2]->as_trimmed_text);

.. 몇 개의 열이 몇 개 더 있으므로 몇 줄 이상으로 계속됩니다. 나는 대신지도를 사용할 수 있다는 밝은 생각을 가지고 있었지만 실제로는 많은 운이 없습니다. 나는 변형을 시도했다

map { $_->as_trimmed_text } @columns[1, 3, 5, 7, 9]

그러나 패키지 나 객체 참조없이 메소드를 "AS_TRIMMED_TEXT"방법을 계속 호출 할 수 없습니다.

내가 시도하는 일을 할 수 있습니까, 아니면 현재 가지고있는 것을 고수해야합니까?

티아

편집 : 열 -> 열

도움이 되었습니까?

해결책

무엇보다도지도의 출력에 관심이 없다면지도를 사용해서는 안됩니다. Grep, Sort 등과 같은 맵은 필터입니다. 출력을 원하지 않으면 Foreach를 사용하십시오.

그러나 당신은 정확합니다.지도는 이런 종류의 문제를 정확히 해결하도록 설계되었습니다. 배열 슬라이스를 사용하지는 않지만 원하는 출력이 제공됩니다.

@trimmed_columns = map { $column[$_]->as_trimmed_text } (1, 3, 5, 7, 9);

Robert P의 답변 원본이 작동하지 않는 이유를 더 잘 설명합니다.

다른 팁

그것을 발견:

다음은 무엇을 에뮬레이션하는 코드가 있습니다 ~해야 한다 일어나다:

use strict;
use warnings;

package Text;

sub new
{
   my $class = shift;
   my $text = shift;
   return bless { TEXT => $text }, $class;
}

sub as_trimmed_text
{
   my $self = shift;
   my $text = $self->{TEXT};
   $text =~ s/^\s*(.*?)\s*$/$1/;
   return $text;
}

package main;

my @texts = ( Text->new(' foo '), Text->new(' bar '), Text->new(' baz '));

my @trimmed = map { $_->as_trimmed_text() } @texts[1, 2];

print "Trimmed were: ", join(',', map { "'$_'" } @trimmed);

이것은 작동하고 잘 작동합니다. 나는 얻다:

Trimmed were: 'bar','baz'

그러나지도를이 줄로 바꾸면 다음과 같습니다.

my @trimmed = map { $_->as_trimmed_text() } @texts[2, 3];

갑자기 나는이 출력을 얻는다 :

Can't call method "as_trimmed_text" on an undefined value

'3'이 @texts의 유효한 값 범위를 벗어나기 때문에 새 항목을 자동으로 바꾸고 만들기 때문입니다. undef. 그러면지도가 있습니다

undef->as_trimmed_output()

어떤 바프. 배열 슬라이스를 다시 확인하고 사용 가능한 실제 인덱스 외부에서 값을 잡고 있지 않은지 확인하고 실제로 html :: 요소 멤버를 처리하고 있는지 확인하십시오. map. 빨리 Data::Dumper::Dumper 값에 @columns 엄청나게 도움이 될 것입니다.

예를 들어, 배열을 포함하도록 배열을 변경하면

my @texts = ( Text->new(' foo '), Text->new(' bar '), ' baz ');

그리고 그것을 실행하려고 노력하면 이제 당신의 오류가 발생합니다.

Can't call method "as_trimmed_text" without a package or object reference at map.pl

따라서 배열의 내용이 실제로 메소드를 부르려고하는 클래스의 축복받은 인스턴스인지를 두 번 확인하십시오.

당신의 map 나에게 옳다. 두 번째는 말해야 할 것입니까? @columns 대신에 @column? 당신은 가지고 있습니까? strict 가변 이름으로 오타를 잡기 위해 켜졌습니까?

두 번째 예제에서 다른 변수를 사용하고 있습니다 @columns, 하지만 @column. 다음 코드를 사용해보십시오.

map { $_->as_trimmed_text } @column[1, 3, 5, 7, 9]
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top