Perlコーディング初心者質問スレ Part 53
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
2006/11/26(日) 14:38:23ID:SlmGsFMB【投稿する際の注意】
質問するときは内容をよく吟味してから投稿してください。
「コマンドの意味がわかんない」とかはマニュアル見ましょう。
回答者さんは何でも屋じゃありません。
1: 自分はこういう事がしたい。
2: それでこんな風にやってみたが・・・
3: こんなエラーが出て上手く行かなかった。
最低でも1と3が無いと誰も答えられないよ。
ソース貼る時は、全角スペースでインデント忘れずに。
良い回答は良い質問から。一緒に勉強しましょう。
お勧めサイトは >>2-10
前スレ http://pc8.2ch.net/test/read.cgi/php/1153987463/
過去ログ倉庫 ttp://user.ftth100.com/mirrorhenkan/perl/
0129nobodyさん
2006/12/01(金) 11:32:40ID:???キーワード教えてもらったんだからマニュアルぐらい読めよ...
Provided that you have specified a character set of ISO-8859-1 (the
default), the standard HTML escaping rules will be used. The "<" char-
acter becomes "<", ">" becomes ">", "&" becomes "&", and the
quote character becomes """. In addition, the hexadecimal 0x8b
and 0x9b characters, which some browsers incorrectly interpret as the
left and right angle-bracket characters, are replaced by their numeric
character entities ("?" and "?"). If you manually change
the charset, either by calling the charset() method explicitly or by
passing a -charset argument to header(), then all characters will be
replaced by their numeric entities, since CGI.pm has no lookup table
for all the possible encodings.
charset()メソッドを使うか、header()に-charset引数を渡せばいいらしい。
0131123
2006/12/01(金) 11:39:27ID:???$CGI->charset('Shift_JIS');
ありがとうございました。
0132126
2006/12/01(金) 11:43:37ID:???全体で 1秒ちょっとだったのが、index関数の部分をコメントアウトしたら、
0.01秒ぐらいに…。
ここまで極端に分かるとはおもいませんでした
0133126
2006/12/01(金) 11:47:52ID:???while (my $line = <IN>)
の部分もコメントアウトしてました。
これを外したら、0.6秒ぐらいに…。
膨大なデータを1行ずつ読み込む、ここが負荷のメインだったようです。
こうなると、namazuとか他の言語を使うぐらいしか負荷削減の方法はないですね。
0134nobodyさん
2006/12/01(金) 11:49:40ID:???毎回40MBあってこれからもどんどん増える予定のファイルを全部なめるのがそもそもだめ。
もう少しデータの持ち方を工夫した方がいいよ。バークレーDBぐらいはせめて使え。あるいは
インスコ面倒でなければまともなDB(mysqlとかpostgresとか)つかっちゃったほうが楽な気も
する。
0135126
2006/12/01(金) 11:54:15ID:???なるほど
DB使ったほうがいいわけですか…
それは思いつきませんでした
実はこれフリーで配布されているCGIスクリプトのログファイルでして
過去ログも含めた検索をやりたいのでその検索スクリプトを自作していたとこなんです
ログファイルをHTML化して namazu かなんかで検索させるのとDB化、両方を検討してみます。
0136nobodyさん
2006/12/01(金) 12:07:44ID:???でログを読んだときは負荷減りませんか?
0137nobodyさん
2006/12/01(金) 12:40:28ID:???0138126
2006/12/01(金) 12:42:32ID:???サンクスです。
読み込んだ時点の負荷は 1/3 〜 1/2 程度になりました。(でも1行ずつの処理を加えると同じかそれ以上になるかも…)
ただ、変数 $buff には全データが入っていることになるので、これを1行ずつ処理するときにどうすべきかが悩みます。
split 関数 で改行コードでの分割をして、配列にいれてから、while 関数で1行毎に処理したくなりますが、
これだとメモリ山ほど食いそうですし…。
0139nobodyさん
2006/12/01(金) 13:28:54ID:???>>134に禿同です。
検索対象が決まっているのなら、その元のデータから検索用のデータ(インデックス)を作るプログラムを作り、
定期的に保守をするのが楽です。この処理自体が多少重くても、バックグラウンドで1日数回で済むのなら
いいのではないかと。
インデックスデータは、DBMに持たせる(検索対象文字列をキーにする)のが一番効率がいいと思います。
プレーンテキストでも、元のデータを丸々スキャンするよりはるかにましです。
0141nobodyさん
2006/12/01(金) 14:04:00ID:???+ * ? . ( ) [ ] { } | \
らしいのですが、/もですよね?
if($aaa =~ /\//)
とすれば望みどおりの動作をするのでこう思うのですが、間違ってますか?
0142nobodyさん
2006/12/01(金) 14:26:10ID:???当然要エスケープ
0143nobodyさん
2006/12/01(金) 18:30:05ID:???$hoge =~ m{/}
0144nobodyさん
2006/12/01(金) 18:55:31ID:???ここの真ん中付近にあるリスト作成を使ってファイルを出力しようとしてるんですが、
出力ファイル先のカタカナのサ行などが文字化けしてしまいます。
jcode.pl を使えば直るんじゃないかと思っているのですが、どこに何を書き足せばいいのでしょうか?
0145nobodyさん
2006/12/01(金) 18:58:33ID:???http://pc8.2ch.net/test/read.cgi/php/1157787046/
0146nobodyさん
2006/12/01(金) 19:39:42ID:???そんなに大変な事だったんですか。
どこかを書き足すだけで解決できると思ってたのですが、大変そうなので諦めます・・・。
申し訳ありませんでした。
0147nobodyさん
2006/12/02(土) 00:17:21ID:???<INPUT type="submit" value="送信">
</FORM>
これを送信ボタン押すとPOST形式で送信されると思いますが、
プログラムが自動でPOST送信する方法ありますでしょうか。
GET形式の場合は、"http://xxx/xxx.cgi?xxx=xxx"
wget すればよいでしょうか。
よろしくお願いします。
0148nobodyさん
2006/12/02(土) 02:43:19ID:???GETの場合そのとおり。「送信」はURL encodeしる。curl なら
curl -d xx=送信(URL ncodeしる) "http://xxx/xxx.cgi"
でPOSTできる。ってかここperlスレなんだが。
LWPでもできるよ。
0150nobodyさん
2006/12/02(土) 11:24:22ID:???GDで日本語文字列を出力したいのですがうまくいきません。
現状、stringTTFメソッドでTrueTypeフォントのパスを指定してるのですが(WindowsのFontsフォルダ内)
エラーは出ないものの「・・・」といった出力にしかなりません。英数字でも同様です。
Winで画像出力の際にbinmodeを指定するような感じで
何かあるのかも、と思って調べてるのですが・・・
ちょっと漠然としていますが、チェックポイントなど気がついた方いましたら
おしえてください。よろしくおねがいします。
0151nobodyさん
2006/12/02(土) 12:46:30ID:???$@とか勝手に上書きしたらまずいですか?
#やってみたらできましたが・・
何か専用の特殊変数ってありますか?
0152nobodyさん
2006/12/02(土) 13:03:38ID:???my $err = &testfunc(\$ret, \$val1, \$val2);
のように渡して、戻り値は \$ret へ入れて、エラーコードとこエラー文字列は $err に返す
といったことも出来る
エラー無しの場合は $err は undef であるか "" または 0 です。
0153nobodyさん
2006/12/02(土) 13:23:08ID:???関数はモジュール化したいので、自前のグローバル変数は使いたくないんですよねえ。
しかもオブジェクト指向にしたいんですが、returnでエラー返す以外に
定番の方法ってないですか?
0154nobodyさん
2006/12/02(土) 13:29:26ID:???しちゃうとか。
0155nobodyさん
2006/12/02(土) 14:11:21ID:???0156nobodyさん
2006/12/02(土) 14:25:39ID:???0157nobodyさん
2006/12/02(土) 14:27:33ID:???結果をオブジェクトで返したらどうか
正常ならnew HogeResultして情報をそれに格納し、そのリファレンスを返す
エラーなら文字列を返す
受け取り側は
my $res = getHoge($foo);
if (ref $res) {
# 成功
} elsif {
# 失敗
}
0158nobodyさん
2006/12/02(土) 14:41:08ID:???ありがとうございます・
0159nobodyさん
2006/12/02(土) 16:25:39ID:???Perlをすべて把握している人って世の中にいるんでしょうか。
オライリーさん以外に。
0160nobodyさん
2006/12/02(土) 16:41:38ID:???たとえばEncodeだけに限っても、メインのメンテナーのdankogai以外にも何人もかかわってる。
個人ですべてを把握するのは無理じゃないか?
# オライリーさんって誰? Tim O'Reillyのことか?
0162JAPU ◆lVJAPUTeX.
2006/12/02(土) 20:09:06ID:???>>112
ない。Cookieが読み込まれていない場合でも動作するように書くべし。(エラー出して終了でもいいけど。)
>>117
個人的には undef が好み。処理によっては結果的に空文字列を返すこともあるから、undef に統一しておいたほうが分かりやすい。
>>135
HTML化して、Googleに検索させる作戦もあり。自前でやる場合は他の方が書かれている通り。
>>141
迷ったら、記号類はとりあえず \ を前置しておけばOK。記号類 → \ をつけた場合、それがメタ文字であってもそうではなくてもその文字自身を表す。
英数字 → \ をつけた場合、メタ文字になる場合がある。
>>151
問題ない。やりたまえ。
>>151,154
多くのモジュールでは error みたいなメソッドを定義していますね。んで、そのメッセージを格納しておくにはグローバル変数を使っているわけですが。
グローバル変数 == 悪 というわけではないので、ホゲホゲ。外部から隠蔽したいなら、
{ my $ERRORMSG; sub _set_error { $ERRORMSG = "@_" } sub error { $ERRORMSG } }
こんな感じ? さらに、_set_error も隠蔽したいなら、
{ my $ERRORMSG; my $_set_error = sub { $ERRORMSG = "@_" }; sub error { $ERRORMSG } sub hoge { $_set_error->("hoge"); return undef; } }
0163nobodyさん
2006/12/03(日) 01:37:01ID:???どのようにすれば良いでしょうか?
if(現在の時間 - 最終投稿時間 < 10秒)er{エラー}
このような感じでしたいのですが
最終投稿時間の取得はどのようにすれば良いでしょうか?
0164nobodyさん
2006/12/03(日) 02:25:35ID:???(クッキーが処理できない場合は投稿そのものを拒否)
0165nobodyさん
2006/12/03(日) 02:49:58ID:???いろいろ調べたんだね。えらいぞ。
これはぼくの想像だけど、恐らくは既存の何がしかの Web アプリケーションに機能追加しようとしているんだね。
そしてその機能は(恐らくは同一端末からの)投稿間隔が短くなりすぎないように制限したい、とそういうわけだ。
で、不明点が「最終投稿時間の取得」方法ということだけれど、「取得」というからには保存しているのだろうね。
「現在の時間」は恐らくアプリケーションが動作する機械のシステム時刻なので、そこから取ってくることができるけれど、あなたのアプリケーションにおける特定端末からの投稿履歴は、あなた以外に面倒を見てくれる人はいないはずなので保存しているはず。
保存の目的がそもそも「最終投稿時間の取得」なのであれば、そこから取り出す事も考えていたはずですよね。
あとはそのようにコードを書くだけだよ。がんばって。
0166nobodyさん
2006/12/03(日) 03:31:47ID:???セッション管理しているかどうかで変わってくる。
セッション管理不可な場合、IPアドレスで判断することになるかな。
単純にIPアドレスに対応するファイルを更新して、そのファイルのタイムスタンプと比較するのは簡単だね。
ただし、プロキシ経由のクライアントは一緒くたに判断されちゃうかな。
セッション管理してれば、セッションに関連づけて何らかの方法で更新時刻を保存するんだろうね。
なんか抽象的な答えだな。
色々やり方があると思うんだが、アプリケーションの要件用途で適切な道具は変わってくるからね。
0168151
2006/12/03(日) 10:08:46ID:???evalが正常時に$@を初期化してしまうので、呼び側で配慮が必要ですね。
sub hoge {$@ = 'hoge'; return}
eval '&hoge(); $gERROR = $@';
$@ and die;
print $gERROR if $gERROR;
0170nobodyさん
2006/12/03(日) 19:59:04ID:???>>168
呼び出し側に配慮が必要って時点で止めないか?普通。
お前さんが体感した通り $@ を書き換えるのはお行儀が悪いし呼出側に負担を強いる。
0171nobodyさん
2006/12/03(日) 22:05:01ID:???数件、代案を教えて頂いた限りで、「エラーは$@を参照してくれ」という
取り決めが一番呼び側の負担が少ない気がするのですが、どうでしょう。
$@はevalとバッティングするのでevalの場合のみ168のように書かなければ
ならないことは、もし説明がなかったとしても自明なことのように思います。
ほかに$@を使うデメリットってあるでしょうか。
0172nobodyさん
2006/12/03(日) 22:15:17ID:???だったらそうしろよ、って話なのですが、本当にそれでいいのか、検討しているところです。
0173nobodyさん
2006/12/04(月) 00:26:50ID:???本当に「エラー」ならば Carp or wanings ( $SIG{__WARN__} ) に任せれば?
もしくは誰かがレスした Error.pm
単なる「制御上のメッセージ 」を返したいならば戻り値を下みたいな
ref にしちまえばいいだけじゃねーの?
return { 'data' => undef, 'msg' => 'お前さんの望んだメッセージ' } ;
$@ に関するルールを変更してまで $@ を参照させるってのは傲岸に
感じる。上の例で云うと前者には用意がされてるわけだし、後者は
エラーですらない。
CPAN でそんなモジュールに当った事がないがそういうモジュール
に当ったら、別モジュールを探すなあ。
そういうモジュールがあったら後学のために教えてください。
0174nobodyさん
2006/12/04(月) 00:33:59ID:???死にたくないなら生きればいいじゃない。
0175nobodyさん
2006/12/04(月) 16:55:58ID:???どういうふうにすればよいのでしょうか?
index.htm(フレームについて書いたページ)
^^^^^^^^^^|^^^^^^^^^^^^^^^^^^^^|
メニュー | メインページ |
menu.htm | main.htm |
| |
| |
| |
| |
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
普通一ページだけだったら、
print <<"HTML"
<html>
・・・
</html>
HTML
ですよね。
print <<"HTML"
#indexを書く
HTML
print <<"HTML"
#menuを書く
HTML
print <<"HTML"
#mainを書く
HTML
これだけで、OKでしょうか?
よろしくお願いします。
0176nobodyさん
2006/12/04(月) 17:08:08ID:???それぞれのxx.htmに対応するcgiを用意する。
複数用意するか、なんかパラメタ与えて動作を
切り替えるかはお好みで。
クライアントからは別々にリクエストが来るので、
情報をひきつぎたければそれもパラメタで引き継ぐ
とかセッション使うとかいろいろ必要。
たぶん質問の仕方からいってこの辺の仕組みは
すぐには理解できないと思うので地道に勉強して
くれ。
0177nobodyさん
2006/12/04(月) 17:27:59ID:???0178nobodyさん
2006/12/04(月) 17:52:25ID:???ありがとうございます。
ちょっとずつ勉強してみます。
>>177
なるほどぉ。
フレーム使わない方法もありますね。
0179nobodyさん
2006/12/04(月) 18:23:52ID:???0181nobodyさん
2006/12/04(月) 21:26:59ID:???ActivePerl Build 819 MSWin32
には、HTML埋め込み型のaspl(C:\Perl\eg\PerlEx\examples.aspl)とか
あるんですが
Apache(Linux系)とかでも、埋め込み型で動かせるのって
なかったでしょうか?
昔に、そんなのがあった気がするんですが
名前が思い出せなくて
0182181
2006/12/04(月) 21:29:45ID:???思い出しました。
Embperlとかでした
0183nobodyさん
2006/12/05(火) 00:10:37ID:???$str =~ s/[C-G][pqst]/1-9/g;
print $str;
置き換えたところ1から9と順に置きかえたいのですが
置き換えた部分すべて1-9と表示されてしまいます。
どの部分を変えればよいのでしょうか??
0184nobodyさん
2006/12/05(火) 00:35:41ID:???これがお望みのものか?
$str = "AoUDqGrsqcUSgVGsCphafNXhkEtsfCcANeLDsTFq";
$cnt = 1 ;
$str =〜 s/[C-G][pqst]/$cnt ++/eg ;
print $str . "\n" ;
0186nobodyさん
2006/12/05(火) 01:58:21ID:???知らなかった (;゚Д゚)
0187nobodyさん
2006/12/05(火) 02:21:49ID:???0188nobodyさん
2006/12/05(火) 02:23:05ID:???後から送られてきた画像が上書きされてしまいます。
binmode(STDIN);
read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'} );
print "Content-type: image/jpg\n\n";
open(IMG,">sample.jpg");
binmode(IMG);
print IMG $buffer;
close(IMG);
これを No1.jpg No2.jpg・・・のように連番で保存させたいのですが
どこを変えればいいのでしょうか?
よろしくお願いします。
0189nobodyさん
2006/12/05(火) 04:54:50ID:???最後の行から順番に表示するってのがあって、答えは納得できたのですが
↓でうまくいくのが、foreachをwhileにするとうまくいかない理由がわかりません
reverseがなければwhileでもエラー出ないのですが・・・
何故なんでしょうか?よろしくお願いします
foreach (reverse <>) {
chomp;
print "$_\n";
}
0190nobodyさん
2006/12/05(火) 12:05:35ID:???それ、あなたの期待する $_ もしくは @_ への代入が実行されてない。
以下が機能しないのと同じこと。
reverse 'foo' ;
print $_ . "\n" ;
print @_ . "\n" ;
reverse 関数は単独使用時に「左辺が指定されてなかったら $_ or @_ に代入する」
なんて機能を持ってない(つーか勝手にコンテキストの判断してもらっても困るw)。
foreach VAR ( LIST) BLOCK の場合は () 内のリストを暗黙の内に一個一個 $_ に
入れてくれるけど while ( EXPR ) BLOCK は、そんな器用なことはしてくれない。
() 内に条件式を必要とするだけ。
while ( <> ){ } は、あくまでも while ( defined ( $_ = <> ) ) { } の省略。
foreach と同一結果を得たければ、やはり一旦配列に突っ込むのが正攻法
@foo = reverse <> ;
while ( defined ( $_ = shift @foo ) ){ print $_ ; }
以下は見た目、正解っぽく感じるかも知れないが当然ダメ。
while ( defined ( $_ = reverse <> ) ){ print $_ ; }
別のお話しになってしまうので説明割愛。
0191nobodyさん
2006/12/06(水) 00:09:51ID:???> 正規表現中でインクリメントって出来るのか
> 知らなかった (;゚Д゚)
s/// 式の右部分は正規表現じゃないということも知らなかったんだね。ふぁいと。
0192nobodyさん
2006/12/06(水) 00:57:09ID:???0194nobodyさん
2006/12/06(水) 17:53:32ID:???1 while $a =~ s/(.*\d)(\d\d\d)/$1,$2/;
配列の最初の部分しか出力されないのですがどうしたらよいでしょう?
0195nobodyさん
2006/12/06(水) 18:14:05ID:???0196nobodyさん
2006/12/06(水) 19:17:48ID:???わかってると思うけど、式が評価されるのは /e オプションの効果です。
ただ単に右部分に式書いても評価されないので注意。
>>194
まず書いたスクリプトが動くかどうか確かめましょう。
0197nobodyさん
2006/12/06(水) 23:57:05ID:???即時別のサーバーへftp接続してアップロードしたいと思っています。
サーバーにNet::FTPをインストールすることができない状況で可能ですか?
良い手があれば教えてください。
サーバーのOSはSolaris9、CGIバージョンは5.8.8です
0198nobodyさん
2006/12/07(木) 00:53:15ID:???x.cgiを
open(OUT,"+<$file") ;
flock(OUT, 2);
@data = <OUT>;
#close(OUT); closeしません。
ブラウザでx.cgiをcloseしないで処理終わりました。
違うブラウザでx.cgiを実行したんですが、flockで止まりませんでした。
x.cgiのプロセスが終わると、flockはcloseしなくても
解除されるんでしょうか?
ループとかさせて、プロセスが生きてたりすると
x.cgiのflockで止まりますか?
よろしくお願いします。
0199nobodyさん
2006/12/07(木) 01:38:36ID:???0200nobodyさん
2006/12/07(木) 01:41:43ID:???で、flockはアドバイザリなのでflockを使ってないプログラムなどからは問答無用で読み書きできます
0201nobodyさん
2006/12/07(木) 07:35:05ID:???0202nobodyさん
2006/12/07(木) 11:11:15ID:SekHzZx8で使われている検索エンジンにジャンプし検索結果を表示したく思います。
今のままですと、文字化けが起きてしまいます。
(HTMLソース)
<form method="POST" action="http://www.hogehoge.co.jp/cgi-bin/search/" target="_blank">
<input type="text" name=textdata size="20">
<input type="submit" name=botan value="Search">
</form>
文字化けがしないようperlプログラムをかませて、shift JISに変換してから変換させたい
のですが、どのようなコードを書いたらよいでしょうか?
0203nobodyさん
2006/12/07(木) 11:26:48ID:???0204nobodyさん
2006/12/07(木) 11:27:17ID:???こっちのスレのほうがオススメ
http://pc8.2ch.net/test/read.cgi/php/1145308869/
0206nobodyさん
2006/12/07(木) 16:35:47ID:???そうなのか。
それは知らなかった…。
質問なのですが、
・Perl で flock したファイルを php で読み書き。
・php で flock したファイルを perl で読み書き。
・test1.cgi で flock したファイルを test2.cgi で読み書き。
この場合って、正常にロックはされるのでしょうか。
0208206
2006/12/07(木) 16:53:51ID:???なるほど
私はflockがちゃんと動作する環境で正しくプログラミングしていると思われるので大丈夫ですねb
安心致しました^^
0210nobodyさん
2006/12/07(木) 20:53:15ID:???プロンプトに最初から C:\DOCUME~1\user\デスク~1> となっているときに
perl -MCwd -e "print cwd"
とすると、C:/DOCUME~1/user/デスク~1 を返すのですが、
C:\DOCUME~1\user\デスク~1> cd "C:\Documents and Settings\user\デスクトップ"
C:\Documents and Settings\user\デスクトップ> perl -MCwd -e "print cwd"
とすると、C:/Documents and Settings/user/デスクトップ を返してしまいます。
これを、常に C:/DOCUME~1/user/デスク~1 を返して欲しいのです。
どなたかご存じでしょうか。
0211nobodyさん
2006/12/07(木) 21:02:43ID:???perl -MWin32 -MCwd -e "print Win32::GetShortPathName(cwd)"
でも何に使うの?
0212210
2006/12/07(木) 21:52:30ID:???おお素晴らしい。ありがとうございます。
ファイルメーカーPro内で外部コマンドを呼べる外部関数(Peta-Execute)があるんですが、
この中で短いパスで呼ばないとコマンドが動かないみたいなんです。長いパス付のコマンド
(というかperlの第一引数となるplファイル)にダブルクォーテーション付で呼んでも動作しなかった
ものですから。Winの問題なのか、関数の問題なのか、ファイルメーカーProの問題なのかわからず、
今試行錯誤中です。
0213nobodyさん
2006/12/07(木) 23:14:06ID:SekHzZx8<form method="POST" action="hogehoge.cgi" target="_blank">
<input type="text" name="text_name" size="25">
<input type=submit name="img_botan" value=OK>
</form>
↑のボタン(type=submit)を↓のようにして、同じ機能を持たせるには、
formタグ内をどのように変更したらよいでしょうか?
<input type="image" name="img_botan" value="OK" src="hogehoge.gif">
「type="image"」で作成してしまうと、postで上のデータを受け取った時
img_botanのvalue値の「OK」が受け取れない状況です。
0214nobodyさん
2006/12/07(木) 23:17:11ID:???まず英単語からな
0215nobodyさん
2006/12/07(木) 23:30:43ID:???微妙どころか全然Perlから離れとるがな(´・ω・)
<input type="hidden" name="img_botan" value="OK">
<input type="image" src="hogehoge.gif">
0216nobodyさん
2006/12/07(木) 23:56:27ID:???0217nobodyさん
2006/12/08(金) 09:56:10ID:ewFyIfPgここの買取口数とメールフォームの口数を買い取り口数にマイナスする計算の連動
似たようなスクリプトありませんか?もしくは作れますか?
よろしくお願いいたします
0218nobodyさん
2006/12/08(金) 10:03:05ID:???0219nobodyさん
2006/12/08(金) 10:48:17ID:joMMTMjE<form method="POST" action="hogehoge.cgi" target="_blank">
<input type="text" name="text_name" size="25">
<input type=submit name="img_button1" value=action1>
<input type=submit name="img_button2" value=action2>
</form>
↑のボタン(type=submit)を↓のようにして、同じ機能を持たせるには、
formタグ内をどのように変更したらよいでしょうか?
<input type="image" name="img_button1" value="action1" src="hogehoge1.gif">
<input type="image" name="img_button2" value="action2" src="hogehoge2.gif">
「type="image"」で作成してしまうと、postで上のデータを受け取った時、
「img_botan1」のvalue値の「action1」と
「img_botan2」のvalue値の「action2」が受け取れない状況です。
>>215
すみません、質問が悪かったです。
1つのform内でしたらhiddenを使えば解決するのは分かってました。
ごめんなさい。
0220nobodyさん
2006/12/08(金) 11:25:23ID:???もともとイメージマップの機能だから値はボタンを押したときの画像内でのマウス
カーソルの座標が送られてくるんじゃなかったっけ。どのボタンかを識別する
用途ならnameを一意につけて値のありなしだけ判定すれば分だと思われる。
0222nobodyさん
2006/12/08(金) 14:31:08ID:???例えば書き込みの際、動画場所を
http://www.youtube.com/watch?v=2m0P-Q0joxU
のように指定させます。
そこからflvと再生待ち画像のパラメータを取得したいのですが
$url= http://www.youtube.com/v/2m0P-Q0joxU
#↓(ここに飛ぶ)
$url= http://www.youtube.com/p.swf?video_id=2m0P-Q0joxU&eurl=&iurl=http%3A//sjc-static6.sjc.youtube.com/vi/2m0P-Q0joxU/2.jpg&t=OEgsToPDskKKNZHbTD7d-oE2My88f86P
のように飛び先のアドレスに変換するにはどうしたらいいのでしょうか?
分かりづらくてすいません。
02231/2
2006/12/08(金) 15:14:42ID:EPvPWdgJttp://www.nishishi.com/cgi/tinyurl/
ここのcgiを設置したのですが、設定ファイルをfileopenする所でエラーになるようです。
(配布されている状態のままアップすれば動くはずなのですがエラーになりました)
原因としては何が考えられるでしょうか?
環境:Windows IIS 6.0
Activeperl 5.6.1
02242/2
2006/12/08(金) 15:15:52ID:???# -------------------------- #
# データの読み込みと一致確認 #
# -------------------------- #
sub checkdatas
{
my $checkstring = shift @_;
# データファイルを呼んで一致項目を探す
my $redurl = "";
if( open(IN,"$datafile") ) {
foreach my $oneline ( <IN> ) {
if( $oneline =~ m/^$checkstring,(.*)/ ) {
# 見つかったらループを抜ける
$redurl = $1;
last;
}
}
close(IN); # ファイルを閉じる
}
else {
# 読めなかったらエラー
&errorexit("設定ファイルが読み込めませんでした。");
}
return $redurl;
}
-----
よろしくお願いします。
0226223
2006/12/08(金) 16:13:02ID:???サーバの設定により、設定ファイルのパスをフルパスで設定する必要があったようです。
お騒がせ&スレ汚しすみませんでした。。。
0228nobodyさん
2006/12/09(土) 03:02:11ID:MKj32g5Xperlのセッション管理について教えてください。
CGI::Sessionモジュールでセッション管理を行おうと思っているのですが、このソースでセッションがブラウザに表示されるのですが、
セッションが/cgi-bin/sessionフォルダに保存されません。
コマンドラインで perl session.cgiと実行すると正常にセッションが保存されます。
どなたか解決法教えて頂けませんか。
session.cgi
#!/usr/bin/perl
use strict;
use CGI;
use CGI::Session;
my $cgi=new CGI;
my $session=CGI::Session->new(undef,$cgi,{Directory=>'./session'});
$session->expire('+10m');
my $cookie=$cgi->cookie(-name=>"CGISID",
-value=>$session->id(),
-expires=>"+30m");
print $cgi->header(-charset=>'euc-jp',
-cookie=>$cookie),
$cgi->start_html('セッションテスト'),
$cgi->h1($session->id);
print $cgi->end_html;
コマンドラインで perl session.cgiと実行するとセッションIDが作成されますが、ブラウザで実行するとなぜか生成されません。
どなたか教えて頂けませんか。
0229nobodyさん
2006/12/09(土) 03:05:44ID:MKj32g5Xブラウザだとセッションが保存されなくて困っています。
■ このスレッドは過去ログ倉庫に格納されています