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.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スピーカーが多くて大変素晴らしい環境です。