
No.7ベストアンサー
- 回答日時:
#6補足>横槍ですみませんが
#6のソースには
<head></head>がない
$qがない
${\head}の形で呼び出すには先行宣言が必要
呼び出される関数でprintするより関数で文字列を返した方がよい。
</html>の後にタグがある
</td></tr>がない(マッチしてない)
を直してみました
あとは、良きに・
require 'lib.pl';
use CGI;
#$q = new CGI;
sub head;
print <<"_HTML_";
<HTML>
<HEAD>
<TITLE>result</TITLE>
</HEAD>
<BODY>
<HR width="90%">
<table border="0" cellpadding="0" cellspacing="0">
<tr>
<td bgcolor="#BBBBBB">
<table border="0" cellpadding="2" cellspacing="1">
<tr>
${\head}
</tr>
</table>
</td>
</tr>
</table>
<HR width="90%">
</BODY>
</HTML>
_HTML_
# $q->end_html;
sub head
{
my $wk ;
@name = (aa,bb,cc,dd,ee,ff);
$ii = @name-1;
for ($i = 0 ; $i <= $ii ; $i++) {
$wk = "$wk<td>$name[$i]</td>";
#print "<td>$name[$i]</td>";
}
return $wk;
}
ありがとうございました。ようやく解決することができました。
本当に助かりました。
最後にもうひとつだけ質問があります。
以下のような場合はどのように変数に入れたらよいのでしょうか?
もし、お時間があればご回答お願いします。
sub html {
print <<"_HTML_";
<HTML>
<HEAD>
</HEAD>
.
.
.
_HTML_
}
No.8
- 回答日時:
>以下のような場合はどのように変数に入れたらよいのでしょうか?
もうひとつ意味がよくわからないんですけど、
同じだと思います。
意図を理解していなかもしれないけど、こんな感じ?
require 'lib.pl';
use CGI;
#$q = new CGI;
sub head;
sub html {
print <<"_HTML_";
<HTML>
<HEAD>
<TITLE>result</TITLE>
</HEAD>
<BODY>
<HR width="90%">
<table border="0" cellpadding="0" cellspacing="0">
<tr>
<td bgcolor="#BBBBBB">
<table border="0" cellpadding="2" cellspacing="1">
<tr>
${\head}
</tr>
</table>
</td>
</tr>
</table>
<HR width="90%">
</BODY>
</HTML>
_HTML_
}
&html;
# $q->end_html;
sub head
{
my $wk ;
@name = (aa,bb,cc,dd,ee,ff);
$ii = @name-1;
for ($i = 0 ; $i <= $ii ; $i++) {
$wk = "$wk<td>$name[$i]</td>";
#print "<td>$name[$i]</td>";
}
return $wk;
}
#-----------8<---------8<------------
関数の中でヒアドキュメントを使うのに(関数として返すのための)変数に入れるのにどうするか?というような意味なら
sub html {
my $ret = <<_HTML_;
なんたら
かたら
_HTML_
return $ret;
}
みたいに書けます。
本当いうと、最後に実行した式が値になるので、(returnは要らなくて、$retも要らないので)
sub html {
<<_HTML_;
なんたら
かたら
_HTML_
}
でもいいですが、関数にする意味がよくわかりません。
あと、#5は、#6で言われている通り同じ意味でした。
あと、
#2で書いているような
<< "_HTML_"
の様にスペースをあけるのは、よくない(非標準的な)書き方でした。
同じようでも、この場合、
<< _HTML_
とは書けません(空行以降がスクリプトになる)ので意味が変わってしまいます。
(スペースを空けない場合は同じ意味です)
ご丁寧な回答ありがとうございました。
私が聞きたかったのは
sub html {
<<_HTML_;
なんたら
かたら
_HTML_
}
のことでした、printしていたのもですからうまくいきませんでした。
今回は本当にありがとうございました。すっきりしました。
No.6
- 回答日時:
<<__HTML__ は <<"__HTML__" と等価だった気がします。
こっちでは実行できるんですが、perlのバージョンとかわかったら教えていただけます? こちらは5.6以降でチェックしてます。もしくは、サブルーチンの中身と呼び出し方を具体的に教えて頂ければ、アドバイスできるかもしれません。
> なにかテーブル内だからとか関係あるのでしょうか?
いいえ、perlは自分が吐いている物がhtmlだと言うことは知らないので、関係ありません。
この回答への補足
省略し短くまとめると以下のようになります。
&headの部分を表示させたいのですが、うまくいきません。
もし、お分かりになれば教えてください。
お願いします。
#!/usr/bin/perl -w
require 'lib.pl';
use CGI;
print <<"_HTML_";
<HTML>
<TITLE>result</TITLE>
<BODY>
<HR width="90%">
<table border="0" cellpadding="0" cellspacing="0">
<tr>
<td bgcolor="#BBBBBB">
<table border="0" cellpadding="2" cellspacing="1">
<tr>
&head
</tr>
</td>
</BODY>
</HTML>
</table>
</table>
<HR width="90%">
_HTML_
$q->end_html;
sub head
{
@name = (aa,bb,cc,dd,ee,ff);
$ii = @name-1;
for ($i = 0 ; $i <= $ii ; $i++) {
print "<td>$name[$i]</td>";
}
}
No.3
- 回答日時:
私はいつもこうです。
sub date{'日付:' . localtime()}
print <<__HTML__;
この下に
@{[&date]}
サブルーチンをば
__HTML__
${&sub}みたいな方法もあったような・・・わかったらまた書き込みますね。
No.2
- 回答日時:
#別のやり方、こっちのがいいかも
sub test {
return "TEST";
}
sub test2($$) {
my ($a,$b) = @_;
return $a+$b;
}
sub evaluate {
my $str = shift;
$str =~ s/^(&.*)/$1/gmee;
return $str;
}
print evaluate << "_HTML_";
ここでサブルーチンを実行させたい。
&test
&test2(4,5)
_HTML_
No.1
- 回答日時:
ちょっと違うかもしれませんが…
sub test {
return "TEST";
}
sub test2($$) {
my ($a,$b) = @_;
return $a+$b;
}
sub evaluate {
my $str = shift;
if($str =~ /^\&/){
return eval($str) ."\n";
} else {
return $str;
}
}
while(<DATA>){
print evaluate($_);
}
__END__
ここでサブルーチンを実行させたい。
&test
&test2(4,5)
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
内部処理形式が日付型 (Date) ...
-
Pythonのプログラミングの質問...
-
Application.ScreenUpdating = ...
-
VB6で、長い時間かかる処理...
-
セレクトボックスのselected属...
-
テーブル内でドロップダウンメ...
-
16進の10進変換について
-
FindFirst を複数条件で検索
-
メモリをアドレスを直接指定し...
-
シェルスクリプトで、空白(ス...
-
JSONで文字列が長い時
-
formで特定のinputを送信しない...
-
<SELECT>タグの折り返し
-
【至急!!!】python言語で本を見...
-
複数列を持ったリストボックス...
-
セレクトメニューで2つの項目...
-
実行時エラー 3020の対策
-
ソケットでのデータ送受信につ...
-
vbaでxmlからNodeListでデータ...
-
半角スペースが有効にならない。
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
何がいけないのでしょうか?
-
プロトタイプ宣言のワーニング...
-
ループで小数を使うと変な誤差が
-
__DATA__ が上書きされてしまう
-
数値の多い順に別々の処理をす...
-
10進数→2進数
-
Perlで複数の値を返す良い方法...
-
入れ子ループで、外側のループ...
-
連想配列とforeach
-
変数内でHTMLを使用したいです
-
print <<"_HTML_"の中でサブル...
-
dieやPerl自体でエラーが発生し...
-
別プログラムの標準入力に引数...
-
掲示板に入力した文を表示する...
-
Perlにfunctionってないんですか?
-
Perlで自分自身の関数名を知る...
-
変数に値を代入するのに、まずu...
-
Telnetモジュールで繋がりません。
-
Pythonのマルチプロセスでの並...
-
1行での計算について
おすすめ情報