Perl コーディング初心者質問コーナー Part35
>>926 つーか、エバッてるから、ちーともびっくりしない。
ユーはパアルのなにが知りたいんだい?
答えてやるよ!
存在価値
そうかい。ユーは存在価値が知りたいのかい。
存在していて、害にならなければ存在価値はあると言っていいだろう。
でも大事なことを教えてやろう。パアルのコージングとは無関係な質問ね。
931 :
870:04/07/11 06:02 ID:???
あがいて結局できなく、半べそかいてもどってきました870です。
>>888 一応&Form_Input();にはしてあります。
それで、アドバイスがあった
print $input{'1'} ;
を入れてみたのですが、表示されません。
一応ソースですが、再アップしてみたので、よかったらご覧になってください。
もう自分挫折しそうですorz
どなたか、愛の手を・・・
>>931 print "Content-type: text/html;\n\n";
それと、ソースのファイル名が100q.zipじゃなくて100.zipになってたぞ。
933 :
932:04/07/11 06:50 ID:???
>>931 ヘッダの問題じゃなかったのかな?
print $input{'1'} ;
って何を表示するのかわかってる?
print $input{$_} for 1..100; こうした方が君にはいいかも
>>888 $input{'1'}
を
foreach (1..100){
print qq($_ : $input{$_} <BR>\n);
}
にしてみる。
>934 Perlスレッドでのレスありがd
こんなスクリプトを書きましたが、結局画像の形だけが表示されてしまいしまた。
画像を出して、Locationで飛ばしたかったんだけど。
#!/usr/local/bin/perl
$image = "./image.gif";
$SIG{ALRM} = \&timeout;
#GIF画像の出力
sub timeout{
print "Location:
http://******/success.html\n\n";
alarm 0;
exit;
}
alarm 5;
print "Content-type: image/gif\n\n";
#画像の書込
open(IMG,"$image");
binmode(IMG);
print <IMG>;
936 :
935:04/07/11 18:26 ID:???
あ、「GIF画像の出力」コメントは、なしです。
ttp://****/*.cgi?f=filename.jpgで filename.jpgへリンクしたhtmlを出力させたいと思ってます。
<a href="特定のURL指定/$f">●</a>とおいたときに$fがfilename.jpgじゃなく空白になります。
filename.jpgを出力するために何か処理が必要になるのでしょうか?
htmlの出力、URLの指定などは問題なしです。
アドバイスお願いします。
>>937 >>1 > 1: 自分はこう言う事がしたい。
> 2: それでこんな風にやってみたが・・・
> 3: こんなエラーが出て上手く行かなかった。
2が抜けてる。
?f=filename.jpg を $f にどうやって代入してるの?
939 :
937:04/07/11 22:16 ID:???
>>938 レスありがとうございます。
?f=filename.jpgが$f指定してると思ってたので特に記述してなかったです。
?f=のような指定について調べてみたのですが、参考になるページが見つかりませんでした。
情報ありましたらアドバイスいただけないでしょうか?
>939
QUERY_STRINGでぐぐれ。
941 :
nobodyさん:04/07/11 23:12 ID:YH96401L
PHPだと
$array[] = "apple";
とすると配列の最後に"apple"を追加してくれるのですがこれをPerlでやる場合
簡単な方法ってどうやりますか?
どもです
944 :
937:04/07/12 01:23 ID:???
GD::Graphでグラフを描こうとしてるんだけど
$gd=$graph->plot(\@data);
open(IMG, '>test.gif' ) or die $!;
binmode IMG;
print IMG $gd->gif; ★
close IMG;
★のところで Can't call method "gif" on an undefined value
pngにしてもだめなので、ここで何をサポートしているのか知りたい。
サポートしているファイル形式を知るためのメソッドってありますか?
配列に小数点を入れるとき
@a = qw( 0.1 0.2 0.3 );
だとちゃんと入るんだけど
@a = { 0.1, 0.2, 0.3 };
だとなんかすっげー数字が入っている
なんでだすか?
@a = ( 0.1, 0.2, 0.3 );
>>950 なんですっげー数字が入るのか聞いているんだすよ。
952 :
949:04/07/12 11:48 ID:???
>>951 my @a = { 0.1, 0.2, 0.3 }; # ハッシュリファレンス 1 つを @a に代入
print @a, "\n"; # リファレンスを文字列として評価 → "HASH(0x10c1350)"
# 文字列 "HASH(0x10c1350)" を強制的に数値コンテキストで評価
# 0x10c1350 → 17568592
$_ += 0 for @a;
print @a, "\n"; # 17568592
>>953 正確には文字列→数値じゃないな。リファレンスを数値コンテキストで
評価するとアドレスの値が返る。
サブルーチンにファイルディスクリプタを渡したいんですが
perlスクリプトをHTMLに埋め込むことって出来ますでしょうか?
例えばpingを打ちたいと思ったら
CGIだと
クライアントから要求→サーバがping実行→クライアントに実行結果を返す
ですが、
HTMLの中にスクリプトを埋め込むことによって、クライアントからpingを打つことは可能でしょうか?
うまく意味が伝わらなかったらごめんなさい_no
960 :
957:04/07/12 21:40 ID:???
>>958 回答ありがとうございます。
ゼミの教授が「タグで簡単に出来る」と言ってきて、
自分なりに色々調べたのですが、全くそのような情報がなかったので質問させて頂きました。
胸を張って「そんなこと出来ませんよ」って言いたいと思います!
いいじゃん
恥かくのは本人なんだから
>>960 ゼミの教授は嘘つきだ
Perlにタグなどない!
だいたいHTMLに埋め込むのってCGIじゃなくてSSIでしょー
確かにSSIをHTMLに埋め込むのはタグだけどなぁ
>>963 学生「先生!あのpingの話ですけど、できませんよ!」
教授「ほう、何か調べたのですか」
学生「はい。調査の結果、2chのnobodyさん(958)が『無理』と。句読点なしで」
教授「…帰れ」
…こんな感じのコじゃないかな。
「タグで出来る」ってのも、
>>960さん用語に変換されてるだけかもしれない。
ヘッダをimage/gifとかにして、
「<img>タグ」でアクセスとかだったら、
ちょっと、いぢわるだなぁ、その教授。
>957とりあえずガンガレ。。
HTMLの中にperlを埋め込むだけなら PERL_SSI とかいう手もあるが、
「クライアントからpingを打つ」てのは難しそうに思えるなあ。
それができるとたぶん物凄いセキュリティホールになる。
だから
無理
って言ったんですけどね・・・
968 :
nobodyさん:04/07/13 13:17 ID:Q7wc8BxW
特定のフォルダにあるファイルを表示し、ファイルにリンクを張り、ファイルサイズとアップロードされた時間を表示しています。
print "<table>\n";
print "<tr><th>No.</th><th>FileName</th><th>FileSize</th><th>UploadTime</th></tr>\n";
opendir(DIR, "$dir" ) or die;
while(my $filename=readdir(DIR)){
if($filename=~/^\.{1,2}$/){
next;
}
++$no;
@fileinfo = stat("$dir$filename");
$upldtime = &time($fileinfo[10]);
$filesize = int ($fileinfo[7] / 1024);
$filesize = ~ s/(\d)(\d\d\d)(?!\d)/$1,$2/g;
print "<tr><td>$no</td><td><a href=\"$dir$filename\">$filename</a></td><td>$filesize KByte</td><td>$upldtime</td></tr>\n";
}
print "</table>\n";
closedir(DIR);
左端からNo.、ファイル名、ファイルサイズ、アップロードされた時間・・・と4つ並びます。
ここで、「アップロードされた時間」を基準にして、時間の新しいものから順にリスト表示したいのですが
根本的にやり方がわかりません。
whileより上でソートしていないといけないような気もするのですが・・・
誰か教えてください。。
&timeはここには出ていませんが、yyyy/mm/dd hh:mm:ss形式で表示させるためのサブルーチンです。
アップローダー作っておきながら、ソートもできんのか・・・
>>968 whileの中でhtml出力まで一気にやらなけりゃいいんじゃないの?
while内でhashなりにデータ格納して、
後で好きなようにソートなり何なりしてHTML出力すれば?
972 :
968:04/07/13 13:57 ID:Q7wc8BxW
みなさまありがとうございます。
>>969 system "ls -lt" >hoge.txt
・・・みたいな感じですね。system禁止されてなきゃいいのですが。
>>970 そうか。
アップローダーCGIを参考にすればよかったのですね。
全然思いつきませんでした。
ファイルのアップはFTPです。アップローダーなんて高機能なもの、まだ作る腕がありません。。
>>971 perlのsortを調べてて、「先頭からn番目(今回の場合は4番目)のものをキーにして・・・」というのが、探し当てられませんでした。リャマ本にも「すぐわかるperl」にもなかったですし、いろいろ探し回ったのですが。。
・・・と書いてて今思いつきました。
タイムスタンプを先頭に格納すればいい?
がんばってみます。
973 :
970:04/07/13 14:03 ID:???
>>972 >ファイルのアップはFTPです。
そうだったのか・・・スマンコ
print <<"EOS";
<table summary="アップロードされたファイルの一覧">
\t<tr><th abbr="番号">No.</th><th abbr="ファイル名(リンク)">FileName</th><th abbr="サイズ(Kilo bytes)">FileSize</th><th abbr="アップロード時刻">UploadTime</th></tr>
EOS
my $count = 0;
local *DIR;
if (opendir DIR, $dir) {
foreach my $filestatus (
sort { $b->[3] <=> $a->[3] } # 最新更新時間を降順に並べ替え
map { [ $_, qq|$dir/$_|, (stat qq|$dir/$_|)[7,9] ] } # [ファイル名、ファイル位置、ファイルサイズ、最終更新時間]
grep { !/^\.+/ } # . .. を排除
readdir DIR # 読む
) {
printf qq|\t<tr><td>%s</td><td>%s</td><td>%s</td><td>%s</td></tr>\n|,
++$count, # ファイル番号
sprintf (qq|<a href="%s">%s</a>|, $filestatus->[1,0]), # ファイル名とそのリンク
sprintf (qq|%s KBytes|, int($filestatus->[2]/1024) =~ s/(\d)(\d\d\d)(?!\d)/$1,$2/eg), # サイズ(KBytes)
×tamp($filestatus->[3]) # 最終更新時刻
}
}
print qq|<td colspan="4">ファイルがないかも (´・ω・`)</td>\n| unless $count; # $count が 0 ならば
print <<"EOS;
\t</tr>
</table>
EOS
脳内処理につきご勘弁m(_ _)m