Text::Xslateで配列

September 22, 2013

配列の要素数と配列の中身を渡したかっただけだったのに
2時間ぐらい時間つかいました。
\@hoge@hogeで渡してたからだった。

#!/usr/bin/env perl

use strict;
use warnings;
use utf8;
use 5.010; 

use Text::Xslate;
use Data::Section::Simple;

my @hoge = qw/foo bar baz hage/;

my $vpath = Data::Section::Simple->new()->get_data_section();
my $tx = Text::Xslate->new(path => [$vpath]);


my $template = $tx->render("template.tx",
    {
        hage => \@hoge
    }
);

printf $template;

1;

__DATA__

@@ template.tx

: for $hage -> $item {
   item is <: $item :>
   Number is <: $~item.index :>

: }

ちなみにRubyだと

#!/usr/bin/env ruby

require 'erb'

hoge = ["foo", "bar", "baz", "hage"]
hage = 1

puts ERB.new(DATA.read).result(binding)

__END__
<% hoge.each_with_index do |h, i| %>item is <%= h %>
number is <%= i %>

<% end %>

こんな感じでした。
$~item.indexeach_with_indexを覚えました。

my @list = (1, 4, 3, 2, 4, 6);
say $#list;

$#、趣きがありますね。
Perl、どこか東山文化の風を感じますね。

追記

リファレンスで渡さないとハッシュ化します。おぼえました。
要素数求める場合はscalar(@hoge)使います。scalar()おぼえました。
ありがとうございます。

某面白法人、YAPCスピーカーが多くて大変素晴らしい環境です。
某はてな社、YAPCスピーカーが多くて大変素晴らしい環境です。