my $code = ""; my %H; while () { chomp; if ( /<%\s*if (.+?)\s*%>/i ) { $code .= " if (\$H{$1}) { \n"; } elsif ( /<%\s*elsif (.+?)\s*%>/i ) { $code .= "} elsif (\$H{$1}) { \n"; } elsif ( /<%\s*else\s*%>/i ) { $code .= "} else { \n "; } elsif ( /<%\s*endif\s*%>/i ) { $code .= "};\n "; } else { $code .= " \$r .= \"$_\";\n"; } } $code = "sub page_expr\n {\n my (%H) = \@_; my \$r = '';\n $code\n; return \$r }; "; eval $code; $H{boys} = 1; $H{nice_boys} = 1; print page_expr( %H ); __DATA__ <%IF boys %>  You can play football for the whole day. <%IF nice_boys %>  You don't need to get permission from your teacher. <%ELSIF agreesive_boys%>  Please respect others <%ELSE%>  Please talk to me first <%ENDIF%> <%ELSIF girls%>  I suggest you to go to library <%ELSE%>  Stay here <%ENDIF%>