【Perl】初心者コーナー Part19
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
03/01/11 13:52ID:???1:自分はこう言う事がしたい。
2:それでこんな風にやってみたが・・・
3:それだとこんなエラーが出て上手く行かなかった。
1と3が無いと誰も答えられないよ。
良い回答は良い質問から。一緒に勉強しましょう。
あとは>>2-10にまかせた。
013485
03/01/15 12:12ID:lPFUjXcRありがとうございます。
参照は初級者向けじゃないみたいで、例文に参照以外の
わからない箇所が多いので地道に勉強中。
ソース丸写し以外で使えるよう頑張ります。
0135山崎渉
03/01/15 13:31ID:???0136nobodyさん
03/01/15 14:07ID:???新たなPATHを追加したいと思ったんですけど
$ENV{'PATH'} .= ';c:\hogehoge';
ではうまく行きませんでした どうやればいいのでしょうか?
0137nobodyさん
03/01/15 15:38ID:5j+QQZeA色んなアカウントに送られてきたメールを片っ端からDBに登録したいのです。
なんかいい参考書やサイトを知りませんか?
よろしくおながいしますm(_ _)m
0138vvv
03/01/15 15:42ID:ZNHQB8hs★YAHOOOプロフィール★
0140nobodyさん
03/01/15 19:13ID:POOF/+eY下記の場合、どちらが効率的なのでしょう?
1.例えばデータファイルを一つにまとめ、
登録NO<>カテゴリ<>データ
などと登録する方法
2.データファイルをカテゴリ毎に、
data1.log
data2.log ・・・
等と1カテゴリで1データファイルとする。
一つのデータファイルにまとめるとファイルが大きくなってしまい、
カテゴリ毎に分ける方が良い様な気もするのですが、
実際の所はどうなのでしょうか?
サーバー付加の大小の観点からも御指導頂ければ幸いです。
0141nobodyさん
03/01/15 20:20ID:mlzRLcDEじゃ二次元テーブルってできないのですか?
アルゴリズムを教えてください。
0142nobodyさん
03/01/15 20:23ID:???すいません、二次元配列で検索した直ぐに分かりました・・・
はぁ・・・容易にはできないのですね。がんばって作ります。
014358
03/01/15 21:20ID:???print $tbl[100][100];
0145144
03/01/15 23:45ID:???リストの二次元配列だから面倒だわ、忘れてくれぃ。
0146nobodyさん
03/01/16 07:53ID:RDhobq0Jっていうのがあるのですがこの"[]"は何をやってるのですか?
0147nobodyさん
03/01/16 13:09ID:???http://www.kt.rim.or.jp/~kbk/perl5.005/perlref.html
http://www.kt.rim.or.jp/~kbk/perl5.005/perllol.html
とにかく全部読め。話はそれからだ。
0148nobody
03/01/16 19:36ID:6WICp0JYそこで、それらを結合するために
$body = '<body bgcolor="'.$bgcolor.'" background="'.$background.'" text="'.$text.'" link="'.$link.' " vlink="'.$vlink.'" alink="'.$alink.'">';
と書いたのですが、なぜか$bodyが空文字になってしまいます。
超初歩だとは思いますがどなたか解決法を教えてくださらないでしょうか。
0149nobodyさん
03/01/16 19:43ID:???$bodyが消える理由はわからんが。
スコープ外とかいうオチじゃないかな?
0151nobodyさん
03/01/16 20:46ID:???0154nobodyさん
03/01/16 21:31ID:rmmrK9en0155 ◆ZnBI2EKkq.
03/01/16 21:59ID:4OjEZO2Wmy $expires = shift;
・・・
if($expires > 0) {
グリニッジ標準時の文字列を作って
}
print "Set-Cookie: ・・・
とやっているのですが $expiresには何が入って
どういう意味で使ってるかわかりません。
教えて下さい。よろしくお願いします。
0156nobodyさん
03/01/16 22:27ID:t/gkHHSAexpireの意味知ってますか?
クッキーの有効期限設定してるんだろ
expireなしなら、セッション間のみ有効なクッキー
CGIの話ね
0157nobody
03/01/16 22:30ID:6WICp0JYありがとうございました。
それをコピペしたら普通にできました。
原因はじっくり解明したいと思います…。
0158nobodyさん
03/01/16 22:45ID:Tl7JXy0hほとんどのサイトでは
use strict 使う
-w スイッチ使う
グローバル変数をなるべく使わないようにする
/o スイッチ使わない
くらいしか書いてない。
なのに、この通りやってもなんか銚子が悪い。
mod_perl で動かすときって何か他にやらなきゃいけないことってあるん?
例えば eval 使ってはだめとか、
オブジェクトはちゃんとDESTORYしないとだめとか。
0159nobodyさん
03/01/16 22:49ID:rmmrK9en0160nobodyさん
03/01/17 00:43ID:???その中にある hoge 言う文字がいくつあるかカウントしたいんですが
どうすればいいんでしょう?
open (HOGE,"hoge.txt");
?????
close(HOGE);
0161nobodyさん
03/01/17 01:18ID:???hogeがどんな風に入っているかで変わってくる。
一つの行にhogeが0か1個しか入っていないことが保証されているならば、
open(HOGE, 'hoge.txt');
@hoge = grep { /hoge/ } <IN>;
close(HOGE);
$count_hoge = scalar @hoge;
全く保証されていないならば、
open(HOGE, 'hoge.txt');
$hoge = join('', <IN>);
close(HOGE);
$count_hoge = $hoge =~ s/hoge//g;
これでいいような気がする。
0162nobodyさん
03/01/17 02:19ID:???0164nobodyさん
03/01/17 15:03ID:l3uVFji3メソッド(サブルーチン)の引数が正しくない
(引数の数が正しくないとか、数字であるべきところが文字列だったとか)
の場合、どうすればいいのでしょうか?
エラーを表示?
エラーを返して終了?
単にreturn?
0167nobodyさん
03/01/17 18:46ID:95w9V4FK設置しようとしています。
とりあえず入り口は出来たのですが、肝心の出口がどうやら設定がおかしい
ようで"画像をアップできません"とエラーが出ます。
恐らく下記の設定方法を間違えているのでエラーが出るのだと思います。
# アップロードディレクトリ
# → パスの最後は / で終わること
# → フルパスだと / から記述する
$ImgDir = "?????.hp.infoseek.co.jp/clip/img/";
# アップロードディレクトリのURLパス
# → パスの最後は / で終わること
$ImgUrl = "http://?????.hp.infoseek.co.jp/clip/img/";
色々調べたのですが、ここの部分だけハッキリ答えが出せません。
どうか出口の設定方法を教えてください。
0168nobodyさん
03/01/17 19:00ID:zt5lo6Y5今どう設定してあってエラーでてるの?
てか何を悩んでるの?
0169nobodyさん
03/01/17 19:01ID:???2:それでこんな風にやってみたが・・・
3:それだとこんなエラーが出て上手く行かなかった。
て書いてくれ。
下げてみるテスト(鬱
0170nobodyさん
03/01/17 19:10ID:mT3lwUSe壊れて0バイトになってしまいます。
使用ソフトはTransmitとNetFinderです。
アップするファイルはCGIのためアスキーモードで転送しています。
でもファイルが壊れてしまいます。
9だとうまくアップできるんですが・・・
どなたか詳しい人教えて下さい
0171nobodyさん
03/01/17 19:55ID:???my $str;
my $file = 'hoge.txt';
my $hoge_count = 0;
open TXT, $file or die $!;
read TXT, $str, -s $file;
close TXT;
while($str =~ m/hoge/g){
$hoge_count++
}
print $hoge_count, "\n";
0172nobodyさん
03/01/17 20:06ID:???ファイルがかなり大きくなってきて
ファイルを全て読み込まず
ファイルの末尾から一行ずつ読み込みたいのですが、
どうしたらいいのでしょうか?
0174nobodyさん
03/01/17 20:26ID:???0175nobodyさん
03/01/17 20:27ID:???# アップロードディレクトリ
# → パスの最後は / で終わること
# → フルパスだと / から記述する
$ImgDir = "/clip/img/";
# アップロードディレクトリのURLパス
# → パスの最後は / で終わること
$ImgUrl = "/clip/img/";
で、いんでないの?
>>170
丸痴君ね。
http://pc.2ch.net/test/read.cgi/mac/1042606577/267
>>172
過去ログに似たようなのがあったような記憶が・・・
0177173
03/01/17 20:31ID:???tailを知っていたのなら、ソース読んじゃえばいいのに。
全部読み込んでいるよ。まあ、細かく言えばPerlのようには
読んではいないけど、全てを読み込まないのに最後を知る
方法はないです。
0178nobodyさん
03/01/17 20:44ID:GSBryIjf0179173
03/01/17 20:47ID:???0180nobodyさん
03/01/17 20:56ID:GSBryIjf0181175
03/01/17 21:02ID:???# アップロードディレクトリのURLパス
# → パスの最後は / で終わること
$ImgUrl = "$ENV{'HTTP_HOST'}/clip/img/";
スマソ
ってこれでいいのか?(スクリプトが別鯖にある場合は不可)
0182143
03/01/17 21:12ID:???その文だと{}で無名のハッシュをつくり、
\でリファレンスしませんか?
(\@a)->[1];がまっとう(?)ですので、@a->[1];は使うべきでは無いようですね。
ありがとうございました。
0185nobodyさん
03/01/17 23:14ID:xM0Mt5EAclass Person {
int age;
String name, tel;
URL homepage;
}
みたいなメンバ変数の型みたいな考え方無しのオブジェクト指向って
のが理解できなくて立ち往生してるのですが、どうやればすんなり
受け入れられますか?
0186nobodyさん
03/01/17 23:18ID:???全角英字DQN?
0187超初心者
03/01/17 23:28ID:sm0odS2/配布のものを使おうとしたらうまくいきません。
ランキングのCGIなのですが
# IN投票の際にカウントを認めるREFERER値 (以前のページのURL)
$check_referer1 = 'http://meso.tv/r/rank.cgi';
$check_referer2 = 'http://meso.tv/r/rank.cgi';
$check_referer3 = 'http://meso.tv/r/rank.cgi';
のURLの部分にはどういうURLを入れたらいいのですか?
0188nobodyさん
03/01/17 23:37ID:???そのCGIスクリプトの説明を読むか。
配布されているサイトで聞いてください。
ここはPerlのコーディングの話をするスレッドです。
0191nobodyさん
03/01/17 23:57ID:???親切な人が説明してくれても分からなかったらしょうがないでしょ。
0192185
03/01/18 00:07ID:???例えば
$self->{'age'}
って変数があっても、
$self->{'age'}='nobodyさん' とか $self->{'age'}='http://www.2ch.net'
ってすることができるわけで、
いくつかモジュールを読んでみたけど
たんにメソッドの詰め合わせ的な意味しかないようが気がするんです。
0193nobodyさん
03/01/18 00:20ID:O9FxKTGG0194nobodyさん
03/01/18 00:22ID:???探すだけならスレ違い。
ここはコーディングの相談所。
>1読め。
0195 ◆PxAOHU.zVE
03/01/18 01:56ID:55Z6A3Vx5.8のAttributeってまだ使えないのかな...
このへん?
http://search.cpan.org/author/ABERGMAN/Attribute-Handlers-0.78/lib/Attribute/Handlers.pm
0196nobodyさん
03/01/18 08:30ID:eKp44Q6BPerl6 で型が出来るだろ。
それでいいじゃないか。
0197びびった
03/01/18 09:14ID:x+/Sd8AAhttp://click.dtiserv2.com/Click/1-45-2963
0198nobodyさん
03/01/18 14:51ID:???perl Builderぐらいしかないのでしょうか?
0199HOGE
03/01/18 15:51ID:5ALQn0gpとても困っています。どうすれば良いか教えてください。
#!usr/local/perl
#in hoge.cgi
my $hoge = 'hoge';
require './hoge.tmpl';
#in hoge.tmpl
print <<HOEG
Content-type: text/html
<h1>$hoge</h1>;
HOGE
1;
0200nobodyさん
03/01/18 15:56ID:???2:それでこんな風にやってみたが・・・
3:それだとこんなエラーが出て上手く行かなかった。
1と3が無いと誰も答えられないよ。
良い回答は良い質問から。一緒に勉強しましょう。
0201HOGE
03/01/18 16:05ID:5ALQn0gp2:Webで調べていると、require文を使えば、
「その場所にかかれているかのように
スクリプトを取り込むことができる」と知りました。
3:でも、$hogeの部分は空のままです。
require文の解釈が間違っていることは自覚しています。
名前空間のせいで、変数が受け渡されていないのかもしれません。
しかし、今の私には具体的にどうすればいいかがわかりません。
質問に2レスもつかってすみません。どうか教えてください。
0202vvv
03/01/18 16:09ID:+GEyyv8c★YAHOOOプロフィール★
0204nobodyさん
03/01/18 17:08ID:lJXENDzT和鳥の無料WebスペースにCGIのカウンタを置こうと思い、探して来ました。
見つけてきたそのCGIは、説明書きによるとcgi-bin以下に画像ファイルを置いて、
それを引っ張り出してくるものらしい。
けど、和鳥には、「セキュリティ上の都合から、cgi-bin以下に画像ファイルを置いても
表示されないので、別の場所に置いてくれ。」との旨が書いてあり、そのままではうまくいかなかった。
そこで、画像ディレクトリを別の場所へ移したわけなのですが、、、えーと、そしたら
「$imgdir = './Gif/';」の部分は、このままではダメなのでしょうか?
試しにそのままやってみたらエラーになったので、省略せずにURLそのまま入れてみたりしたのですが、
やはりだめでした。
画像自体はちゃんとうpされていたので、私的にはその部分になにか間違いがあるのかなと
思ったのですが。。
どしたら良いでしょうか。すいません、どなたか教えて下さいです。
0205nobodyさん
03/01/18 17:11ID:???1:パスが間違っている(HTMLの勉強しろ)
2:パーミッションが間違っている(パーミッションの勉強しろ)
3:そもそもperlの話じゃないからココではスレ違い(常識を勉強しろ)
4:配布元か、和鳥スレで聞け
0206nobodyさん
03/01/18 17:15ID:???#!usr/local/perl も不安といえば不安だな
>>204
URLで入れたら動きそうな気がするが、大文字小文字は間違ってない?
ここで言ってるURLは http:// から始まるやつね
0208204
03/01/18 17:26ID:???エラーフラグ立てた上で、オブジェクトを返しておいて
is_error,error_message等のメソッドを用意するってのは?
0213nobodyさん
03/01/19 06:35ID:5v4SEFP4@hoge$iっていう配列を使いたいのですがうまくいきません。
0214nobodyさん
03/01/19 06:49ID:???@{$i}
0216nobodyさん
03/01/19 08:26ID:???@{"hoge$i"}
0217nobodyさん
03/01/19 14:09ID:???その場合、これを書くとエラーが出なくなる
no strict 'refs';
0218貧乏パーラー
03/01/19 14:37ID:???>-----------------------------------------------
>・読み出しも外部からのインクルード式で可能とした
>・処理速度向上策バイトコード化した一連の定義を繰り返しで処理から
> do{}でそれぞれくくって一つのブロックとして一気にバイトコードに展開版に変更。
>・出力スキップSWにて定義中の式の組み方でコンバートバージョンにも出来るcnv.txt
> ○のオーダはXXXX.txtで処理する。
> 前回俺が出した集計項目も網羅して7日間のデータを/m指定で
>各人分散し集計を起動する事にする.
>その間に出力CSVを合成するツール作成の事。(Excelでやれってかぁ?)
>-----------------------------------------------
>て訳で連日プログラムして疲れたよ。今晩ラーメンでも食べに行こうか?
何をやったのかさっぱりだけど、、、
なんか私には解らない凄いプログラム作ったのかな?
でも歳も歳なんだから無理しないようにね!
ラーメンか〜良いね。でも肉が食べたいな〜
わがままです。。。
0219質問させてください。
03/01/19 15:30ID:???CGI::Liteを継承して、より直感的なクエリ取得を行えるモジュールを書こうとしているのですが、
キーと値が対になっていないクエリに対応する部分で困っています。
通常、クエリは正規表現風に書くと、m/KEY=VALUE(&KEY=VALUE)+/
という形式になっていると思うのですが、
http://localhost/cgi-bin/hoge.cgi?KEY=VALUE (通常のケース。無問題)
http://localhost/cgi-bin/hoge.cgi?VALUE
↑
この二番めのケースで、簡単にVALUEを取得する方法がわからないのです。。。
とりあえず、「パラメータが一種類で値が無いケース」を想定し、
以下のようにやってみました。
(前略)
my $param = $this->parse_form_data();
my @key;
print $key[0] if (((@key) = (keys %{ $param })) == 1 && $param->{$key[0]} eq '');
ただ、これだと
http://localhost/cgi-bin/hoge.cgi?VALUE
http://localhost/cgi-bin/hoge.cgi?KEY=
二つのケースに反応してしまうため、望んだ結果にはなりませんでした。
何かKEYと対になっていないVALUEを取得するための、
スマートな方法はありませんでしょうか。
0220nobodyさん
03/01/19 16:17ID:???...
}
0222nobodyさん
03/01/19 17:24ID:???0223nobodyさん
03/01/19 17:26ID:YTKbQL3jサイトA(私が作成するサイト)にあるCGIページにアクセスすると
別のサーバのサイトBにあるファイルをそのまま読み込んで表示するCGIを作ろうと
しています。
(もちろん、サイトBの管理者の許可はあります。)
その準備として次のものをつくったのですが、
ローカルで実行するとうまくいくのですが、サーバーにアップすると動きません。
ローカルホストのところを
自分のPCのものにしても、サイトAのホスト名をいれてもうまく動きません。
原因がわかるでしょうか?
お願いいたします。
#!/usr/local/bin/perl
use Net::hostent;
use Socket;
$lodalhost='hogehoge.ne.jp';#ローカルホスト名
$remotehost='www.xxxx.com';#リモートホスト
$page = 'http://www.xxxx.com/index.html';#得たいページのURL
0224続き
03/01/19 17:26ID:YTKbQL3j$lh = gethost($localhost);
$rh = gethost($remotehost);
$proto = getprotobyname('tcp');
socket(SH,AF_INET,SOCK_STREAM,$proto) or print "error\n";
$port = getservbyname('http','tcp');
$socket_template = 'S n a4 x8';
$localhost_port = pack($socket_template,AF_INET,0,$lh->addr);
$remotehost_port = pack($socket_template,AF_INET,$port,$rh->addr);
bind(SH,$localhost_port) or print "error\n";
connect(SH,$remotehost_port) or print "error\n";
select SH;
$|=1;
print SH "GET $page\n";#GETをつかってリクエストを送信する。
#得られたページの内容を@HTMLに代入する
while(<SH>){
push @HTML,$_;
}
close SH;
select STDOUT;
foreach(@HTML){
print $_;
}
exit;
0225貧乏パーラー
03/01/19 17:47ID:???>print SH "GET $page\n";#GETをつかってリクエストを送信する。
少なくともリクエストヘッダの終了は\n\nで終わらなきゃならいないと思うが
ちなみに他のヘッダ情報は要らないのかな?
例
GET /test/read.cgi/company/1034689226/l50 HTTP/1.0
If-Modified-Since: Mon, 13 Jan 2003 17:35:10 GMT
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.m
s-powerpoint, application/vnd.ms-excel, application/msword, */*
Accept-Language: ja
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)
Host: tmp.2ch.net
0226貧乏パーラー
03/01/19 17:51ID:???例えば2chのちくり板のサーバはGETリクエストヘッダのHost:や
POSTのRefere:中のホスト名をチェックしているからね。
0227nobodyさん
03/01/19 18:20ID:xgcJy6Dhcgiの画像アップ形式掲示板ってありますよね?
サーバーの容量もあるとは思いますが、大体みなさん設置
するに当たって"最大投稿データ量"ってどれくらいに設定されてますか?
後"最大投稿数"はどれくらいで適切なんですか?
変な質問ですみません。
0228bbb
03/01/19 18:44ID:TK7ESc1CYAHOOO情報
0230nobodyさん
03/01/19 22:37ID:hs+tYJ37cgi-binの中にhtmlファイルを入れると呼び出すことができません。
また、public.htmlの下にhtmlファイルを置き、cgiからのパスを修正しても"ファイルがオープンできません"とでます。
こういうサーバではhtmlを使うcgiは置けないのでしょうか?
0232nobodyさん
03/01/19 23:44ID:???PerlをつかったCGIならCGIの質問だってOKだろ。
PerlからMySQL呼び出してどーこーするのっていいんじゃないの。
まぁ230の質問はPerlともCGIとも直接関係なさそうだが。
■ このスレッドは過去ログ倉庫に格納されています