Skip to content

Instantly share code, notes, and snippets.

@ktat
Created August 28, 2012 16:10
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save ktat/3499604 to your computer and use it in GitHub Desktop.
Save ktat/3499604 to your computer and use it in GitHub Desktop.
Text::Xslateの謎な挙動
#!/usr/bin/perl
use strict;
use warnings;
use Text::Xslate;
use utf8;
use Encode;
my %vpath;
$vpath{"test.tt"} = <<_TMPL_;
[%- MACRO hoge1 (aaa) BLOCK -%]
[%- END -%]
[%- variable = 1 -%]
[%- MACRO hoge2 (bbb) BLOCK -%]
これが呼ばれないと再現しない
[%- END -%]
[%- hoge2(1) -%]
[% hoge1("AAA") %]
[% variable %] <- why "AAA" ???
_TMPL_
my $t = Text::Xslate->new(
syntax => 'TTerse',
cache_dir => '/tmp/xslate-cache/',
path => \%vpath
);
print Encode::encode("utf-8", $t->render("test.tt"));
@ktat
Copy link
Author

ktat commented Aug 28, 2012

結果は、以下

これが呼ばれないと再現しない
AAA <- why "AAA" ???

@ktat
Copy link
Author

ktat commented Aug 29, 2012

2つのマクロ間で定義された変数は後者のマクロが呼ばれた後に前者のマクロが呼ばれると、
前者のマクロの引数が間で定義された変数に割り当てられる。
後者のマクロが呼ばれる前に、前者のマクロが使われたときには変数に代入されない。
その後に後者のマクロが呼ばれた後、前者のマクロを使った場合は、同様の現象となる。
変数定義をマクロ定義の間で行わなければ問題はないようです。

@gfx
Copy link

gfx commented Oct 14, 2012

遅くなりましたが 1.5020 で修正しました!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment