LoginSignup
1
2

More than 5 years have passed since last update.

Perl6 Cookbook Webページの取得

Last updated at Posted at 2015-12-02

こんばんは :whale2:
Perl 6 Advent Calendar 2015の3日目です1

Perl5の名著 「Perl Cookbook」 のコードをPerl6で書いたらどんな感じになるのかなぁという企画で、今回は20.1. Fetching a URL from a Perl Script (Perlスクリプトで、あるURLの内容を取得する) です。2
※ Perl6のソースコードQiitaに貼る時はrb(Ruby)を指定しています。3

Perl5版

とあるURLのデータを取ってきて表示します。
前述の20.1. Fetching a URL from a Perl Scriptのコードを少しだけ変えたものです。

use v5.18;
use strict;
use LWP::Simple;
say $LWP::Simple::VERSION; #=> 6.00

my $URL = 'http://www3.nhk.or.jp/rss/news/cat2.xml';

my $content;
unless ( defined ( $content = get $URL )){
  die "could not get $URL\n";
}

say $content;

Perl6版

Perl6版のLWP::Simpleモジュールを使います。( まだモジュールのバージョン番号が若いですね )

use v6;
use LWP::Simple;

$LWP::Simple::VERSION.say; #=> 0.090

my $URL = 'http://www3.nhk.or.jp/rss/news/cat2.xml';

my $content = LWP::Simple.get( $URL ) or die "could not get $URL\n";

if $content ~~ Buf {
  $*OUT.write($content);
}
elsif $content ~~ Str {
  $content.say;
}

Buf(Blob)でデータが返ってくると扱いづらい気がするので、Strに変換するようにしてみます。

use v6;
use LWP::Simple;

my constant @urls = <
  http://www3.nhk.or.jp/rss/news/cat2.xml
  http://www.jma-net.go.jp/rss/jma.rss
  http://headlines.yahoo.co.jp/rss/zdn_mkt-dom.xml
>;

for @urls -> $url {
  $url.say;

  # 返ってくるのが Buf だったら、decodeメソッドで Str に変換する。
  if ( my $content = LWP::Simple.get( $url ) ) ~~ Buf {
    $content .= decode;
  }

  # $content の型を確認
  # $content.WHAT.say; #=> (Str)

  # $content の中に「description」という文字列はあるかな?
  # $content.match(/:i description/).say;

  # 取得したHTMLを出力
  $content.say;
}

おわりです。

その他

参考や注釈


  1. Perl6 Cookbook的な内容!から改題しました。 

  2. 本当は『Inline::Perl5モジュールがあればPerl6からPerl5のモジュールが使えて便利』みたいな内容を書こうと思ったのですが、手元の環境で依存モジュールのインストールに失敗して解消にちょっとかかりそうだったので別の内容にしました。 

  3. QiitaのシンタックスハイライトがまだPerl6に対応してないみたいどうしよう - Qiita 

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2