Text::Xslateで配列
配列の要素数と配列の中身を渡したかっただけだったのに
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.index
とeach_with_index
を覚えました。
my @list = (1, 4, 3, 2, 4, 6); say $#list;
$#
、趣きがありますね。
Perl、どこか東山文化の風を感じますね。
追記
@kenjiskywalker hage => に @ hoge を渡すと、展開されるから例えば @ hoge が ( dame, leon, bar) だとすると、( hage => 'dame', leon => 'bar') になるお
— soh335 (@soh335) September 22, 2013
@kenjiskywalker 合ってるよ。あと$#は読みづらいので配列の要素数を求める scalar @ foo を使うほうがいいですね
— fujiwara (@fujiwara) September 22, 2013
@kenjiskywalker 基本リファレンスでやってれば解決
— 柴崎優季 (@shiba_yu36) September 22, 2013
リファレンスで渡さないとハッシュ化します。おぼえました。
要素数求める場合はscalar(@hoge)
使います。scalar()
おぼえました。
ありがとうございます。
某面白法人、YAPCスピーカーが多くて大変素晴らしい環境です。
某はてな社、YAPCスピーカーが多くて大変素晴らしい環境です。