이 예제에서는 적응 형 서브 루틴을 코딩하는 가장 좋은 방법을 배우고 싶습니다.적응 형 트림 서브 루틴
텍스트를 자르는 서브 루틴이 필요합니다 (실제로는 구실이며 내 서브 루틴은 다른 작업을 수행했을 수 있습니다).
더 다재다능하기 위해, 나는 인자의 다른 유형을 받아 내 서브 루틴을 싶습니다
my @input = (' A ', ' B', 'C ');
my @trimmed = trim(@input);
trim(\@input);
my $out = trim($input[0]);
는 반환 'A'trim(\$input[0]);
@input의 첫 번째 요소를 자른다.trim(\@a, \@b, \@c);
문자열의 각 어레이 트리밍my $out = trim(\@a, ' A ', ' B');
$ 아웃 = (QW/A B /); 나는 위의 제안 입력의 다른 종류의 지원이 구현의 더 나은 솔루션sub trim { state $re = qr/^\s+|\s+$/m; my @a; for(@_) { if(ref eq 'SCALAR') { $$_ =~ s/$re//g; } elsif(ref) { trim(\$_) for(@$_); } else { push @a, s/$re//gr; } } return \@a if @a > 1; return $a[0] if $a[0]; }
있습니까 :
여기에 내 현재 추한 솔루션입니다 (동작 논의 할)?
이 질문의 주된 이유는 문자열, 문자열 배열 또는 해시에 저장할 수있는 텍스트를 가지고있는 최종 응용 프로그램에 관한 것입니다.
나는 그것을 작성하는 것이 좋습니다 가정 :
trim(\@allmytexts);
align(\@allmytexts, align=>'right');
보다 :
for(@allmytexts) {
trim($_);
align($_, align=>'right');
}
나는 동의한다. 하나 또는 두 개의 호출 스타일 지원 -'trim (\ $ inplace)'및/또는'$ output = trim ($ input)'을 제안합니다. 호출자가 전체 배열을 다듬을 필요가 있다면 Perl은 그들이 사용할 수있는 완벽하게 좋은'map'과'for' 키워드를 가지고 있습니다. – tobyink
@tobyink : 암시하려했기 때문에 참조를 지나가는 기능을 나타내는 플래그로 전달하는 것에 동의하지 않습니다. 'trim ($ string, inplace => 1)'또는'trim_inplace ($ string)'과 같은 것이 괜찮습니다. – Borodin
@borodin, 왜 제 질문이 주제와 관련이 없다고 생각합니까? – nowox