【Perl】初心者コーナー Part12
レス数が950を超えています。1000を超えると書き込みができなくなります。
0001nobodyさん
02/04/27 23:17ID:1NNXdNspいらっしゃーい、Perlの「コーディング」で困ってる人のスレです。
1:自分はこう言う事がしたい。
2:それでこんな風にやってみたが・・・
3:それだとこんなエラーが出て上手く行かなかった。
1と3が無いと誰も答えられないよ、良い回答は良い質問から。
一緒に勉強しましょう。
CGIの質問は【CGIだけどなんか質問ある Pert 6 】
http://pc.2ch.net/test/read.cgi/php/1019561283/
参考書籍の話題は【【Perl,CGI】参考書籍 第2版 】
http://pc.2ch.net/test/read.cgi/php/988809842/
その他の雑多な話題は、【CGIに依存しないPerlの話題一般】
http://pc.2ch.net/test/read.cgi/php/991313362/
スクリプトの改造依頼は 【スクリプト改造工房 Part4 】
http://pc.2ch.net/test/read.cgi/php/1012839651/
過去ログ、その他の役立ち情報は>>2-10を見よう。
0887nobodyさん
02/05/24 18:42ID:???環境変数を色々使えばできるとは思うが、情報不足で答えられん。
環境変数も鯖によっては取得できなかったりもするし。
0888nobodyさん
02/05/24 18:45ID:???全自動でやることを考えるよりも、
$local_path = '..';
$full_path = 'http://〜〜/cgi-bin';
$path =~ s/$local_path/$full_path/;
と手入力でやった方が簡単だぞ。
スクリプトを配布するなら別だが、それだと環境変数でのやり方は鯖によって
可不可が変わるから難しいと言っておく。
0889885
02/05/24 18:57ID:???えっと、Socket使って他サーバーにあるHTML読み込んでそこにあるタグから
アドレスを抜き取ってファイルをダウンロードしてみようとか考えて、
http://〜の形式のアドレスではできたのですが、相対パスはいろいろ考えてみたのですが
よくわからないので相談してみたんです。
0890nobodyさん
02/05/24 19:06ID:???ソケットを使うって事はその基点となるURLはわかってるわけだろ?
だとしたら、そこから「../があったらURLを削る」、「./だったら同じフォルダ」で
URL変換を入れればいいだけじゃないのか?
0891nobodyさん
02/05/24 22:19ID:???・HTML読む
・<base>, <meta http-equiv="base">があったらそれ、無い場合はリクエストからベースURLをつくる。
・相対パスだったら連結する。.や..はhttpサーバがよきにはからってくれる。
0892nobodyさん
02/05/24 22:32ID:ftO6wAMUローカルサーバではうまくいってます。
借りてる鯖の説明にはSSIは使えるとかいてありますが、
普通のhtmlファイルやテキストファイルをインクルードしても全く反応しません。
本当にSSI使えるのかな・・・・。
0893nobodyさん
02/05/24 23:01ID:???<!-- #include virtual="./aaa.cgi" --> を
<!--#include virtual="./aaa.cgi"--> にしたら動いたりしてな
0896nobodyさん
02/05/25 03:06ID:???もし配列のデリファレンスが判らないのならば、
@{$array[0][0]}のように、@{}の中にリファレンスを書けばいいだろう。
File::Pathのrmtreeがわからないなら実際にドキュメント読んでまず試せ。
0897nobodyさん
02/05/25 03:32ID:???ネエYOとWarningが出た。CPANへ探しに行ったが見あたらん。
何ですのコレ。make test に問題が出るだけで、そのまま使え
そうな気もしますが。
0898nobodyさん
02/05/25 03:41ID:???http://search.cpan.org/doc/MSCHWERN/Test-Simple-0.44/lib/Test/More.pm
0899nobodyさん
02/05/25 03:59ID:???んやね。一生懸命、目で探してますた。ありが�d
0900nobodyさん
02/05/25 05:07ID:???0901nobodyさん
02/05/25 07:46ID:/kHlEeLMサブルーチン内からmain内でmy宣言した変数を
参照するにはどうすれば良いのでしょう。
引数で参照渡しするしかない・・・?
それとも、これってmy宣言の意味わかってない・・・?
0902nobodyさん
02/05/25 09:39ID:???>引数で参照渡しするしかない・・・?
>それとも、これってmy宣言の意味わかってない・・・?
その通り。my 宣言されたもんはlocal変数だと思ってください
0903nobodyさん
02/05/25 09:45ID:XVu0yEmF実行結果を表示させようとしています。
str1 = URL_CGI + "?" + form.namae.toString()+ ...略;
window.open(str1, ...略);
普通にフォームのactionでこのCGIを呼び出すと、
新しいウィンドウのロケーションバーには引数無しのアドレスが
表示されますが、
http://www.abc.jp/abc.cgi
上の方法で呼び出すと引数付きのダラダラと長いアドレスが
入ってしまいます。
http://www.abc.jp/abc.cgi?data:namae=山田太郎&toshi=...略
この無駄に表示される引数の部分を無くしたいのですが、
どうすれば良いでしょうか?
「JAVAscriptで新しいウィンドウを開き..」の部分は変更不可です。
どうか皆さんの知恵をお貸し下さい。
0904nobodyさん
02/05/25 09:54ID:???無理。
0906903
02/05/25 10:33ID:XVu0yEmFPerlCGI側の操作でもなんとかならないかなと思ったんです。
一旦新しいウィンドウを開いておいてから
移動とかどうとか・・・駄目ですか?
では、アプローチを変えます。
903の挙動が何故問題になるかというと、
cookieが複数になってしまうからなんです。
これを統一しようと思ったらどうすればよいのでしょう? なにとぞ・・・
0907nobodyさん
02/05/25 10:51ID:???perl以前の問題。
CGIで〜〜な事がしたい。perlではどうするのでしょう? なら話はわかるが。
〜〜のところをはっきりさせてから出直しな。
0908nobodyさん
02/05/25 13:31ID:???とかで取り出す変数をそのループの外で使う場合
はどうすれば良いですか?
0909nobodyさん
02/05/25 16:20ID:???0910nobodyさん
02/05/25 17:24ID:???foreach (@data){
if(/<a href="(.*?\.($ext))">/i){
print $1;
--処理--
}
if(/<img src="(.*?\.($ext))">/i){
print$1;
--処理--
}
}
※@dataはHTMLのソースが入っている。$extは拡張子
とやっていて拡張子をgif、jpgなどですると
<a href="hoge/hoge.html"><img src="hoge.jpg"></a>と言う形式の時に
出力が hoge/hoge.html"><img src="hoge.jpg と出力されてしまいます。
拡張子が(この場合は)htmlで試すと大丈夫なので自分でも解決方法を考えても
わからなかったのでここで質問させてもらいに来ました。
0911アルバムモナ
02/05/25 17:31ID:yOCzjbychttp://isweb37.infoseek.co.jp/computer/man_king/
モナー写真いっぱいほしぃモナー
ところでどなたかインフォシーク鯖の詳しい環境を知っておられる方いませんでしょうか?
JSPが使えるかどうかとかしりたいです。
use LWP::Simple;
$page = http://www.abc.jp/abc.cgi?data:namae=山田太郎&toshi=...略";
$doc = get $URL;
print $doc;
とかいうのはダメなのかな?
0916お願いします
02/05/26 02:39ID:WlbJvt440917nobodyさん
02/05/26 02:45ID:cGfFiopg$hoge =~ s/[\r\n]|\r|\n//g;
う〜ん、美しくない。
0919教えて君
02/05/26 03:10ID:???表示されません。ちなみにniftyです。niftyは少し特殊だと
聞いたのですが、どこのスレで聞けばいいでしょうか?
とりあえず上の方に初心者というのがあるこのスレで
聞いてみました。よろしくお願いします。
初心者ですんません。
0920nobodyさん
02/05/26 03:28ID:???>いらっしゃーい、Perlの「コーディング」で困ってる人のスレです。
ここで聞いてください。
【初級】CGI総合スレッド@Web制作板
http://pc.2ch.net/test/read.cgi/hp/1016938825/l50
0921916
02/05/26 03:28ID:WlbJvt44出来た!ありがとー!
0922nobodyさん
02/05/26 16:46ID:CiF8CZ1Z前はそんなことなかったんですけど、どうしたら普通に開けますか?
0923(゚д゚)ウマー&rlo; (゚д゚)ーズマ
02/05/26 17:10ID:???0924スレッドストッパー&rlo;止停
02/05/26 17:12ID:???0925仕様書無しさん
02/05/26 20:00ID:???0926仕様書無しさん
02/05/26 20:02ID:???923と924はいったいなんなんだ〜?
2chがハクされてるの?
0927lo;
02/05/26 20:22ID:???ちょっとしたことをするだけでできるよ
0928nobodyさん
02/05/26 20:36ID:???0929(゚д゚)ウマー&rlo;(゚д゚)ーズマ
02/05/27 00:05ID:???0930&rlo;ぞいなてきで&rle
02/05/27 00:07ID:???0931&rlo;・・・たっまし&rle;
02/05/27 00:08ID:???0932仕様書lo;無しさん
02/05/27 00:54ID:???0933lo;・・・たっましle;
02/05/27 00:55ID:???知らなかった
0934nobodyさん
02/05/27 08:16ID:???0935nobodyさん
02/05/27 16:05ID:???今日気がついた。
0936nobodyさん
02/05/27 16:27ID:???という煽りレスの一つでもつけようとしたが、もしかしたら俺が知らないだけかもしれない、
と思って、ひとまず検索することにした。
するとどうだ、javeは存在するではないか。
http://www.jave.de/
あぶないあぶない。無知を晒す所だった。
俺もこのソフトでいっちょiアプリでも作ってみるか。
0937nobodyさん
02/05/27 20:23ID:HK5rJclO(自分のdocomoも弾かれてしまう)どこが間違ってるんでしょうか?
if ($ENV{'HTTP_USER_AGENT'} ne~ /DoCoMo/) {
print "Location: http://www.yahoo.co.jp/\n\n";
}else{
0938nobodyさん
02/05/27 20:38ID:???0939nobodyさん
02/05/27 20:58ID:3m1HaKVa使用法として、プログラム側で
$template->param(
HOME => $ENV{HOME},
PATH => $ENV{PATH},
);
みたく変数を用意して、HTMLまじりのテンプレート側で
My Home Directory is <TMPL_VAR NAME=HOME><br>
My Path is set to <TMPL_VAR NAME=PATH><br>
なんて使うんだけど、プログラム側で事前に用意した変数を
テンプレート側で使用しないと、何も出力されなくなるんです。
これを防ぐ方法か、もしくは適当な回避策って無いんでしょうか?
実際に使用してる方の意見が聞いてみたいです。
ちなみに現在は、不要な変数名が「BOOL」だとしたらテンプレート側で
<TMPL_IF BOOL><TMPL_ELSE></TMPL_IF>
なんてお茶を濁しています
0940nobodyさん
02/05/27 21:46ID:???何がしたいのか分からん。
宣言をしていない変数を参照すれば空白であってしかるべきだと思うのだが。
お茶の濁し方も意味不明。それじゃどうやっても空文字列にしかならんだろ。
0941nobodyさん
02/05/27 22:17ID:???(標準、エラー出力を文字列かしたいって事っす)
「うまい」方法教えてください。
「よろしく、おながいします」
0942nobodyさん
02/05/27 22:34ID:???悪い。ネタの相手してる暇はねぇんだわ。
0943942
02/05/27 22:49ID:vs9qORcp教える気ねぇ〜なら、すっこんでおつぅ〜の、わかったか?
0945nobodyさん
02/05/27 22:56ID:???悪質な質問->DQN逝ってよし!->スキルねぇやつはすっこんでろ!
この三連コンボはジエンですか?
0947nobodyさん
02/05/27 23:40ID:???> 何も出力されなくなるんです。
STDERR にエラー吐き出されるんで、httpdのエラーログ見なよ。
本題は、ドキュメントを良く読んで、new で die_on_bad_params => 0 しる。
で、エラー無視するハズだがなあ。俺はやったこと無いけど、
デバッグする時なんかは、簡単にコメントにしてるな。
$template->param(
HOME => $ENV{HOME},
PATH => $ENV{PATH},
#BOOL => $fuga
);
0948942
02/05/28 00:12ID:???ひきつづき、「よろしくおながいします。」
0949937
02/05/28 01:10ID:yZ0xvPBxどうしてもdocomoが弾かれてしまう。どこが間違ってるんでしょうか?
if ($ENV{'HTTP_USER_AGENT'} ne ~ /DoCoMo/) {
print "Location: http://www.yahoo.co.jp/\n\n";
}else{
0950nobodyさん
02/05/28 01:12ID:???正規表現でかわいい顔が出た時〜
0952nobodyさん
02/05/28 01:32ID:???まずは正規表現の書き方から覚えよう。
if ($ENV{'HTTP_USER_AGENT'} ne ~ /DoCoMo/) {
だと
if ($ENV{'HTTP_USER_AGENT'} ne ($_ =~ /DoCoMo/) ) {
になるんじゃないかな?
まず一致する事はないね。
0953nobodyさん
02/05/28 01:48ID:???正規表現の書き方はおかしくねえだろ。おかしいのは、パターン
結合演算子の書き方。つか、キミ自身が正規表現とは何たるかを
勉強した方が良いとちゃう?
0954nobodyさん
02/05/28 01:56ID:???確かに色々間違ってた模様。
ありがとう。
ttp://a414s1.it.nanzan-u.ac.jp/textbook/text082100-2/node81.html
こんなの見つけて色々勉強になった。
漏れには結構基本的な部分が抜けてた模様。
0955nobodyさん
02/05/28 02:41ID:???そのリンク先のパターン結合演算子の説明おかしくないか?
俺の知らない、Perl得意の省略形かと一瞬思っっちまったが。
なんで=と!の単項やねん?もっと、まともなサイトを探すのが吉。
0956nobodyさん
02/05/28 03:16ID:???鵜呑みにするところだった…
グーグル様で検索して最初にひっかかった物だからつい…
0957!~ 使え!コゾウ
02/05/28 03:58ID:???if ( $ENV{'HTTP_USER_AGENT'} !~ /DoCoMo/ ) {
print "DoCoMo 逝ってヨシ!\n";
}
0958nobodyさん
02/05/28 08:36ID:???「名前・メルアド・URL・本文」以外に年齢とか趣味とかの
項目を追加したいと思います。どうすればいいのでしょうか?
テスト用のサンプルとしてKENTさんのASKA BBSを使ってます。
http://www.kent-web.com/bbs/sample/aska.cgi
0959nobodyさん
02/05/28 08:43ID:???ttp://pc.2ch.net/test/read.cgi/php/1012839651/
スクリプト改造工房 Part4
ここに行けばいい。
0960nobodyさん
02/05/28 09:05ID:5/swSF0dREADで読んできた文字列データ(50kくらい)に含まれる特定の文字列(複数個)を
検索しようとしているのですが、うまく行きません・・。
if(VALUE =~ /PATTERN/){
だと一度に1つしか検索できないし
while(VALUE =~ /PATTERN/){
だと同じ部分でmatchしつづけてします。。
0961nobodyさん
02/05/28 09:17ID:???検索した後どうしたいかにもよるが。
VALUE =~ /PATTERN/g;
0962960
02/05/28 09:41ID:???ありがとうござます。自分の持ってるperl初心者本に詳しく書いて無かった事もあり、
optionについて勉強不足でした。助かりました。
0963nobodyさん
02/05/28 09:59ID:???$str ne ~ /pattern/
これは
$str ne ($_ =~ /pattern/)
じゃなくて
$str ne ~ ($_ =~ /pattern/)
だろ。誰か気付けよ。
0964nobodyさん
02/05/28 17:29ID:???配列Aと配列Bがあったとします。
@A = (1,2,3,4)
@B = (a,b,c,d)
これを1-a 2-b 3-c 4-dと表記しようと思います。
foreach $X(@A){ print "$X";
foreach $Y(@B){ print "-$Y";
} }
この書き方だと、
1-a-b-c-d 2-a-b-c-d・・・と言うような結果になりますよね?
二つの配列の内容を同時に一回ずつ表記する方法はないものでしょうか?
0965nobodyさん
02/05/28 17:31ID:???よろしくお願いします。
0966nobodyさん
02/05/28 17:39ID:???print "$A[$i]-$B[$i] ";
}
これじゃダメなの?
0967だめぽ
02/05/28 18:04ID:NVFnKI0Cアクセス解析に今日と昨日のカウンタをつけたいです。
ログのフォーマット
アクセス通し番号<>日付<>IP<> ・・・
日付は 2002/05/28(火) 18:00 という書式です。
別にカウンタ用ファイルを用意すれば可能ですが、ログをひとつにまとめたいのです。
やろうとすると一日のとき前月の日付がいろいろ変わるのですごい大変でした。。
お願いします。m(_ _)m
0968nobodyさん
02/05/28 18:10ID:???前日の日付の求め方を聞きたいのかな?
それならlocaltime(time-24*3600);で出せばいいだけだけど。
でも、そんな事をするくらいなら、ログファイルの中に日付だけのデータを作った方が楽だと思う。
0969だめぽ
02/05/28 18:22ID:???ありがとうございます。
>localtime(time-24*3600);
これでできそうな感じがするので、やてみます。m(_ _)m
0970nobodyさん
02/05/28 21:56ID:???0971nobodyさん
02/05/28 22:53ID:IYnV1U6d0972nobodyさん
02/05/28 22:57ID:???if($a == int($a)){
0973(・v・)
02/05/29 03:55ID:???>>967 は 2002/05/28(火) 18:00 ←こんな書式の日時文字列を
time とかで返される様な値に変換したいのカナ?
at-works の access log のログファイルみたいだ…
俺、これ改造して普通に time 値が返すような値を
カキコするように改造したが…
0974811
02/05/29 19:35ID:???ウインドウのタイトルを取得したいんですが。
CGIじゃなくてローカルで使います。
0975nobodyさん
02/05/29 21:58ID:???bbb<>2
ccc<>3
これを
2番目の数が多い順にソートしたいんですが、
どうすればいいのでしょう?
0976nobodyさん
02/05/29 23:44ID:BqVeUZ/KWin::API
ここにちょっとだけ使い方が載ってました。
http://member.nifty.ne.jp/hippo2000/perltips/perllha.htm
>>975
Schwartzian Transform
http://www.din.or.jp/~ohzaki/perl.htm#SortST
で、質問なんですが、
tieの使い方がいまいち判らないのですが、
「こういう時に使うと効果的」というサンプルありましたら教えてください。
0977スレッドストッパー&rlo;止停
02/05/29 23:51ID:???適当に流しすぎ、、、。
0978976
02/05/29 23:52ID:BqVeUZ/K今はDB_File.pmを使う時にだけtieを使ってます。
例えばFETCHメソッドはtieで関連付けた変数から値を取り出す時に自動的に呼ばれる、
というのは判るんですが、それがどういう利点を持つのかが判りません。
0980nobodyさん
02/05/30 01:02ID:???利点って・・・FETCHとかSTOREがなかったらtieをつかえへんやん
例えばだけど、Tie::Fileってモジュールは配列をtieして、
ファイルの要素を配列の要素としてアクセスできるようにしてる。
my $this_is_the_first_line = $tied_file[ 0 ];
my $this_is_the_last_line = $tied_file[ $#tied_file ];
で、ここでFETCHがどう入ってくるかというと
1) 配列要素にアクセス
2) tieされているオブジェクトにFETCH()が呼ばれる
3) ファイルのn行目を読み込んで返す
という動作を行うわけ。だからインターフェースはあくまでも配列
なのに全然配列とは違う動きをさせられる。そういう時にtieを使う。
DB_Fileも同じ。本当はハッシュじゃないんだけどハッシュをアクセス
する時に裏側でフラットファイルデータベースのレコードにアクセスしてる
わけや。
0981nobodyさん
02/05/30 01:04ID:z8tD+2yUparlってナニ?
perlなら知ってるけど…
クソレスでスマソ(゚∀゚)!!!!
0982nobodyさん
02/05/30 02:14ID:9bTblmUwglobで返ってくるファイルのリストは、必ず順ソートされているものなのでしょうか?
ズブ初心者で申し訳ないす。
0984
02/05/30 04:15ID:rYtvxDASKeep-Alive: timeout=??
の??の部分はタイムアウトまでの秒数を表しているのは分かりますが、このタイム
をカウントし始めるのは何時なのでしょうか。ヘッダーを受け取った瞬間からなの
か、全てのデータを受信し終わった瞬間からなのか…ご教示お願いします。
レス数が950を超えています。1000を超えると書き込みができなくなります。