2014-02-25 2 views
2

질문. 예를 들어 명령 줄에서 perl 문자열을 읽으려고합니다. "abcdef"다음 이것을 "a_b_c_d_e_f"로 나눕니다.Perl 문자열을 분할하고 _을 사이에 추가하십시오.

나는 논리 부분에 어려움을 겪고 있습니다. 어떤 아이디어?

#!/usr/bin/perl 

while($line=<STDIN>){ 
    chomp $line; 
    split $line; 

join ("_", $line); 

print $line; 
} 
+0

* "논리 부분"*이 무슨 뜻인지 잘 모르겠습니다. 그 코드의 유일한 논리 문장은'while'입니다. – Borodin

답변

3

The split manpage 실제로 정확히 예를 포함

print join(':', split('', 'abc')), "\n"; 

'abc' 대신 대신 :_$line를 사용하여 조정을, 우리가 얻을 :

print join('_', split('', $line)), "\n"; 

가장 중요한 점은이다 split은 인수를 수정하지 않고 목록 만 반환하고 join은 인수를 수정하지 않고 그냥 문자열을 반환합니다. 반환 값을 사용하지 않고 split 또는 join으로 전화하는 것은 결코 의미가 없습니다.

+1

'split'의 첫 번째 매개 변수는 * regex *이며, 문자열로 지정하면 안됩니다. – Borodin

+0

@Borodin : 예, 이상합니다. 나는 항상 이것을 정규식으로 지정한다. 맨 페이지가 왜이 점을 다르게하는지 잘 모르겠습니다. – ruakh

+0

동의합니다. 문서화 버그라고 생각합니다. – Borodin

0

한 - 라이너 :

print join('_', split('', $line)), '\n'; 

당신은 펄의 split() 기능 here에 대한 자세한 내용을보실 수 있습니다. 당신이 필요로하는 무엇

1

이다

print join('_', split //, $line), "\n"; 
+0

당신이'split // '이라고 생각하는 것은'split (' ','. – Drewness

+1

@Drewness : *** No ***, 절대적으로 아닙니다 .' split의 첫번째 매개 변수는 * 정규 표현식입니다 * 단 하나의 리터럴 공간을 전달할 수있는 특수한 경우를 제외하고는 기본 동작을 요청하는 것과 같습니다. – Borodin

0

당신은 해야 사용 split, 당신은 이것에 대한 사이의 문자로 대체 사용할 수 있습니다하지 않는 :

use strict; 
use warnings; 

my $string = 'abcdef'; 
$string =~ s/(?<=.)(?:)(?=.)/_/g; 
print $string; 

출력 :

a_b_c_d_e_f 

을 희망이 도움이!

관련 문제