# wiki1.pl
use strict;
use warnings;
use LWP::Simple;
my $html = get("http://ko.wikipedia.org/w/api.php?action=query&list=recentchanges&rclimit=500&format=yamlfm");
open (FH, ">bom1") or die "error on opening a file.\n";
while ($html =~ m{
title: (.*?) rcid: }sxg) {
my $title = $1;
$title =~ s/ (\||>)\n//g;
print FH $title, "\n";
}
close FH;
라인단위 처리면 출력파일을 열어서 입력에서 한 줄씩 읽어서 매칭되면 안찍고
매칭되지 않으면 찍으면 되겠지만 위 처럼 LWP 모듈을 사용해서 html 내용을
가져 왔다면 이미 newline문자를 포함한 모든 내용이 하나의 문자열으로 들어가게
되므로 그 상태 그대로 원하는 결과를 얻으려면 다음 테스트 코드와 같은 형식으로
하시면 됩니다.
#!/usr/bin/perl
use strict;
use warnings;
my $content = do { local $/; <DATA> }; # slurp으로 내용을 모두 $content에 넣는다.
$content =~ s/^\s*?title:.*?\n//mg; # title: 이 들어간 줄을 지운다.
print $content;
__DATA__
You are looking at the HTML representation of the YAML format.
HTML is good for debugging, but probably is not suitable for your application.
See complete documentation, or API help for more information.
---
query-continue:
recentchanges:
rcstart: |
2008-07-08T20:26:24Z
query:
recentchanges:
-
type: edit
ns:
title: 관성 항법 장치
rcid: 2093984
pageid: 108109
revid: 2057605
old_revid: 1666730
timestamp: |
2008-07-09T01:51:35Z
-
type: edit
ns:
title: 베이루트
rcid: 2093983
pageid: 46272
revid: 2057604
old_revid: 1954411
timestamp: |
2008-07-09T01:51:25Z
결과
You are looking at the HTML representation of the YAML format.
HTML is good for debugging, but probably is not suitable for your application.
See complete documentation, or API help for more information.
---
query-continue:
recentchanges:
rcstart: |
2008-07-08T20:26:24Z
query:
recentchanges:
-
type: edit
ns:
rcid: 2093984
pageid: 108109
revid: 2057605
old_revid: 1666730
timestamp: |
2008-07-09T01:51:35Z
-
type: edit
ns:
rcid: 2093983
pageid: 46272
revid: 2057604
old_revid: 1954411
timestamp: |
2008-07-09T01:51:25Z
perl에서 지울때는...
전 emacs 에서 ctl+s 로 검색해서 그 줄을 del 키 눌러서 지웁니다.
...
..
가 아니라.. perl 에서 그 줄을 삭제라는 것은 어떤 개념인지 모르겠지만..
제가 이해하기로는 어떤 파일을 읽고, 그 단어가 들어있으면 그 줄을 안찍는다 이런 걸로 이해를 했는데 맞나요?
그런 것은 ... http://doc.perl.kr/twiki/bin/view/Wiki/WebIRC 에 접속하시면 많은 분들이 가르쳐 주실겁니다.
:-) 그리고 직접 답변을 달아놓으시는 것도 괜찮은 방안이라고 생각합니다.
________
use perl;
use perl;
제가 짜고 있는 스크립트입니다
# wiki1.pl
use LWP::Simple;
$html = get( "http://ko.wikipedia.org/w/api.php?action=query&list=recentchanges&rclimit=500&format=yamlfm" );
$html =~ s/title/\rtitle/g;
$html =~ s/title: |/abcd/g;
$html =~ s/title: >/abcd/g;
$html =~ g!/title:/d;
$html =~ s/title: /\[\[/g;
$html =~ s/$/\]\]/g;
open(FILE, ">bom1");
print FILE $html;
close(FILE);
여기에서,
$html =~ g!/title:/d;
이걸 어떻게 해야 하는지 모르겠어요. :(
이해가..
$html =~ g!/title:/d; 에서 !는 무슨뜻인가요?
JEEN님 말씀데로, 해당 단어가 있으면 파일에 출력을 하지 않는게 가장 좋을 것 같습니다.
지우고 싶으시다면,
$html =~ s/$(?:.*?)단어(?:.*?)^//g;
이렇게 해야할 것 같은데.. 좀 dirty하네요.
올려주신 코드를
올려주신 코드를 이해 못하겠습니다.
이렇게하면 title 이 있으면 이 조건을 실행할 것입니다.
이렇게 한 문장씩 배열에 담고,
이런식으로 하면 어떨까요.
쿨럭쿨럭..
원하시는 것과는 다를 것 같습니다;ㅁ;
이렇게 해보세요.
라인단위 처리면 출력파일을 열어서 입력에서 한 줄씩 읽어서 매칭되면 안찍고
매칭되지 않으면 찍으면 되겠지만 위 처럼 LWP 모듈을 사용해서 html 내용을
가져 왔다면 이미 newline문자를 포함한 모든 내용이 하나의 문자열으로 들어가게
되므로 그 상태 그대로 원하는 결과를 얻으려면 다음 테스트 코드와 같은 형식으로
하시면 됩니다.
결과
정규식에서 g와 함께 m modifier를 사용했는데 이에 대한 자세한 설명은
http://gypark.pe.kr/wiki/Perl/%EC%A0%95%EA%B7%9C%ED%91%9C%ED%98%84%EC%8B%9D
에서 찾아보시면 됩니다.
댓글 달기