【Perl】初心者コーナー Part16
レス数が1000を超えています。これ以上書き込みはできません。
00013PIO ◆3pIoOHKo
02/09/15 15:11ID:???1:自分はこう言う事がしたい。
2:それでこんな風にやってみたが・・・
3:それだとこんなエラーが出て上手く行かなかった。
1と3が無いと誰も答えられないよ。
良い回答は良い質問から。一緒に勉強しましょう。
CGIだけど、なんか質問ある? Part 6 (その2)
http://pc.2ch.net/test/read.cgi/php/1025930486/
参考書籍の話題は【【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あたりを見よう。
00023PIO ◆3pIoOHKo
02/09/15 15:13ID:???Part1 http://tako.2ch.net/test/read.cgi?bbs=perl&key=957208980 参照不能
DAT: http://tako.2ch.net/perl/dat/957208980.dat
Part2 http://tako.2ch.net/test/read.cgi?bbs=perl&key=971817087 参照不能
DAT: http://tako.2ch.net/perl/dat/971817087.dat
Part3 http://tako.2ch.net/test/read.cgi?bbs=perl&key=979894521 参照不能
DAT: http://tako.2ch.net/perl/dat/979894521.dat
Part4 http://tako.2ch.net/test/read.cgi?bbs=perl&key=984430156 参照不能
DAT: http://tako.2ch.net/perl/dat/979894521.dat
Part5 http://pc.2ch.net/php/kako/988/988728069.html
Part6 http://pc.2ch.net/php/kako/996/996075607.html
Part7 http://pc.2ch.net/php/kako/1000/10002/1000267444.html
Part8 http://pc.2ch.net/php/kako/1003/10039/1003900311.html
Part9 http://pc.2ch.net/php/kako/1009/10095/1009549309.html
Part10 http://pc.2ch.net/php/kako/1014/10145/1014556702.html
Part11 http://pc.2ch.net/php/kako/1017/10172/1017201229.html
Part12 http://pc.2ch.net/php/kako/1019/10199/1019917048.html
Part13 http://pc.2ch.net/php/kako/1022/10227/1022731565.html
Part14 知らん
Part15 http://pc.2ch.net/test/read.cgi/php/1028816385/
[ひまぢん氏のミラー]
Part1 http://www.angelfire.com/ak5/2ch-web-program/kako/957208980.html
Part2 http://www.angelfire.com/ak5/2ch-web-program/kako/971817087.html
Part3 http://www.angelfire.com/ak5/2ch-web-program/kako/979894521.html
Part4 http://www.angelfire.com/ak5/2ch-web-program/kako/984430156.html
Part5 http://www.angelfire.com/ak5/2ch-web-program/kako/988728069.html
0003nobodyさん
02/09/15 15:31ID:???0005nobodyさん
02/09/15 15:46ID:???\ ^ ^ \
| -@ @ -|
| △ |/
| / \/
\ ○< 新スレおめでとうございます
\ \
-----/ \
0007nobodyさん
02/09/15 16:25ID:???0009nobodyさん
02/09/15 18:23ID:???flock(LOG,2);
@log=<LOG>;
@log = &format_log($maxlog,@log);
seek LOG,0,0;
print LOG @log;
truncate(LOG,tell);
close LOG;
みたいなのがあって意味はわかると思うんですが、
truncate(LOG,tell);
ってなくていいような気がするんですが、どうなんでしょう。
これが書いてある事でどんなメリットがあるのか教えてください。
0012nobodyさん
02/09/15 18:46ID:???ファイルサイズが前より小さくなった時に意味をなす。
0015nobodyさん
02/09/15 20:01ID:???0016nobodyさん
02/09/15 20:03ID:???7 名前:nobodyさん 投稿日:2002/09/15(日) 16:25 ID:???
コテハンで継続スレ立てるなヴォケ
8 名前:nobodyさん 投稿日:2002/09/15(日) 17:25 ID:???
>>7
削除依頼ヨロ
0017nobodyさん
02/09/15 20:04ID:???0019nobodyさん
02/09/15 20:19ID:???0020nobodyさん
02/09/15 20:29ID:???$time = sprintf("%02.d",$time);
よくこうしろと言われてますが、
$time = "0$time" if ($time<10);
こちらの方が軽くてイイと思うのですが
どうでしょうか?
0021nobodyさん
02/09/15 20:40ID:PweXUHcdforeach(@a){
push @line,"<small>$_</small>\n";
}
return @line;
}
とし、
@textpart=&abc();
とし、
print "<body>@textpart</body>";
のようにしたところ、
1行目は問題ないのですが2行目以降
必ず行頭に半角スペースが入ります。なんででしょう。
上記のプロセスは無関係でしょうか。
0022nobodyさん
02/09/15 20:49ID:???配列はデフォールトでは空白によって区切られたリストです
だからそれを展開すると空白も出力されます
ただし、"..."に入れないで、表に出せば空白は入りません
print "<body>", @textpart, "</body>";
0023nobodyさん
02/09/15 20:49ID:???万が一、すでに$timeが02とかになっていた場合、002になってしまうからでは?
あまり大きくなく汎用性を気にしないならそれでもいいんじゃない?
0024nobodyさん
02/09/15 20:50ID:???配列の区切り詞が半角スペースになってるから。
0025nobodyさん
02/09/15 20:53ID:???月、日、時間、分、秒のそれぞれに一桁か二桁かの判定(if文)を
入れるのが大変、というかそれによってsprintfより重くなってし
まうからではないでしょうか
一個だけなら、そんなに変わらないでしょうが
002621
02/09/15 21:00ID:???レス感謝です。
>"..."に入れないで、表に出せば空白は入りません
試したら言われた通りになりました。
実際はヒアドキュメントの中に書いていたのでずっとわからずにいました。
ありがとうございました。
0027nobodyさん
02/09/15 21:06ID:WvlaRVTEHTTP/1.1 302 Found
が返ってきてうまく取得できないのです。
スレッド一覧はうまく取得できるのですが。
こんな感じで$input_fileにhtmlファイルを取得していますが
何かリクエストのコマンドに工夫が必要なのでしょうか?
socket(S, 2, 1, 0);
connect(S, $name);
select(S); $| = 1; select(stdout);
print S "GET $path HTTP/1.0\n";
print S "Host: $host\n";
print S "Connection: close\n\n";
$str=join("",(">",$input_file));
open(FOUT,$str);
while(<S>) {
print FOUT $_;
}
close(FOUT);
0029nobodyさん
02/09/15 21:35ID:???コテハンでスレ立てるのはともかく、そこで煽るなよ。
>27
LWPは使えないの?
0032nobodyさん
02/09/15 22:50ID:???0033nobodyさん
02/09/15 22:50ID:???>open(FOUT,$str);
↑ open(FOUT,$str)|| die $!; の方が良いのでは?
2chのdat生取りはそれなりに作法が有ったんじゃ無いか
それと、生Socket使うよりIO::Socketとか29の言う様にLWPなんて
便利な物があるので、そっちを勧める
wgetに放り込むとか (w
// 固定に異常に粘着する猿はコイツなので気にしないように
http://pc.2ch.net/test/read.cgi/php/1029945604/l50
0034nobodyさん
02/09/15 22:52ID:???0035nobodyさん
02/09/15 22:55ID:???0036nobodyさん
02/09/15 22:55ID:???彡川川川キチガイミ〜
川川川/ \|〜 プゥ〜ン / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
‖|‖ ◎---◎|〜 クサイ / この板では俺様以外は固定を名乗るな!
川川‖ 3 ヽ〜 < XSとParrotが使えて、PERL5.8をコンパイル
川川 ∴)д(∴)〜 \ 出来る俺様を差し置いて固定とはなんだ!!
川川 〜 /〜 カタカタカタ \ 俺は一日中Perlを触ってるプロだ
川川‖ 〜 /‖ _____ \ PerlCCもhernessも使える
川川川川___/‖ | | ̄ ̄\ \ \ 上級者の俺のイソターネットを見てくれ!!
/ ヒキコモリ \__| 低収入 | ̄ ̄| \ http://hiero_pl.tripod.co.jp/
/ \__>>34 | | |__| \____________
| \ 中卒 |つ |__|__/ /
/ アホ ̄ ̄ | ̄ ̄ ̄ ̄| 〔 ̄ ̄〕
0037nobodyさん
02/09/15 23:02ID:???0038nobodyさん
02/09/15 23:11ID:???>>25
前ベンチマークで計った記憶があるのですが、
全て変換してもsprintfの方が重たいんですよね。
sprintf使った方がシンプルで見やすいからでしょうか?
0039nobodyさん
02/09/15 23:20ID:???0$time if (...);
こんなのがダサイとも気持ち悪いとも思わないのならどっちでもヨロシ
一兆回ループするなら速い方が良いかもね
004027
02/09/15 23:27ID:d22Bbzx7>>29 >>33
レスありがとうございます。
2chのスレッド取得はどんな作法があるのか調べてるのですが
よくわからないです。
Irvineではうまく落とせますね。
0041nobodyさん
02/09/15 23:28ID:???xx/yyみたいに表示されますが、さっぱり意味がわかりません。
誰か小学生にも分かるように教えて下さい
0042nobodyさん
02/09/15 23:33ID:vqb5QhHrheader(-charset=>'euc-jp'), start_html("INPUT"),
"性別: ", radio_group(-name=>'sex', -values=>['男', '女'],
-default=>'-', -labels=>\%labels), br,
……
例えばラジオボタンを上記のような記述で記述すると
param('sex') に"男"あるいは"女"が渡されてきます。
2バイト文字を使って条件判断をするのはちょっと気持ち悪いのですが、
表示文字をアルファベットにするわけにも行きません。
直接2バイト文字の条件判断を使わず、帰ってくる値を簡単な変数(0,1やm,f等)に置き換えることは出来ませんでしょうか。
0043nobodyさん
02/09/16 01:22ID:???ハッシュで定義しとけばいいじゃん
@sex{('男', '女')}= (0, 1);
$sex= %sex{param('sex')};
0044nobodyさん
02/09/16 01:58ID:???まず、aaa.html に <!--#exec cgi="bbb.pl" --> と記述しておきます。
で、ccc.html から aaa.html に飛ぶと、
もちろん $ENV{'QUERY_STRING'} は ccc.html になりますよね。
そうじゃなくて、aaa.html を参照したい時にはどうすればよいでしょうか?
環境変数にそんなのないですよね…?
0045nobodyさん
02/09/16 02:12ID:???004644
02/09/16 03:34ID:UarIxOyF> $ENV{'QUERY_STRING'} がaaa.htmlになるのか?
失礼しました…。
$ENV{'HTTP_REFERER'}の間違いです。すんません。
004744
02/09/16 03:38ID:???$ENV{'DOCUMENT_URI'}ですね。ありがとうございました。
0048nobodyさん
02/09/16 03:47ID:???ぜーんぜん違うじゃんかよ
$ENV{'HTTP_REFERER'}は、bbb.plが呼ばれたページだから
aaa.htmlとなるはず
0049b
02/09/16 03:49ID:oqHfjXJ7005342
02/09/16 12:22ID:m4c9VqI1ご回答ありがとうございます。
つまり、そういう方法で置き換えることしか方法が無いということですね。
イチイチ置き換えないといけないとなるとCGI.pm使うのも微妙なところだなぁ。
ちなみにそちらの方法を試したら動きませんでした(^^;
今直してます。
0056nobodyさん
02/09/16 15:05ID:???0057nobodyさん
02/09/16 15:10ID:???>29と同じ事を言わせるな。
スレ立て自体は感謝してる。
だが煽りにのって煽り返すなよ。
そんなだから延々煽られるんだろうが・・・。
コテハン煽りを放置できないならコテハン使うな。
名無しに戻れ。
じゃなければこのスレから去ってくれ。
真面目に返答してるコテハンまで悪い目で見られるだろ。
頼むから。
初心者スレを潰したいわけじゃないだろう?
あんた自身の手でこのスレをクソスレにでもしたいのか?
0058nobodyさん
02/09/16 15:10ID:???1:自分はこう言う事がしたい。
2:それでこんな風にやってみたが・・・
3:それだとこんなエラーが出て上手く行かなかった。
1と3が無いと誰も答えられないよ。
良い回答は良い質問から。一緒に勉強しましょう。
CGIだけど、なんか質問ある? Part 6 (その2)
http://pc.2ch.net/test/read.cgi/php/1025930486/
参考書籍の話題は【【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あたりを見よう。
0061nobodyさん
02/09/16 15:24ID:???0062nobodyさん
02/09/16 15:53ID:???print "あなたのお名前を入力してください:"; chomp($name = <STDIN>);
do
{
print "あなたのお名前は",$name,"さんですね?\n";
print "YES:0NO:1\n"; $logic = <STDIN>; print "\n"; chomp($logic);
if ($logic == 0)
{
print "やはりそうでしたか";
}
elsif ($logic == 1)
{
print "嘘はつかないでください\n";
}
else
{
print"YESかNOかで答えてください";
}
}
until($logic == 0);
と作りました。しかし0か1かを入力するところを0,1以外で入力するとelse構文のないようが表示されず
終了してしまいます。
なぜでしょうか?
0064nobodyさん
02/09/16 16:20ID:???ありがとう
0065This is perl, version 5.003_07
02/09/16 17:56ID:???という場合、$hoge の値として ? とか ( ) とかの
記号が入ってる場合、その記号を文字そのものとして
パターンマッチさせるにはどうすればいいんでしょか?
0067This is perl, version 5.003_07
02/09/16 18:11ID:???006942
02/09/16 23:48ID:m4c9VqI1結局色々やっても>>43さんの方法は出来ませんでした。(TT
あとこの方法は非常に長いパラメータがついてしまうと大変な気がするのですが、、、、
例えば男、女ではなく
"問1: ", radio_group(-name=>'sex', -values=>[
'2ちゃんねるは諸言語のプログラミングを学ぶ上で非常に有用なコミュニティであり、云々〜(以下永延と)と思う',
'2ちゃんねるはどちらかというと学ぶと言うよりは遊び感覚で参加すべきであり云々〜(以下小一時間)だと思う'
],・・・・・・・・・・・・・
な感じだと文章をパラメータにして置き換えなければいけないんですよね。
こりゃ困ったな。。。
0070nobodyさん
02/09/17 05:04ID:yqtkGr1mopendir(DIR,"./");
while($_ = readdir(DIR)){
print "$_," . (stat)[9] . "\n";
}
closedir(DIR);
とやっても、ファイルの更新時間が見れません。
statがWindowsでサポートされていないのであれば、
ほかに代わる方法ないでしょうか?
007171
02/09/17 08:09ID:???gifcat.pl を使って
open(PUT, ">counter.gif");
flock(PUT, 2);
binmode(PUT);# MS-DOS や Windows の場合に必要です。
foreach $gif (@num)
{
$int = $imgpath . $gif;
$imagefile = "$int . .gif";
push(@getimg, $imagefile);
}
print PUT &gifcat'gifcat("@getimg");
print <PUT>;
flock(PUT, 8);
close(PUT);
というコーディングをしたんですが、うまく表示できませんでした。
gifcat.plの使い方がおかしいのでしょうか?
0072nobodyさん
02/09/17 08:19ID:???ちゃんと出とるはず
perldoc -f stat
9 mtime last modify time in seconds since the epoch
(The epoch was at 00:00 January 1, 1970 GMT.)
# modifyはmodifiedの間違いじゃない?
0074かるぴすうぉ〜た
02/09/17 08:55ID:yqtkGr1mそれが、私の環境では、出ないんです。
Perlのバージョンは
This is perl, v5.6.1 built for MSWin32-x86-multi-thread
OSは、Windows2000。
0075nobodyさん
02/09/17 09:00ID:yqtkGr1m仕方がないので、ファイルの書きこみ時、最後の行にでもtimeの値を書きこんで
随時それを読み込んで参照することで、しばらくは解決させることにします。
もし、ファイルに対して直接更新時間にアクセスできるような処理方法があったら
おながいしうます。
そんなはず無いんだけどね。そのPerlが壊れてるなら別だけど。
実際私の環境(ActivePerl631, WinME)だとそのコードだと正常に動くし。
それとももしかしてopendirの引数にカレントディレクトリ以外の値を与えてる?
それだと失敗するよ。
007771
02/09/17 09:10ID:???&gifcat に"$int.gif"("1.gif""2.gif"...)を渡したいんです。
それとも、GIF画像自体を渡すんでしょうか・・・
スレ違いかも失礼
0078nobodyさん
02/09/17 09:16ID:???おらwin98SEのActivePerlのv5.6.0 built for MSWin32-x86-multi-threadだけ
ど問題なく動いてるYo
0079nobodyさん
02/09/17 09:20ID:???だから、
$imagefile = "$int . .gif";
じゃ1\ .\ .gifとか2\ .\ .gigっていうファイル名になっちゃうんじゃないって
言ってるんだけど('\ 'ってのは半角空白ね)
0081nobodyさん
02/09/17 11:52ID:???自分なりにも考えました
if(length $line > 16){
$line = (join "", (split "", $line)[0..13]) . "..";
}
これよりもっと効率のいい方法がありそうだと思うのですがあったら教えてください
0082nobodyさん
02/09/17 11:56ID:???008471
02/09/17 12:54ID:???納得
>80
ごめん
008571
02/09/17 13:12ID:???>79が原因でパスが間違っていたのと、変数名がサブルーチン部分と
重複しているものがありました。
>73=77さん、>80さん、ありがとうございますた!
008686
02/09/17 15:28ID:???パスワードを入力すると管理画面に入る、というのを行いたいです。
暗号処理はいらないです。うまいやり方を教えてください。
お願いします。
0087nobodyさん
02/09/17 15:58ID:???if(パスワードが送信されてきた){
&管理画面;
}else{
&パスワード入力画面;
}
0088nobodyさん
02/09/17 16:12ID:???>>76 さんの答えがビンゴだと思うけど一応。
opendir DIR, ($dir = './');
print(scalar gmtime((stat $dir . $file)[9]), ' ', $file, "\n")
while $file = readdir DIR;
closedir DIR;
用途によっては stat よりファイルテスト演算子の方がいいかも。
0089必殺bodyさん
02/09/17 16:22ID:???do {
&パスワード入力画面;
}
until($password == <INPUT>)
とか
0090nobodyさん
02/09/17 16:23ID:???すみません〜
0091nobodyさん
02/09/17 16:43ID:bZ09p6Xo---S--x-w-[000]という削除できないファイルができてしまったのですが
管理者に削除してもらわないと無理でしょうか?
009391
02/09/17 17:31ID:???管理者にすがってみます。
ありがとうございました。
00953PIO ◆3pIoOHKo
02/09/17 21:11ID:0b85vBv+昨日は本当にスマンかった
今度から気を付ける。
許してくれm(__)m
0096nobodyさん
02/09/17 21:30ID:???0097nobodyさん
02/09/17 23:47ID:???0098nobodyさん
02/09/17 23:47ID:nVaQI6CNそこでテストすると500InternetServerErrorが出てしまいます。
まったく内容の同じサンプルCGIを自サーバーで開くと問題なく作動します。
スクリプトは何回も確認しましたが間違ってはいないようです。
保存時の文字コードが関係あるようなのですが、調べてもなかなかわかりません。
cgiはメモ帳で作成しています。OSはXPで自サーバーはApacheです。
どうすれば正常に作動するのでしょう?
0099nobodyさん
02/09/17 23:50ID:???そこで って、どこ?
010098
02/09/17 23:53ID:nVaQI6CN文章拙くてすみません。
そこで = 自サーバー(Apache)です。
0101nobodyさん
02/09/17 23:58ID:???確かね、500 Internal Server Error になると、
そのエラーページの最後の方に「エラーログ
見ればもっと詳しい事が分るかも」って書いてあ
るんだよ。違う?
もしかして IE だと読めないんだっけ?
010398
02/09/18 00:04ID:P3Sos/ey教本に付属しているCDのサンプルCGIはきちんと動作しています。
が、まったく同じ内容の私の作ったCGIはエラーになってしまうのです。
保存時の文字コードによっては文字化けして表示されたりもするので文字
コードではないかと思うのですが、いろいろな文字コードで保存していま
すがどれもうまく作動しません。
原因は他にあるのでしょうか?
010598
02/09/18 00:17ID:P3Sos/eyうーん、何回も見直してみたのですが……。
全角、半角も見直してみましたが間違ってはいないようです。
文字コードは関係ないのでしょうか?
010798
02/09/18 00:22ID:P3Sos/eyはい、比べて見ました。
どっちも1342バイトでした。
もしかしてもっと根本的な何かなんでしょうか?
Apacheを再インストールしてみます。
……普通は有り得ない現象なのでしょうか?
010998
02/09/18 00:30ID:P3Sos/ey>>108
同じ名前で試してみました。
やっぱり動作しません。
キャッシュっていうのは、インターネット一時ファイルを削除すると言うことでしょうか?
011098
02/09/18 00:37ID:P3Sos/eyもう眠るので落ちます。
ご意見ありがとうございました。
0111nobodyさん
02/09/18 01:20ID:8kqybO5Fの排他制御を使わせてもらおうと思っているのですが
return \%lfh if (time - $1 > $lfh{timeout} and
rename($lfh{dir} . $_, $lfh{current} = $lfh{path} . time));
last;
ここの部分がいまいち何をしているのかわかりません。
特に\%lfhというエスケープ演算子の後のハッシュはどういう意味なんでしょうか?
0113111
02/09/18 02:27ID:8kqybO5Fありがとう!少しスッキリしました。
0114nobodyさん
02/09/18 04:11ID:???サンプルのディレクトリにはjcode.plがあるが、
キミのディレクトリには無い。
とか、
キミのファイル名が日本語だから(XP上で日本語じゃダメなのかは不明)
とか。
0115nobodyさん
02/09/18 08:56ID:4xK36YHqコマンドプロンプトで
perl -cw filename.cgi
しろ
0116nobodyさん
02/09/18 09:45ID:04tSnTX3やりたいのですが、特定の環境・ホストの組み合わせによっては
出来ない場合があります。
ログインまでは出来るのですが、なぜかリスト取得(nlst)や
ファイルのput・getができません(pwdやcwdはできます…)。
エラーが出るわけではなく、タイムアウトしてしまいます。
どうすればいいでしょうか。以下、ソースです。
#ここから
use Net::FTP;
$ftp = Net::FTP->new($ftphost, Debug => $ftpdbg, Passive => $passive)||die "Net::FTP FAILED";
$ftp->login($ftpuser,$ftppass);
$ftp->ascii();
$ftp->cwd("web/cgi-bin");
@files = $ftp->dir();
print join("\n",@files)."\n\n";
#ここまで
このソースを別環境で試してみたところ、問題無く
動きました…。ちなみに、当方LANからのADSL接続です。
0117nobodyさん
02/09/18 10:21ID:???0118116
02/09/18 10:54ID:04tSnTX3接続先のftpサーバはPassive->0にしないとつながらないのです。
pasv()はPassiveに移行するコマンドですよね?
もしかしてデータポートの問題でしょうか。コマンドは
通るけどデータの受け渡しが出来ないので…。
011942=69
02/09/18 13:38ID:g3HNafQf0120nobodyさん
02/09/18 14:00ID:CaL1DwkZ-values=>['M', 'F'],
で
%labels = (M => '男', F => '女', ) ;
じゃだめなの。
0121nobodyさん
02/09/18 16:34ID:???まず、PASV モードにする事で何が変わるか理解してる?
ttp://www.atmarkit.co.jp/fnetwork/rensai/netpro11/netpro01.html
実験結果を理解する為には、条件について理解してる必要があるよ。
0122nobodyさん
02/09/18 19:54ID:???他のFTPクライアント(何でもいい)はその動かない環境で
PASVモードを使わないで接続できているのでしょうか?
データポートの問題には違いないけど。
0123nobodyさん
02/09/18 23:45ID:z0adaCjsif文で試してもどちらも同じような挙動をします。
&&、||は数値比較ということのようで、解説サイトで
if(($a==2) && ($b==2))
というような例を見ましたが、($a==2)は数値を返すのでしょうか。
print (1==1); ###1を出力
print (1==2); ###なにも表示されず
よくわかりません。よろしくお願いします。
0124116
02/09/18 23:54ID:hRbwuJFLnetpro01.html読んできました。ということは
Firewallの内側からftpする場合はpasv()する
ということですね。なるほど。
>122
他のFTPソフトでも、その動かないFTPサイトにはpasvか否かを問わず
同じ状況(ログインできるけどnlstやput・getができない)です。
それもそれで困っているのですが。仕方なくtelnetでつないで1ファイル
ずつftpしてます。
状況としては「クライアント→サーバはOK、サーバ→クライアントだと
データポートが食い違っている」ということ? なのかな。
0125nobodyさん
02/09/19 00:25ID:qg0OuaDdといったフォーマットのcsvファイルを読み出して、もし上下(下の行)の
文字列2と数値1が同じならば、別のcsvファイルに”上下”の
文字列1と当然ながら、同じ値の文字列2、数値1を出力するのはどうやればよいのでしょうか。
(csvファイルの入力、出力は大体分かっているつもりです。内部的な処理が分かりません)
また、仮に上下の文字列2、数値1が合わない場合(行自体が奇数だったりした場合)
文字列3、数値2を上下で比べて同様の事をしたいのですがこの方法も分かりませぬ。
よろしくお願いします。
0126125
02/09/19 00:29ID:qg0OuaDdAAA1,ABC,123,DEF,456(改行)
AAA2,ABC,123,DDD,444(改行)
というcsvファイルがあったなら、別のcsvファイルに
AAA1,AAA2,ABC,123
というのを出力したい、という意味です。
また、
AAA1,ABC,123,DDD,444(改行)
AAA2,ADD,777,DDD,444(改行)
ならば、同様に、別のcsvファイルに
AAA1,AAA2,DDD,444
というのを出力したいということです。
よろしくお願いします。
0128nobodyさん
02/09/19 03:24ID:???&&と&、|と||が同じ挙動なんてことはない。
&&は左と右の条件が両方成り立ったとき真、
||は左と右の条件が少なくとも一つ成り立ったとき真。
真てのは1を返し、偽は0を返すから条件が成り立たなければ
上の論理演算子を評価したとき、1が出てきたり0が出てきた
りするのは当然。こいうのは戻り値という。
0130nobodyさん
02/09/19 03:52ID:???こいうことかな?
while(<>){
chomp;
split /,/;
if ($o1 eq ($f1 = $_[1]) && $o2 == ($f2 = $_[2])) {
print "$o0,$_[0],$_[1],$_[2]\n";
} else {
print "$o0,$_[0],$_[3],$_[4]\n" unless $. == 1;
}
$o0 = $_[0];
$o1 = $f1;
$o2 = $f2;
}
0131nobodyさん
02/09/19 05:08ID:Ab8J7aLwあのよ、プログラムの質問なんだから無理に文章にしないで
・プログラム概略
プログラムの説明、使用目的など
・環境
OS、使用アプリ、関連アプリなど
・入力
データ入力の方法、データ形式など
・処理
プログラム内で行うデータ加工、計算、アルゴリズムなど
・出力
出力データ形式、出力先など
・問題点
不具合の説明
・自分なりの解決法(試したもの)
自分で試した方法
・ソース
問題となっているプログラムソース
このくらいの箇条書きに整理して質問しろよ。書いてるうちに問題が解決する
場合もあるだろ。
どうも、解り辛い書き込みが多いよ。
0132nobodyさん
02/09/19 06:51ID:???if($a eq '1' && $b eq '1'){
print "$aと$bが1なので表示しました。";
}
if($a eq '1' || $b eq '1'){
print "$aか$bが1なので表示しました。";
}
こんな感じ。
0133nobodyさん
02/09/19 10:58ID:IJ0KtDTA$day = sprintf("%02d",$day);
これを実行すると$dayが03になることはわかったのですが、
「%02d」の「2」は何を意味していますか?
0134nobodyさん
02/09/19 11:20ID:???ビット演算とか比較演算って知ってる?
解説書でも読めば必ず書いてあると思うんだが。
とりあえず出てきた演算子のperlでの分類と意味を書く。
・比較演算子
== 等しければ真、そうでなければ偽
・ビット演算子
| ビット演算した論理和(OR) (ex. 2|5 -> 7)
& ビット演算した論理積(AND)(ex. 2&5 -> 0)
・論理演算子
|| 真偽の論理和 (ex. 2||5 -> 2)
&& 真偽の論理積 (ex. 2&&5 -> 5)
ビット演算はその名の通りビットごとの演算がされる。
論理演算は、perlではundef,0,""以外は全て真なので
||なら最初の真の値、&&なら最後の真の値になると思って良い。
>>124
その状況でPASVが使えないならFTP接続は無理。
FW管理人と相談してね。
0135nobodyさん
02/09/19 11:24ID:???>>133
二桁の意味。
ちなみに%02dのそれぞれに意味がある。
% フォーマットを指定するよ宣言
0 隙間は0で埋めてね
2 2桁より少ないときにね
d 10進整数で表記してね
0136nobodyさん
02/09/19 11:34ID:???漏れはこう解釈したが
open O1, ">1.txt";
open O2, ">2.txt";
while(<>){
chomp;
split /,/;
if ($o[1] eq $_[1] && $o[2] == $_[2]) {
print O1 "$o[0],$_[0],$_[1],$_[2]\n";
} elsif ($o[3] eq $_[3] && $o[4] == $_[4]) {
print O2 "$o[0],$_[0],$_[3],$_[4]\n";
}
@o = @_;
}
0137nobodyさん
02/09/19 11:38ID:???詳しい解説ありがとうございます。
0138&&と||の質問者
02/09/19 18:03ID:???>>134さんの例で理解できました。
単に真偽を取り扱う場合は&&でも&でも同じということですね。
0&1 はビット比較で0=偽
0&&1 論理演算で0=偽
0139nobodyさん
02/09/19 19:04ID:???でも普通、真偽判定にビット演算子は使わない。
その文で何の処理をしているか読み下しにくくなるからね。
あとこういう場合、&& より and、|| より or を使う癖をつけとくと
後々幸せになれるかも知れない。数値として比較する時は
==、文字列として比較する時は eq、という区別もはっきり
させとくと尚良し。
$a = 0; $b = 1;
if ($a = 1 and $b == 1) {
print "$aと$bが1なので表示しました。";
}
$a = 0; $b = 0;
if ($a == 1 or $b = 1) {
print "$aか$bが1なので表示しました。";
}
0140nobodyさん
02/09/19 19:10ID:???一応つっこんでおくと、下から3行目=が1個足りない。
0141nobodyさん
02/09/19 19:11ID:???それで昔失敗したんだよなぁ。
懐かしい。
0142nobodyさん
02/09/19 20:16ID:???よく見よう。上の条件文は ($a = 1) && ($b == 1) と等価、
下の条件文は ($a == 1) || ($b = 1) と等価だ。
つまり代入の結果の値をそのまま条件に使っている。(w
&& と || は代入演算子より優先順位が高いが、
and と or は低いから括弧が不要。
0143nobodyさん
02/09/19 20:17ID:???それだと、print文の内容が不自然なんだが?
0144518
02/09/19 20:32ID:???$a = 0; $b = 1;
# $a = 1 で $a の値は 1
# ($a = 1) の式の値は 1 で真なので and の右の式も評価する。
# $b == 1 は真、両方真なので if ブロックに入る。
if ($a = 1 and $b == 1) {
# 条件文を解釈した時点で $a = 1, $b = 1
print '$a と \$b が 1 なので表示しました。';
}
$a = 0; $b = 0;
# $a == 1 は偽なので or の右の式も評価する。
# $b = 1 で $b の値は 1
# ($b = 1) の式の値は 1 で真なので if ブロックに入る。
if ($a == 1 or $b = 1) {
# 条件文を解釈した時点で $a = 0, $b = 1
print '$a か $b が 1 なので表示しました。';
}
0145nobodyさん
02/09/20 03:12ID:tkLzuZ53アスキー配列ではなくて日本語辞書(?)の並びで簡単に扱う方法はありませんか。
たとえば、
あアいイ〜かカがガきキぎ〜(空文字が最後)
みたいな感じです。
普通にperlで並べたデータベースをexcelで編集して並べなおすと辻褄が
合わなくなってしまいます。
よろしくお願いします。
0146nobodyさん
02/09/20 05:51ID:???有名どころでは、
豊島正之sortf、http://www.asahi-net.or.jp/~ez3k-msym/archive/archive.htmには、益山って人のsortlもあるね。
Perlのライブラリではないんかい。
googleでPerl、辞書順ソートで調べたんだけど、
fj.cmp.lang.perlでそんな話し合ったみたいだけどその記事に行き当たらない。
JCPANがほしいね。
0147116=124
02/09/20 11:07ID:???設定を一部解除したらFTPできるようになりますた。
♪勉強に〜なりましたっ。
0148nobodyさん
02/09/20 14:58ID:???ご回答ありがとうございます。
僕も調べてみたんですが、見つかりませんでした。
自分で辞書順配列作ってやるしかないのかなあ。
やってみます。
0150nobodyさん
02/09/20 16:06ID:???超素人なので、僕の作ったものは役立たずだと思いますw。
とりあえず比較だけで、&jcomp($a,$b)が1,0,-1を返す関数から初めてみます。
使ったことないから期待通り動くかしらないけど。。。
http://homepage1.nifty.com/nomenclator/perl/Lingua-JA-Sort-JIS.html
とかは?
で、sortで調べらたら出てきただけだったり
ちょっと興味>JCPAN
0156nobodyさん
02/09/20 19:00ID:VWOOYV2pあるスクリプトの負荷軽減をしたいのです。
一般論として、
1.コメントを削除するのは軽減につながる?
2.処理はなるべくサブルーチン化するほうが負荷が軽減する?
3.サブルーチンは別ファイルにしてrequireするより、1ファイルにしたほうが負荷軽減になる?
その他負荷軽減のセオリーなどあるのでしょうか。
ポインタなど教えていただければ幸いですm(_ _)m
2 - × ケースによって異なるけど、サブルーチンかすると付加は重くなる。
ただし不可の為だけにインラインかを進めるのはナンセンス。
3 - △ ケースによる。大量の「プログラム開始時には必要かどうか分からない処理」がある場合は別ファイル化したほうがいいこともある。
負荷軽減で重要なのは上記のような小細工よりもアルゴリズムだろうね。
あとはPerl以外の言語を使うとか。
すべての処理を1つのCGIで済ませるタイプのプログラムだと
適当なとこでぶった切って適当なところでrequireするように
するだけでずいぶん効率UPできると思われ...
0160nobodyさん
02/09/20 20:44ID:???0163nobodyさん
02/09/20 21:07ID:???メモリとか…
実際に別けてベンチ取ると処理時間が倍近く遅くなるんだけど。
本当に滅多に使わないような部分(管理モードとか)ならともかく
ファイルサイズが巨大にならない限りは極力別けないようにしてた。
関数化できる部分も展開した状態で書いた状態をさしてました。
>>163
それが本当だと
AutoSplitとAutoLoader使って書かれてる
CPANモジュールって多数ありますけど、
あえて効率悪くしてるのでしょうか?
CPANのも「なんでこの程度でAutoLoader使ってるの?」ってモジュールばかりだよ。
1回の起動でよばれない部分が大半なきもするんですが...
またCPANモジュールの場合、モジュールがモジュール呼んで
って繰り返す場合がおおいので、AutoLoaderなかったら
それこそ無駄なコンパイル、無駄なメモリがたっぷりなきがします
#具体例もなしに不毛なきがしてきた...
0167nobodyさん
02/09/20 23:10ID:???ただ、この場合は一つのファイルの一度のコンパイルで全てが終わるって事も
わかる。
処理してからコンパイルするんじゃなくてコンパイルしてから
処理するんでしょ?
って事はコンパイル後に外部を呼んだら外部もコンパイル、又は
全てを再コンパイルって事にはならんの?
(useは最初によまれちゃいますけど...)
むちゃくちゃ強引な例)
if(1){
require "a.pl";#ここに遷移したとき初めてコンパイルされる
}else{
require "b.pl";#つまりこっちはコンパイルされない
}
ちがいましたっけ?
(AutoLoader簡易版の一例)
sub AUTOLOAD {#定義されていない関数があると呼ばれる
my $file = $AUTOLOAD;
$file =~ s!::!/!g;
if(eval{require "$file.pl";}){
die('ダメっぽい')if($AUTOLOAD{$file});
$AUTOLOAD{$file}=1;
return &{$AUTOLOAD}(@_);
}
return undef;
}
とかしてあげると、ある関数が呼ばれたとき
初めて読み込んでコンパイルされ、
2回目以降は関数が存在するので
AUTOLOADは呼ばれないって動きになるものだと...
#突っ込まれるとなんか自身がなくなってしまう^^;
0170nobodyさん
02/09/20 23:41ID:???0171nobodyさん
02/09/20 23:42ID:???require "a.pl";#ここに遷移したとき初めてコンパイルされる
}else{
require "b.pl";#つまりこっちはコンパイルされない
}
動かなきゃそこに行くことは分からないんでしょ?
動くならそもそもコンパイルの必要が無いと思うんだけど。
0172171
02/09/20 23:45ID:???ただ、コンパイル>requierがあった>コンパイルって二度手間に
なるんじゃないかと言ってるわけで。
0173nobodyさん
02/09/20 23:58ID:???コンパイルをYO-
2段階でやってるからYO-
2度手間にはならねーYO!
それはもちろんそう。というか、そうじゃなきゃAutoLoaderの実装に苦労するよ…
で、内部のpp_requireのコード読んでたら妙なことみっけ
#!perl -w
sub Loader::new{
return bless{}, $_[0];
}
sub Loader::INC{
my($self, $file) = @_;
print "ファイル $file が要求されました\n";
return "/path/to/$file.pm"; # フルパスを返す
}
@INC = (Loader->new());
require foo;
__END__
こんなの何処かに書いてあったっけ?
INC()の挙動が妙なんで実験機能かなぁ。
0179156
02/09/21 03:05ID:mTosX4PH勉強になります。
ちなみにわたしのスクリプトは書いてあるルーチンをか必ずすべて使うスクリプトなので
1-3すべて無意味っぽいですね。
アルゴリズム見直しかあ。手に負えなそうtt
奇特な方がソースみてくれるの期待して公開してるスクリプト晒しときます。
http://tokada.s19.xrea.com/
今負荷率みてみたらあほみたいなアクセスは減ってるみたいで、
負荷も落ちついてるみたいですが。
0181156
02/09/21 04:22ID:???感謝です。
http://olive.zero.ad.jp/~zbk52224/files/Random2ch-0-2-1a.zip
にzipもあります
0183156
02/09/21 04:42ID:???もしよければ、改変したものを公開していただけるとうれしいです。
勉強になるしw
1.不要なコード,極端なコメント,不要な変数、ループの削除
2.局所化されてない変数ありません?(不確か)
3.関数内での定数の宣言,requireの廃止
4.Random2ch.pl,linksFromHtml.plの統合
5.インデントの調整
すると、もちっとよさげかなぁ?とかおもいますが、
Socket周りをちゃんとするのはえらいと思う
毎回HTTPのリクエストしないで、
解析結果を保存しておいて、一定期間内のアクセスであれば
保存したデータを使うようにするだけで、
結構スピードアップしそう。
ネットワークの開くのって結構コスト高いっすよね?
って感じかなぁ?
おやすみなさい。
 ̄ ̄ ̄V  ̄ ̄ ̄ ̄ ̄ ̄ ̄
.∧∧ エビフリャー
,.、,(゚Д゚ ) /i
;'`;、. :,.:∪`゙:゙:`''':,'.´ -‐i
'、;:.: .、.:',.: .:: _;.;. :.‐'゙゙~  ̄
`` U U
0187156
02/09/21 06:53ID:???なるほど参考になります。
ソースを再検討してみます。
>>185
たしかにbbsmenu.htmlは"比較的"静的なので1日ごとの更新でもいいかもしれませんね。
subback.htmlはどうしよう。更新時間の匙かげんが難そう。
まあどちらも
ファイルがない||更新時間以前のファイルがある場合、HTTPリクエストしてlocalに保存する。
そうでない場合localのファイルに対して処理する。
ってかんじですかね。
>>186
おやすみなさい^^
0188nobodyさん
02/09/21 06:59ID:???0190182
02/09/21 10:28ID:???とりあえずコードをまとめ直しただけですが。
http://boobar.hoops.ne.jp/Rand2ch/Rand2ch_0.2.1a.txt
connectの回数減らさないと体感できる遅さの原因になりやすいので
KEEP-ALIVEとかちゃんと使わないとまずそうですね。
0192nobodyさん
02/09/21 11:38ID:???1:自分はこう言う事がしたい。
2:それでこんな風にやってみたが・・・
3:それだとこんなエラーが出て上手く行かなかった。
1と3が無いと誰も答えられないよ。
良い回答は良い質問から。一緒に勉強しましょう。
0193156
02/09/21 11:53ID:???。。。。。。。。。
すげーーーーー
あまりのエレガントさにびびりました。
わたしの元ソースと比べるべくもないですな。
ハハハハハハハハ
めちゃくちゃ示唆に富んでるソースだし。。。。
ただ私のPerlへの理解度が追いついてない部分があるので、ラクダ本と突き合わせながらじっくり読ませてもらいます。
ここに質問してよかったです。
ありがとー
#こんな時に明日からしばらく出かけなくちゃいけないtt
#どっぷり漬かりたいのにtt
0194156
02/09/21 12:02ID:mTosX4PHおはよーございますw
KEEP-ALIVEですか。ほうほう。
はじめて聞きます(汗
字面からは、一度ソケットひらいて通信してそのまま次の通信をするって感じとか想像するんですが、
大外ししてるかな。。。。
資料あさりたいですが、後日ってことになりそうです。
すみませんtt
0195nobodyさん
02/09/21 12:57ID:/+fRFKXb正しく動きません。見てもらえませんでしょうか・・・
require "./jcode.pl";
open(IN, "aaa.txt");
$xxx = <IN>;
close(IN);
&jcode'convert($xxx,'sjis');
open (FILEOUT, ">aaa.txt");
print FILEOUT $xxx;
close (FILEOUT);
0196nobodyさん
02/09/21 13:00ID:???0197195
02/09/21 13:40ID:/+fRFKXb無事解決できました。ありがとう!
0198nobodyさん
02/09/21 13:41ID:???0199nobodyさん
02/09/21 14:02ID:???ぼく小学生だけとPerlのことはなんでも聞いてよ!
0200どうにかして
02/09/21 14:15ID:???俺のサイトは全てCGIを経由しないと表示できないようにしてる
リモホしだいでどんなページにでもジャンプさせてるぞ
56 名前:Name_Not_Found :02/09/14 12:20 ID:???
>>54
鯖のことを少しは考えてやれ・・・
自分の鯖なら別にいいが。
57 名前:3PIO ◆3pIoOHKo :02/09/15 21:39 ID:???
>>56
トップページの表示にかなり時間がかかる
苦情が鯖の管理人からきたらどうにかする
0201nobodyさん
02/09/21 14:25ID:???0202nobodyさん
02/09/21 15:22ID:acWgwkORとりあえず初心者本読んでperlをちょっと勉強したんですが、
Web上でよくみる掲示板のソースを見ると
もう何がナンだか分からなくなって、
でももっと勉強すれば理解できるようになりますか?
才能とか関係ないっすよね?
0203nobodyさん
02/09/21 15:26ID:???才能は必要。
努力しつづけるという才能が。
途中で諦め、投げ捨てるような人には無理。
要は根気だ。
俺は根気があるのは才能だと思ってる。
0204b
02/09/21 15:31ID:ererLzW20207nobodyさん
02/09/21 18:19ID:0Otbw0Zcく!
にょ!
ウウウウウウゥゥ!
0208nobodyさん
02/09/21 18:19ID:???0209nobodyさん
02/09/21 18:20ID:???右クリックの「ソースの表示」は違うぞ
というか基本的なHTMLの知識があればそれぐらいわかるだろ
0211202
02/09/21 18:41ID:/+fRFKXbだめでしょうか?
0212nobodyさん
02/09/21 18:44ID:f7+ObQJd02,田代,花子,40歳,
03,泉,まさし,40歳,
04,泉,ピン子,60歳,
05,泉,茂千代,118歳,
06,…
07,…続く
例えば上記のようなデータから
田代に該当 2
泉に該当 3
…
まさし 2
花子 1
ピン子 1
茂千代 1
…
40歳 3
60歳 1
118歳 1
…
というふうに列の重複数をすべて書き出したいんです。
どしたらいいでしょうか?
0213nobodyさん
02/09/21 19:33ID:acWgwkORソースはちゃんとダウンロードしたCGIファイルを見てるよ
0214nobodyさん
02/09/21 19:38ID:???乱暴なやり方。
my @data = qw(
01,田代,まさし,40歳,
02,田代,花子,40歳,
03,泉,まさし,40歳,
04,泉,ピン子,60歳,
05,泉,茂千代,118歳,
);
my %count;
foreach (@data) {
foreach (split /,/) {
$count{$_}++;
}
}
foreach (sort keys %count) {
print($_, 'に該当 ', $count{$_}, "\n");
}
0215nobodyさん
02/09/21 20:33ID:???ありがとうございます。動きました!
別ファイルにデータを置いてるので、
$data='data.txt';
open(IN,"$data");
@data = <IN>;
close(IN);
として大丈夫でした。
あつかましくも追加で…上記データで言うと名字の部分と年齢の部分というふうに
特定の列のみ抽出することは出来るでしょうか?
0216nobodyさん
02/09/21 20:35ID:???できる。
どうやればできると思う?
0217nobodyさん
02/09/21 21:37ID:f7+ObQJdそれがどうにも分からんのです…
0218nobodyさん
02/09/21 21:58ID:???>>214 さんが示している例がどうして動くのか、理解しましょう。
そうするとどこが問題点か解るはずです。
まず、その問題点を探してみて下さい。
while(<IN>){
chomp;
my @data = split(/,/);
push(@{$count{$data[$IDX]}},\@data);
}
for(sort keys %count){
printf("%sに該当%d\n",$_,scalar @{$count{$_}});
}
0220nobodyさん
02/09/22 00:28ID:???0221nobodyさん
02/09/22 00:49ID:bAgDqIKf良いのでしょうか。
イメージとしてはYahooや、ポイント制のあるEコマースサイトの様な機能なんですが。
もう少し具体的に書きますと、
・ユーザーID,パスワード,ポイント
以下同じ構文のcsv
みたいなcsvファイルを使って
・そのcsvに記載されてあるID,パス認証
・認証後、”同じ列”にあるポイントの表示
というような事はどうすればよいのでしょうか。
よろしくお願いします。
0223nobodyさん
02/09/22 01:16ID:bAgDqIKf初歩的なID,パスワード認証
(csvを読み込んで、変数に格納、それとFORMの数値を見比べてイコールなら移動)
まではわかるのですが、
その後のcsvから、ポイントの取り出しが分かりません。
縦の関係は分かっても、横の関係が分からない、というか何というか。
よろしくお願いします。
0224nobodyさん
02/09/22 01:27ID:???splitっていうか、分割できないでIDどう取るわけ?
すっげー非効率なことしてる気がしてきた。
まぁCSV落とされないようにね。
0225nobodyさん
02/09/22 01:29ID:???0226222
02/09/22 01:55ID:???ユーザIDを比較して取り出せば?
($point)= map{ $_->[0] eq 'id' ? $_->[2] : () }map{ chop, [split(/,/, $_, 3)]} <DATA>;
0227222
02/09/22 02:09ID:???my $point;
($point)=map{ $_->[0] eq 'id' ? $_->[2] : () }map{ $point?last:chop, [split(/,/, $_, 3)]} <DATA>;
0228nobodyさん
02/09/22 12:03ID:dGvJOxY30229nobodyさん
02/09/22 12:14ID:???なんか使い道ないかなぁ。。。
CPANミラーする程度しかおもいつかなくて、、、
(すれ違い?)
0231nobodyさん
02/09/22 16:28ID:Fc82peeX0232nobodyさん
02/09/22 16:59ID:???0233nobodyさん
02/09/22 17:21ID:???0234nobodyさん
02/09/22 20:07ID:???かずあき(1001) > いや、アップロードしたプログラムは実行効率上げるためにコメント行を全てカットしてあるから、正直なにが書いてあるかウチ本 人にもわかんないのよ (9/22(日)20:06 )
実行効率上がるんですか?変わらない気がするんですけど。
0235nobodyさん
02/09/22 20:12ID:???0236nobodyさん
02/09/22 20:56ID:???ナノ秒単位でなら上がるかも。
0237nobodyさん
02/09/22 21:21ID:dGvJOxY3<img src="xx.cgi">で起動させた後、空白を表示させる方法が分かりません。
ヒントをください
0239nobodyさん
02/09/22 22:06ID:???なんかいかにも「こっそりIP抜きたい」っていうやり方だね・・・。
0240237
02/09/22 22:37ID:dGvJOxY3CGIの方に(xxx.cgi)
print "text/html\n\n";
print " ";
htmlの方に
<img src="xxx.cgi">
と書いてもCGIは実行されるのですが、html側は□に×(画像が表示できない状態)
になってしまいます。なんでしょうか?
>>239
違いますよ
0241nobodyさん
02/09/22 22:41ID:???イマイチ信用できないな。
でも、まぁ、ヒントだけ。
・1*1の透過GIF
・バイナリモード
0242nobodyさん
02/09/22 22:45ID:???えっ、ホントにやったの?
あなたhtmlをちゃんと理解してます?
画像ファイルを入れなきゃ画像は表示されませんYo
<a href="xxx.cgi">
<img src="nantoka.gif">
</a>
0243nobodyさん
02/09/22 22:49ID:???0244237
02/09/22 22:52ID:dGvJOxY3print `/bin/cat space.gif`;
で解決しました。が/bin/catの意味が分かりません。
どんな意味をもってるんですか?
0245nobodyさん
02/09/22 23:05ID:aEiiJGxoHTMLで書いてから
printとか付けたしてったら
エラーでまくりです。
とりあえず「"」の前にはちゃんと「\」を書いてますが
それ以外にも「\」を書かないといけない文字ってありますか?
0246nobodyさん
02/09/22 23:10ID:???山のように。
0248nobodyさん
02/09/22 23:12ID:aEiiJGxoマジですか?
出来ればよく使うタグで\をしなきゃいけない文字教えて下さい。
0249nobodyさん
02/09/22 23:29ID:Ao5uw2aw1個終われば次の1個がはじまって。。。
と、言う内容で。
0250nobodyさん
02/09/22 23:42ID:aEiiJGxo正規表現スレ見たけど、何がなんだか全然分からん。
教えて。
0252nobodyさん
02/09/23 00:00ID:Igutub/Eforkとやらの関数でaが一度に多数流れるのは見たんですが多すぎて逆に遅くなってしまいます。
んで、3個ぐらいに制限したいなと・・・
0255nobodyさん
02/09/23 01:25ID:???print "<a href="a.html">表示<a>"; #エラー
print \"<a href=\"a.html\">表示<a>\"; #エラー
print "<a href=\"a.html\">表示<a>" #エラー
print "<a href=\"a.html\">表示<a>"; #エラーじゃないけどSJISだと文字化け
print "<a href=\"a.html\">表\示<a>"; #OK
print "<a href=\"mailto:[email protected]\">メアド<a>"; #エラー
print "<a href=\"mailto:meidohuku\@moemoe.ne.jp\">メアド<a>"; #OK
0258nobodyさん
02/09/23 03:47ID:???ちょっと難しい内容だが、これを読んでくれ。
ttp://homepage1.nifty.com/nomenclator/perl/shiftjis.htm
要は苦労したくなければ、現状では文字コードは EUC-JP で
print <<HTML;
<a href="a.html">表示</a>
HTML
等としろってこったな。
厨でもなんでもいいけど、、、
面白い(興味を持てる)事したいだけなんだけどね。
(すれ違いってより、聞くとこ間違ったカナ)
0260nobodyさん
02/09/23 04:11ID:???0261nobodyさん
02/09/23 04:59ID:v/9sXn0Jたとえば関数なんかで
func{
local ($a,@b) = @_;
}
ってやる場合、my にできないよね?
こういう場合って、local でやるしかないかな〜、、
配列とか引き渡す場合、どうやってる?
0262nobodyさん
02/09/23 05:06ID:v/9sXn0Jfunc{
local ($a,*b) = @_;
print "変数の中身は→$a\n";
print "配列の最初の要素は→$b[0]\n";
}
たとえば、こう言う風に使うとき
@a = (1,2,3,4,5);
&func('オマエモナー',*a);
0263nobodyさん
02/09/23 05:10ID:v/9sXn0J>>262 の例で、
my $a = 'あほか?';
my @b = (1,2,3,4,5);
&func($a,*b);
で実行するとエラー出るよね??
my $a = 'あほか?';
local @b = (1,2,3,4,5);
&func($a,*b);
だったら、OKでした。なんか my と local が同じソース内に、ごっちゃになってるのが
気に入らないので、結局
local $a = 'あほか?';
local @b = (1,2,3,4,5);
&func($a,*b);
と、local で統一することに、、、でも、周りからは my 使えと、、、
0265nobodyさん
02/09/23 05:53ID:???my $a = 'あほか?';
my @b = (1,2,3,4,5);
&func($a,\@b);
func{
my($a,$b) = @_;
print "変数の中身は→$a\n";
print "配列の最初の要素は→$$b[0]\n";
}
my @b = (1,2,3,4,5);
&func($a,\@b);
sub func{
my($a,$b) = @_;
print "変数の中身は→$a\n";
print "配列の最初の要素は→$b->[0]\n";
}
0267nobodyさん
02/09/23 06:08ID:???答えは既に出ているから、
あなたが勉強するべきキーワードを挙げておくね。
・型グロブ
・my と local の違い
・リファレンス
0268nobodyさん
02/09/23 09:10ID:lfiSBGtK掲示板のような形のcgiで、フォーム入力で受け取った半角数字(1とか5とか)を数値として扱って、それを計算に使いたいのですが、そのままだとログ部分が空白になってしまったんです。
たとえば、
名前<INPUT TYPE="text" NAME="name" SIZE=25>
年齢<INPUT TYPE="text" NAME="tosi" SIZE=25>
こういうフォームに入力してもらい、名前・nobody 年齢・18才と入れると「nobodyさんの50年後は68才です!」と表示したいんです。
それで、「$abc = $tosi + 50;」としてみたのですが、その部分のログが空白になってしまうだけでした。
どうすれば、フォームから受け取った数字で計算出来るのでしょうか?
計算が間違っていないかは、
#!/usr/bin/perl
print "Content-type: text/html\n\n";
$tosi = 18;
$abc = $tosi + 50;
print "$nameさんの50年後は$abc才です!\n";
exit;
というだけので試して、間違っていないと確認しました。
名前は通常通り記入出来るのですが、年だけ空白の状態です。
どうすれば良いのか教えて下さい。
0269nobodyさん
02/09/23 09:24ID:???きっちり出るが。
0271nobodyさん
02/09/23 09:45ID:???常識的な範囲なら。
#!/usr/bin/perl より前に書いたりとかexit;より後ろに書いたらもちろん無理だが。
0272nobodyさん
02/09/23 09:51ID:???require "cgi-lib.pl";
# require "jcode.pl";
&ReadParse;
$tosi = $in{"tosi"};
してんでしょね。
0274nobodyさん
02/09/23 10:07ID:???$abcを使ってるとか。
$abcを出す直前に計算させてもダメ?
0275nobodyさん
02/09/23 10:08ID:???ん、それは大丈夫でした。けど、でもやっぱりだめなんです。
どうしてなんでしょう…。ログファイルに書き込めてないのでしょうか。
えと、もうちょっと考えてみます。簡単な筈なんですよね?
0276nobodyさん
02/09/23 10:37ID:???あっ、すいません。今気がつきました。
自分で1から組んでるやつじゃなくてですね、インサイドウェブさんのX-BBS Lineをちょっとだけ弄ったんです。
ですから、plとか全然使ってないみたいなんです。もしかしてそこがダメだったんですか?
>>273
それが入らないんです。もしかしたら>>272さんの仰る
$tosi = $in{"tosi"};をしてないからなんでしょうか?
>>274
はい、$abcは計算と、最後の表示にしか使っていないのです。
それで計算もちゃんと表示する前にしているのですが…。
0277nobodyさん
02/09/23 11:17ID:???0278nobodyさん
02/09/23 11:26ID:???改造…依頼じゃないような気がしたので。申し訳ございません。
アドバイス有り難うございました。
取り敢えず楽しようとしないで自分で1からやってみます。
0279nobodyさん
02/09/23 11:27ID:???0 + 50 はいくつ?
$abcを計算の後に使ってるなら空って事はないだろ。
その動作じゃ通らないブロックの中で計算してるとかじゃないか?
あと、フォームから送られたデータは勝手には変数に入らないよ。
入れる処理を自分で追加しないと。
0280nobodyさん
02/09/23 11:43ID:???掲示板で投稿された "http://〜"で始まるURLに自動リンクを貼りたいのですが、
その際に、リンクして行った人を数えるため、link.cgiにurlを渡してリンクさせ
ようと思ったのですが、
$message =~ s/([^=^\"]|^)(http\:\/\/[\w\.\~\-\/\?\&\=\;\#\:\%\+]+)/$1<a href=\"$2\">$2</a>/g;
$url = $2;
$url_ec = $2;
$url_ec =~ s/(\W)/'%'.unpack("H2", $1)/ego;
$url_ec =~ tr/ /+/;
$message =~ s/<a\ href=\"\Q$url\E\"/<a href=\"link.cgi?url=$url_ec\"/g;
このように書くと、最後だけがlink.cgi呼び出しになって、
それ以前のものは、通常にリンクされてしまいます。
link.cgiにエンコードしたurlを完全に渡す方法を教えて下さい。
0281nobodyさん
02/09/23 11:54ID:???$message =~ s/([^=^\"]|^)(http\:\/\/[\w\.\~\-\/\?\&\=\;\#\:\%\+]+)/$1<a href=\"$2\">$2</a>/g;
がめちゃくちゃだよ。
正規表現道場で鍛えた方がいい。
0282nobodyさん
02/09/23 12:07ID:???$tosi = $in{"tosi"};
が、データを変数に入れるって事ですよね?
ですがこれはjcode.plを使った時だけとかじゃ…ないのでしょうか。
このもともとのcgiにも使われていないんです。
0283nobodyさん
02/09/23 12:13ID:???0284nobodyさん
02/09/23 12:15ID:???じゃあそのスクリプトはどうやって入力データを変数に格納してるんだ?
0285nobodyさん
02/09/23 12:24ID:???jcode.plはコメントにしてるだろうが。
変数を取り込んでるのは、cgi.plだあよ。
最近のは、use CGI;とかじゃねの。
0286280
02/09/23 12:32ID:???正規表現道場で少し勉強して来ました。URLの正規表現は変えようと思います。
>>283
ありがとうございます。
でも、それだとURLエンコードが出来ないので困っています。
link.cgiに渡すURLは、エンコード済みのものにしたいのですが。
0288280
02/09/23 12:55ID:???http://www.google.co.jp/search?q=%E6%AD%A3%E8%A6%8F%E8%A1%A8%E7%8F%BE&ie=UTF-8&oe=UTF-8&hl=ja&btnG=Google+%E6%A4%9C%E7%B4%A2&lr=
こういうURLを貼られると、&があるので、URLが途中までしかlink.cgiに渡せないんです。
0289nobodyさん
02/09/23 13:10ID:???エンコード云々の問題じゃないでしょ。
&もメタ文字だからエスケープすれ。
>>283さんのじゃだめなんか?
その後、&link.cgi(metaquote($message))じゃだめなんか?
0290AOHU.zVE
02/09/23 13:30ID:???m/\Q$tai\E/
0291nobodyさん
02/09/23 13:34ID:pjFAvyv+1度目の呼び出しはうまくいくのですが、2度目以降は
「現在処理中の操作です」というメッセージが出て
ソケットの育成ができません。なぜなんでしょうか?
関数の一部を抜粋
$socket = IO::Socket::INET->new( PeerAddr => $host,
PeerPort => $port,
Timeout => '30' );
# 以下が実行されてしまい「現在実行中の操作です」と表示される。
unless ($socket) {
print "socket: $!";
}
0293291
02/09/23 14:42ID:pjFAvyv+関数の最後にclose($socket);と書いてみると
今度は、以下のようなエラーメッセージが出ました。
やはり2度目のソケット育成に失敗しているみたいです。
Can't use an undefined value as a symbol reference at ./test.pl line 185, <FILE> line 35.
socket: 現在処理中の操作です
コード抜粋
181:unless ($socket) {
182: print "socket: $!";
183:}
184:
185:print $socket "GET $url HTTP/1.1\n";
186:print $socket "Host: $host\n";
187:print $socket "Connection: close\n\n";
0294282
02/09/23 15:06ID:???>>285
解らないです。
cgi-lib.plもjcode.plもcgi.pmも使っていないように見えるのです。
http://www.galstown.m-n-j.com/8/internet/lia/board.txt
↑これにcgi-lib.plかcgi.pmを組み込もうとしたんですけれど、悉く失敗してしまって。
0295nobodyさん
02/09/23 15:41ID:???0296nobodyさん
02/09/23 15:41ID:???スマソ書き込めた。
>>294
> $nini = $comment + 50;#ここに、年齢の式を書いてみました。
の位置が違う。
0298nobodyさん
02/09/23 17:04ID:???私は、>>294さんではないんですが、
cgi.libもCGI.pmも何も使わずにユーザーの入力を直接受け取る
っていうのは、初めて見たのですが、結構多いんでしょうか。
0299nobodyさん
02/09/23 17:06ID:???処理
}
という文で、例えば@data[0]を処理している場合にのみ別の処理に分岐させるには
どうしたらいいでしょうか?
つまり、@dataのなかの今何行目をあつかっているのかを得たいのですが・・。
if(@data[0]){&print;}
とやってもうまくいきませんでした。
0300297
02/09/23 17:07ID:???多いです。けどマネするのはやめましょう。
http://www.perldoc.com/perl5.6/pod/perlfaq9.html#How-do-I-decode-a-CGI-form-
0301299
02/09/23 17:10ID:???なんかスマートな方法がありそうなんですが・・
0302297
02/09/23 17:12ID:???http://www.kt.rim.or.jp/%7ekbk/perl5.doc/perlfaq9.html#How_do_I_decode_a_CGI_form_
0303AOHU.zVE
02/09/23 17:26ID:???$x_x=@data;
for($i=0;$i<=$x_x;$i++){
if($i eq 0){
&別の処理{};
print $date[$i];
}else{
print $date[$i];
}
↑適当
0304294
02/09/23 17:34ID:???>>297
ありがとうございました。そうですか、問題があるのなら使用を諦めようと思います。
やはり自分で最初からもう一度頑張ってみますね。
取り敢えず入門書でも買って来よう…
0306nobodyさん
02/09/23 17:37ID:???Oh, thanks.
日本語訳まずいね。最初のとこだけでも、原文では、
「POSTのCONTENT_LENGTHと同じバイト数をSTDINから盲目的に
読むプログラムやGETのデコードでQUERY_STRINGをひっつかむプログラム
」って書いてあるのに、和訳では、
「$ENV{CONTENT_LENGTH} や$ENV{QUERY_STRING}を含んだプログラム」
ってなってるよ。他にもいっぱい誤訳あるけど・・・
0308306
02/09/23 17:42ID:???だから>>300読むといいよ。そこには、うまく動かないこともあるって
書いてあるけど、あのスクリプトは、その上、受け取った変数、
例えば、$commentをそのまま検証しないでif文に入れてるから、
exec文でも書いてあったらやばいんじゃないかってことだと。
0310297
02/09/23 17:45ID:???ゴメン。新しいのがあった。
http://www.kt.rim.or.jp/%7ekbk/perl5.005/perlfaq9.html#How_do_I_decode_a_CGI_form_
>>305
スクリプトを読んで分らないなら、とにかく
使わないでください。
0312nobodyさん
02/09/23 18:00ID:???ハッシュデータをサブルーチンへ渡そうと思うのですが、
%DAT = ( "2by4" => "8", "4by8" => "32");
&D_write(\%DAT);
sub D_write {
my($data) = $_[0];
print"これがデータ : $$data{'2by4'}";
return 1;
}
まず"\%DAT"でリファレンスを渡しますが、その受け取りが普通の変数なのは"メモリの番地自体"を収めているから
という認識で良いのでしょうか?
また、さらにその値自体を参照したいときは1次参照なので$を1つだけ加えて"$$"になるという考え方でよいのでしょうか?
0313nobodyさん
02/09/23 19:07ID:???$aは${a}って書けるのはわかるよね?
なら $$data{'2by4'} は ${$data}{'2by4'} ってなるのもわかるよね?
なら %$data (%{$data}) ってなるのもわかるよね?
そゆこと。
0314299
02/09/23 20:28ID:???sub make{
foreach $data(@file){
$_=split(/,/,$data);
&print;
$a++;
if($a eq 10){last;}
}
}
sub print{
$list=<<"_HTML_";
$list
$_[1]$_[2]$_[3]
_HTML_
}
299です。>>303さんレスありがとうございます。
勉強中の身でもうひとつ…
上記の例で、CSVデータから頭10件を取り出して表示したいのですが、
foreachで強制的に10件カウントしたら終わらせているのですが
こうじゃなくて普通にforあるいはwhileで書いたらどうなりますか?
@fileから取り出す記述が分からないです。
また速度は変わりますか?
どうも適当にかじってるので基本的なものが出来てないです。
0316nobodyさん
02/09/23 20:49ID:iHNT8XWdフォームに入力した文字が半角じゃないといけない所が全角だったり、
入力する数がおかしかったりする時に
間違ってますよと表示するにはどうすればいいですか?
0317さやか
02/09/23 21:07ID:UR9fVmIXこれのps_user.cgiだと思うんですが588行あたりが
たぶんネックです。
さやかは、後から登録した奴は下に表示したいんです
検索エンジンって、フリーでもらえる奴はみんな
後から登録されたサイトが上に出るじゃないですか
それを逆にしたいんです。
難しいです。こんな質問してるさやかは嫌いですか?
私体も弱いんです。男の人も怖いし。優しい人いないかな?
ちなみに男って言われました。文章が男っぽいのかな?
私の周りにはくわしい人いません。男の人ならくわしい人いそうですが
男の人さやか苦手です。女子高生です!←男の人ってこうかくと
優しくなるらしいですね。うそじゃないですよ。
0318nobodyさん
02/09/23 21:24ID:???それだけの説明では、こう答えるしかない。
$入力された文字列 =~ /半角を表す正規表現/ or &間違ってますよと表示
$入力された数字 =~ /数字以外を表す正規表現/ or &間違ってますよと表示
それぞれの正規表現は頑張って調べてね。
0319nobodyさん
02/09/23 21:28ID:???質問者が誰かなんてどうでもいいんだよ。
なんで人を小馬鹿にしたような質問の仕方するかなぁ。
優しい人?そんな聞き方されて喜んで答える奴はタダのスケベだろ。
つーかそんな聞き方されたら答える気無くなるつーの。
答えが欲しけりゃ
普 通 に 聞 け 。
0321さやか
02/09/23 21:42ID:UR9fVmIXでも、さやかにはくわしい人いないの・・・。
迷惑だったですよね・・・。
すいません。一から勉強します。>>320ショックです。
そんな酷い事いわれると。
0322nobodyさん
02/09/23 21:46ID:???SJISならこんな感じかな
if(length($in{kana}) > $kana_max ||
length($in{eigo}) > $eigo_max ||
length($in{suuji}) > $suuji_max){error('文字多いよ');}
if($in{kana} =~ /[^\x20\xa7-\xdd]/i){error('半角カナで入れてね');}
if($in{eigo} =~ /[^\x20a-z]/i){error('半角英字で入れてね');}
if($in{suuji} =~ /[^\x20\d]/){error('半角数字で入れてね');}
>>321
ここは匿名掲示板だからね
相手の概要はわからないほうが色々と都合が良いのよ
むしろ余計な情報は邪魔
0324nobodyさん
02/09/23 21:53ID:???動作を勉強したいんじゃなくて既製のスクリプトを改造したいのなら
こっちじゃない?
【 スクリプト改造工房 PART 5 】
http://pc.2ch.net/test/read.cgi/php/1028193595/l50
0325さやか
02/09/23 21:56ID:UR9fVmIXseek(ファイルハンドル,0,0)
これを0→2にしてもだめだったです。
たぶんこれが悪の正体です↓
while(<IO>){
if (index($_,">$siteyrl<")!=-1){
@y2=split(//<>/,$_);
close(IO);
とにかくこの辺がキーだと思います。苦しい。
0326さやか
02/09/23 22:06ID:UR9fVmIXなんかロールプレイングみたい!
0327nobodyさん
02/09/23 22:13ID:???> if($in{suuji} =~ /[^\x20\d]/){error('半角数字で入れてね');}
理解して参考にする人はいいが、丸写しする人は困るよな。
$n = '2' . "\x20" . '3';
print $n . "\n";
print $n + 0;
相手が出していない条件を黙って付け加えるのは危険だよ。
0329318
02/09/23 23:58ID:???半角→半角以外
or→andだね。
0330nobodyさん
02/09/24 01:45ID:???ファイルを読み込み・書き込みする場合、
+<、+>の入出力両用をあまり使用しないのは何故でしょうか?
0331nobodyさん
02/09/24 02:19ID:???ファイルサイズを求める場合
$size1=(stat( $filename))[7];#statを用いて
$size2=(-s $filename)#ファイルテスト演算子
それぞれの違い・利点は何でしょう?
0332nobodyさん
02/09/24 03:24ID:???意外と(存在|使い方)を知らない人が多いから。
…じゃ、答にならない?
使える場面では気にせず使えばいいよ。
>>331
# stat の返す 13 要素から成るリストを作り、その 8 番目の要素を得る
$size1 = ( stat $filename )[7];
# ファイルサイズのみスカラー値として得る
$size2 = -s $filename;
perl のソース確認したワケじゃないけど、内部的には大差ない気が。
でもたった一つの要素の為にリスト吐かせるのはバカらしいと思う。
「8 番目」よりは「-s」の方が、パっと見で分かりやすいし。
0333nobodyさん
02/09/24 04:11ID:???作業を終えるまでオンメモリで行ける小規模なものなら+<は使うが
巨大なログをテンポラリに小出ししながら記録していく場合は
ログへの直書きは必要無いので普通に読みテンポラリに普通に書く。
331は速度的にはどっちも似たようなもんだね。
statは他の情報も取れるし一度使えば後で何度でも結果が
使いまわせるのでタイプが面倒じゃないならstatのが
良いかも。
0334294
02/09/24 08:49ID:???$name = $in{'name'};
$a1 = $in{'a1'};
$a2 = $in{'a2'};
$a3 = $in{'a3'};
〜〜〜以下続く
$a15 = $in{'a15'};
$b1 = $a1 * 3;
$b2 = $a2 * 6;
$b3 = $a3 * 5;
$b4 = $a4 * 3;
$b5 = $a5 * 3;
$c = $b1 + $b2 + $b3 + $b4 + $b5;
$b6 = $a6 * 3;
〜〜(略)
$b10 = $a10 * 3;
$d = $b6 + $b7 + $b8 + $b9 + $b10;
(もう一度繰り返して15まで終わらせて、最後の式を$eにします)
$f = $c + $d + $e
として、
print "$name … $c : $d : $e : 「$f」\n";
と示すと、「1、2、3、4、5、1、2、………5」と入力したとすると
名前 … 57 :=@:=@: 「156」 と示されてしまうのです。
ログを見てみると、<>57<>45<>54<>156<>となっていて、同じ数字を入力して同じ計算をしても違う数字になっていて…。一番最初のはあっているのですが。計算の仕方を間違えてしまっているのでしょうか?
0336334
02/09/24 12:18ID:???ありがとうございます!急いで修正します。
…では、計算がおかしいのはどうしてでしょうか。
<>57<>57<>57<>171<>にならないとおかしい筈なのですが…。
0337nobodyさん
02/09/24 13:59ID:aoR+W3Ks**,***,***,***,**,***
**,***,***,***,**,***
**,***,***,***,**,***
とデータ(データは動的)が入っています。
これを配列data[][]
にいれるのどうしたらいいのでしょうか?
すいません教えてください。
だれかやさしい人お願いします
0338nobodyさん
02/09/24 14:29ID:???while(<>){
@date=split(/,/,$_);
}
0339訂正
02/09/24 14:30ID:???while(<FILE>){
@date=split(/,/,$_);
}
0341nobodyさん
02/09/24 14:36ID:???my @data;
open F, $csv;
while (<F>)
{
chomp;
$data[$. - 1] = [ split /,/ ];
}
(ここ数日変な質問のしかたする人が目立つ気がする)
open(CSV,$filename);
my@data=map{chomp;[split/,/]}<CSV>;
close(CSV);
0343nobodyさん
02/09/24 14:59ID:4thlbHdp# findpattern
while (<STDIN>) {
if (/Jackson$/) {
print;
}
}
findpattern < people.txt
と、本のとおりにやって、Jacksonで終わるデータだけを出力したいのに、
何も出力せずに終わってしまいます。
いろいろ試してみましたが、文字列の末尾にマッチさせる$のときだけ
うまくいかないようです。
原因がわかりません。
どこがおかしいんでしょうか?
0345nobodyさん
02/09/24 15:05ID:???どうすればいいんでしょうか。
ベンチマーク?で検索してもいまいちわからないもので..おながいします。
0346nobodyさん
02/09/24 15:09ID:???下の2行をスクリプトの2行目辺りに置いて
use Benchmark;
$start = new Benchmark;
下の3行をexitする直前にでも置いとけば?
$last = new Benchmark;
$bench = timediff($last,$start);
print timestr($bench);
0347nobodyさん
02/09/24 15:11ID:4thlbHdpwhile (<STDIN>) {
chomp;
if (/Jackson$/) {
print;
}
}
でしょうか?
ダメでした。
入力のパーサーがおかしいのか、処理がおかしいのか、
データを埋め込みにしてみるなりして、どこが問題なのか
切り分けをしてみたらどうでしょう>
>>345
Benchmarkモジュールって標準ではいってなかったけ?
http://search.cpan.org/author/JHI/perl-5.8.0/lib/Benchmark.pm
0349nobodyさん
02/09/24 15:20ID:???ああ、STDINか。POSTデータ?
while(<STDIN>){print "[$_]";}
一度こんな感じでどんな形でデータが入って来てるか見てみ。
0351nobodyさん
02/09/24 15:37ID:???1 wallclock secs ( 0.10 usr + 0.01 sys = 0.11 CPU)
てなカンジのものがでてきますた
哀しいかな読みとれません
意味を教えていただけると幸いでつ
0352nobodyさん
02/09/24 15:43ID:4thlbHdpこんなかんじでした。
[Micheal Jackson
][Janet Jackson
][Joe Jackson
][Joni Mitchel
][Jackson 5
][Micheal Johnson
][Jon Anderson
][Sade
]
末尾に何かがあるみたいですが、
chomp;を入れると、"]"しか表示されませんでした。
>>350
キャリッジリターンとは改行コードのことでしょうか?
取り除く方法はchompでは間違ってますか?
上の結果を見ると、違うっぽいですがわかりません。
0353b
02/09/24 15:43ID:PxGGzvM00354nobodyさん
02/09/24 15:45ID:???%giko = ( "1" => "1gorula", "2" => "2dorula", "3" => "itteyosi");
%mona = ( "2" => "2cher");
この2つのハッシュから
%abone = ( "1" => "1gorula", "2" => "2cher", "3" => "itteyosi");
を作ろうとしたら
while (($key, $value) = each(%giko)) {
if( defined($mona{"$key"}) ){
$giko{"$key"} = $mona{"$key"};
}
}
とかやるしかないんでしょうか?
これだと
%mona = ( "2" => "2cher", "4" => "sindeyosi");
のような形式に対応できないし、もっと簡潔な方法は無いかなと思うのですが・・・。
0356nobodyさん
02/09/24 16:03ID:???ありがとうございます。
Cygwin 上でしたが、できました!
もし、よろしければ、\r について教えて下さい。
Unix 上では \n の変わりに \r を使うのでしょうか?
で、chomp は \n は取り除けても \r は無理ってことですか?
0357355
02/09/24 16:13ID:???Unix 上なら普通 \r なんか使わない (\n しか使わない) ので、
問題は起きない。
DOS (Windows) 上だと、自動的に \r が入力から取り除かれるのかな?
Cygwin はよく分らない。
詳しい人の解説キボンヌ。
0358nobodyさん
02/09/24 16:19ID:aoR+W3Ks>>**,***,***,***,**,***
>>**,***,***,***,**,***
>>**,***,***,***,**,***
>>とデータ(データは動的)が入っています。
>>これを配列data[][]
>>にいれるのどうしたらいいのでしょうか
if(!open IN,'< Q1.dat'){
print "オープンエラー";
}
@list=<IN>;$row=0;
foreach $rec(@list){
@data=split("/,/",$rec);
for($j=0;$j<8;$j++){
$mondai[$i][$j]=$data[$j];
print "($i)(($j)$mondai[$i][$j]\n";
print "$mondai[$i][$j]\n";
}
$row++;
}
これじゃだめなのですか?
わかりません PERLの超初心者
0366nobodyさん
02/09/24 22:39ID:???undef $b;
undef $x;
これを1行にまとめられますか
0367nobodyさん
02/09/24 22:52ID:???0368nobodyさん
02/09/24 23:03ID:???036969
02/09/24 23:32ID:???0370nobodyさん
02/09/25 01:11ID:???最初から10文字無いものは後ろに空白で(10-title文字数)を入れて揃えるとして
どうしたらいいのでしょうか?
$title = substr($title,0,10);
if(length($title) < 10){$title = sprintf(???????,$title)};
多分こんな感じでしょうか?
御教授願います〜
0371nobodyさん
02/09/25 01:19ID:???0373nobodyさん
02/09/25 02:18ID:???open ( IN, "$file" ) ;
foreach ( 1 .. $x ) {
$data = <IN>;
print "$data\n" ;
}
close (IN) ;
1行づつデータを読み込み表示しているのですが、
たとえばこれだとデータのもともとの行数が100行以下ですと
データが無い行は空白がprintされてしまいます。
データがある最後の行が終わったら読み込みをやめるには
どうしたらいいのでしょうか?
0374373
02/09/25 02:21ID:???if ( $data ){ print "$data\n" ; }
にすればいいのか
0375nobodyさん
02/09/25 02:22ID:???while(<IN>){
print;
}
close(IN);
0376nobodyさん
02/09/25 02:27ID:???while (<IN>){
print;
last if $. == 100;
}
0377nobodyさん
02/09/25 02:28ID:???0378nobodyさん
02/09/25 02:29ID:???大丈夫なのか?
0379nobodyさん
02/09/25 02:32ID:???まぁ100回くらい繰り返しときゃ大丈夫だろって事だったり
もしそうなら一番スマートなのは
open(IN, "$file");
print while (<IN>);
close(IN);
0380nobodyさん
02/09/25 02:36ID:???jcode.pl の h2z_euc って使えます?
&jcode::h2z_ecu( \$str ); ってしてもスペースしか出ないんです。
&jcode::tr( \$str, '0-9A-Za-z', '0-9A-Za-z' );
は、ちゃんと置換してくれるんですけど。
0381380
02/09/25 02:38ID:???ecuはeucね。
ソースの中では間違ってない。
0382nobodyさん
02/09/25 02:44ID:???質問とは関係ないけどforeachは配列操作で回数指定ならforかと
どっちでも動くのを承知で使うにしてもやっぱforかと
0384373
02/09/25 02:48ID:???そうなんです。
>>375-379
よくわからないのは、openされた$fileから
何の変数に入れていることになるんですか?
print; はprint "$_"; ということですか?
0385nobodyさん
02/09/25 02:52ID:???>print; はprint "$_"; ということですか?
そう。
print; = print STDOUT "$_";
0387373
02/09/25 02:55ID:???while (<IN>);
は
while ($_ = <IN>);
ですか?
0389nobodyさん
02/09/25 03:07ID:???0390nobodyさん
02/09/25 03:13ID:???1:自分はこう言う事がしたい。
2:それでこんな風にやってみたが・・・
3:それだとこんなエラーが出て上手く行かなかった。
1と3が無いと誰も答えられないよ。
良い回答は良い質問から。一緒に勉強しましょう。
0391nobodyさん
02/09/25 04:52ID:???は
if ($a eq "xxx" or "yyy") {
と同じ意味?
0392nobodyさん
02/09/25 05:10ID:???全然違う。
0393nobodyさん
02/09/25 05:23ID:???というような記述があって、サブルーチンに飛んでいるのですが
これは⊂と全く同じ意味なのでしょうか
\の意味がわかりません
前者はサブルーチンfooのリファレンスを取得して$barに代入。fooは呼ばない。
後者はサブルーチンfooを呼んでその戻り値のリファレンスを$barに代入。
STDOUTじゃなくてselectされてるハンドルだし
print;≠print STDOUT "$_";
print;≒print STDOUT $_;
print;=print $_;
じゃない?
0399nobodyさん
02/09/26 01:48ID:???「if (($a eq "xxx") or ($a eq "yyy"))」は
$aの内容が「xxx」または「yyy」の時だけ真(true)だが
「if ($a eq "xxx" or "yyy")」は
「yyy」の結果が必ず真(true)になるから常に真(true)になってしまう。
0400.....
02/09/26 02:39ID:???log2.dat
log3.dat
・
・
・
log100.dat
という名前のファイル群を次々開いてすべての行を一個の配列にさせることって可能でしょうか?
自分でサブルーチンに挑戦してみたけどうまくいかなかった…
0401nobodyさん
02/09/26 02:41ID:???0402nobodyさん
02/09/26 05:46ID:???for(0 .. 100){
$hoge++;
open(IN,"log$hoge.dat");
$numo. = <IN>;
close (IN);
}
print "$numo";
0403nobodyさん
02/09/26 05:54ID:???------------------------------------------------------------------------
CGIWrap encountered an error while attempting to execute this script:
Error Message: Exec format error
Error Number: 8
This message usually indicates there is a problem with the script itself. The owner of the script needs to check the #! line for correctness.
↑こんなエラーが出てしまって一向にBBS設置できないんですが
どーしてなんでしょうか?
0404nobodyさん
02/09/26 06:41ID:???CGIの話はこちらへ。
http://pc.2ch.net/test/read.cgi/php/1032704121/l50
0405nobody
02/09/26 11:41ID:???$hoge = 'mona giko morara';
$piyo = ( $hoge =~ /mona/ ); #1
@foo = ( $hoge =~ /mona/ ); #2
@bar = ( $hoge =~ /(mona)/ ); #3
print $piyo @foo @bar;
は、
1 1 mona
なんですが、#1,#2 はマッチした数、@barはマッチした文字列が入る
のですか?
あと、配列の要素数は @foo や $#foo で分かりますが、
ハッシュの要素数はどうやって調べますか?
0406nobodyさん
02/09/26 12:00ID:???requireされたライブラリの中のサブルーチンはrequireしたプログラムに関係なくても
全部ロードされますか?
0407nobodyさん
02/09/26 12:09ID:???#1 はスカラーコンテキストで評価しているので、マッチしたかどうかが
真偽値 (1 か "") で返される。
#2 はリストコンテキストで評価し、且つパターン中にカッコが含まれない
ので、マッチした場合は (1) というリストが返される。
#3 はリストコンテキストで評価し、且つパターン中にカッコが含まれる
ので、カッコにマッチした部分から成るリスト値 (この場合は ("mona"))
が返される。
…と、駱駝本に全てハッキリ書いてある。
ハッシュの要素数は keys をスカラーコンテキストで評価。
$foo = keys %foo;
>>406
Yes.
0409nobodyさん
02/09/26 12:29ID:???ライブラリには使わないサブルーチンも入っているものだと思うのですが、
極論すると動作を早くするには呼び出すサブルーチンだけのファイルを作って
requireするか、全部1つのファイルに書けってことになりますか?
0412nobodyさん
02/09/26 17:06ID:???スカラー変数のデータをバイト単位で操作するにはどうすれば良いのでしょうか?
例えば$aのデータが16進で01 02 03 04 05 06 07 08 09の9バイトの場合に
0x03を0xddで置き換えたり、任意のバイトを削ったりということです。
substrを使って置き換えようとしたら、置き換え文字が10進数換算の文字列に
なってしまい(0xdd なら"221"で0x32 0x32 0x31へ)上手くいきませんでした。
0415412
02/09/26 20:36ID:???アドバイスどうもです。
やりたいことはバイナリエディタで見た場合次のように
変更したいということです。
スカラー値をファイルに書きだしてバイナリエディタで見ています。
変更前16進表示:01 02 03 04 05 06 07 08 09
↓
変更後16進表示:01 02 dd 04 05 06 07 08 09
\xddでsubstrすると、文字通り次のようになってしまいました。
01 02 5C 78 64 64 04 05 06 07 08 09
0416nobodyさん
02/09/26 21:02ID:pOKoAU+F■ファイル名またはパス名に日本語を使用していると上手くアップロードできません。
■半角アルファベットのみならアップロードできます。
--- 入力フォーム ここから------------
<FORM ACTION="./upload.cgi" method ="POST" ENCTYPE="multipart/form-data">
<INPUT TYPE="file" name="file_name" ><br>
<input type="submit" name="upload" value="アップロード">
</FORM>
--- 入力フォーム ここまで------------
0417416
02/09/26 21:03ID:pOKoAU+F$common = getParameter();
$filename = $common->{param}->{file_name};
$file="";
while($bytesread = read($filename, $buffer, 2048)) {
$file .= $buffer;
}
open(OUT, "> ./$ファイル名");
print(OUT $file);
close(OUT);
exit;
sub getParameter() {
my $this;
$cgi = new CGI;
for my $name ($cgi->param) {
if (@{$cgi->param_fetch($name)} > 1) {
$this->{param}->{$name} = $cgi->param_fetch($name);
} else {
$this->{param}->{$name} = $cgi->param($name);
}
$this->{param}->{$name} = jcode->set(\$this->{param}->{$name}, "sjis")->euc;
}
return $this;
}
---- upload.cgi ここまで ------
0418416
02/09/26 21:04ID:pOKoAU+Fコメントにすると、日本語ファイルでも普通にアップロードできるので
変換するとファイル名が変わってしまうせいかと思い、代わりに
$filenameをsjis→eucに変換して試してみたのですが、何故かダメでした。
どうも、readした際にうまく取得できていないみたいなんですが。
理由のわかる方、同様の経験がある方、いらっしゃいましたら教えてください。
(長くてゴメンなさい)
0419nobodyさん
02/09/26 21:09ID:???sub hd { join ' ', map unpack('H2', $_), split //, $_[0] }
$bin = "\x01\x02\x03\x04\x05";
print hd($bin);
print "\n";
substr($bin, 2, 1) = "\xdd";
print hd($bin);
>>416
無用なトラブルを避けたいなら、パスやファイル名に
日本語 (というか多byte文字) を使わない方がいい。
サーバ/ブラウザ双方の環境によって全然違ってくる。
CGI.pm 使った事ないんで、その辺どの程度対応
してるのかは知らんが。
0421nobodyさん
02/09/26 21:26ID:???君のソースをコピペきぼんぬ。
>>416
元の文字コードがsjisではないのではないかと言ってみるテスト。
uploadはとりあえず置いといて、ファイル名に入れた文字列と
そのときの$cgi->param('filename')を書いてみてくれんか。
0422412=415
02/09/26 21:50ID:???今いろいろ探っていたのですが、最初は
$replace_character = \xdd;
substr($buffer, $rep_position, 1) = $replace_character;
413-414を見たときにはシングルクオートで囲んで、
$replace_character = '\xdd';
substr($buffer, $rep_position, 1) = $replace_character;
420を見てダブルクオートで、やっと上手くいった次第です。
$replace_character = "\xdd";
ダブルクオートでも最初と同じ結果だろうと思って確かめていませんでした。
うーん、自分自身 ダブルクオートを使ったときの意味合いが良く解っとりません。
0423412=415
02/09/26 21:56ID:???最初は0xddを使っとりました。
$replace_character = 0xdd;
0424nobodyさん
02/09/26 22:33ID:???sjis→euc変換をしているところをコメントにし、
$filename の変換は、
> while($bytesread = read($filename, $buffer, 2048)) {
> $file .= $buffer;
> }
よりも後にしてみるとどうよ?
0425メモがわりにカキコ
02/09/26 23:20ID:???列じゃないです。"" を overload してファイル名っぽく
見せているだけの、ひみつのパッケージ (Fh) に bless
されたリファレンスらしい。
0426nobodyさん
02/09/27 01:44ID:HP3sTChTuse vars qw($aaa,$bbb,$ccc);
これで'$aaa,$bbb,$ccc' is not a valid variable name under strict varsエラーがでます。
普通の変数名だと思うのですが何がいけないのでしょうか。
0427nobodyさん
02/09/27 01:47ID:TZvB0TqN821 : :02/09/27 01:44
ё[No.3121] お知らせ by 地蔵 2002年09月27日 (金) 01時02分57秒【この記事にレス】
比ヤングについての情報をお持ちの方、連絡ください
現在警察に相談中です
今後の処理を円滑に進めるために彼の連絡先等を教えていただけるとありがたいです
ご協力お願いします
http://obuchi.naikaku.com/angriffbbs/dempa.html
0429nobodyさん
02/09/27 02:37ID:???$a = "Win98";
$b = $a;
$b =~ s/Win/Windows/;
とすればうまくいったが、もっとシンプルな書き方はありますか?
0430nobodyさん
02/09/27 02:44ID:???0431nobodyさん
02/09/27 02:47ID:???430のような回答はやめてください。
0432nobodyさん
02/09/27 03:32ID:???俺は430じゃないけど回答してもらっといてやめてくれとは何様?
429に対する答えが430じゃ間違ってるとでも?
意図したものじゃないとして、自分の例が悪かったという思考が何故働かない?
>良い回答は良い質問から。
0434nobodyさん
02/09/27 03:44ID:???$aは何が入ってくるかわからないものとしてください。
"Win95"かもしれないし"Win2000"あるいは"WinXP"かもしれない。それ以外かもしれない。
0435nobodyさん
02/09/27 03:57ID:???分からん時は目で確かめる。
print join '/', (0xdd, '\xdd', "\xdd", '\n', "\n", '');
>>429
($b = $a) =~ s/Win/Windows/;
0436nobodyさん
02/09/27 04:58ID:EoYu/tZy英語にはない表記のアルファベットなど、「英語以外の表記や機種依存
文字」が使用された場合、それらを全て「*」という文字に変換したい
のですが、その場合の方法を教えて下さい。宜しくお願いします。
0437hmk
02/09/27 05:17ID:???例えばこんなのでいいのか?
0438yahooo!!アダルト
02/09/27 05:31ID:YxOmbJ3N0439nobodyさん
02/09/27 06:25ID:nnok+0boあ、それだけでよかったのですか。ありがとうございます。
初心者まるだしの質問で申し訳ありませんが、この場合、数字以外の
「#」「$」「~」などの記号はそのまま表記されますよね?
宜しくお願い致します。
0440nobodyさん
02/09/27 07:12ID:???手元にテスト環境が無いのかい?
自分で確認した方が、人に聞くより早いし、
相手を手間取らせずにすむよ。
YES・NOで答えられる質問は、特にそう。
実際に試したうえで、分からない点が出てきたら、
また質問してね。
※ ちなみに質問の答はNO
[^a-zA-Z0-9 ] が何を表しているか、考えよう。
0441nobodyさん
02/09/27 08:34ID:???わかんないからな…
JIS避けはこんな感じ?
s/\x1b\x24\x40(.*?)\x1b\x28\x4a/'*' x length($1)/eg;
んでその他と。
s/[^\x00-\x7e]/*/g;
0443hmk
02/09/27 15:45ID:???ttp://www.din.or.jp/~ohzaki/perl.htm
ここの「文字の正規表現」が参考になると思われ。
儂がPGやってた頃には、ここをよくみてますた。
>>441 >>442
#/usr/bin/perl -Lsjis こんなオプションつけると、
2バイト目を気にしなくてもよくならなかったっけ?
間違ってたらスマソ。
0444nobodyさん
02/09/28 01:46ID:iyuQXvIdつけようと考えています。
以下のようなものなのですが、Perlで作成しても
負荷が大きかったりとか、問題ないでしょうか?
現在300件ほどのデータがあって、
一件当たりが400文字(2バイト文字換算)程度です。
月に数件ずつ増える予定です。
サイトへのアクセス数は、現在一日に100回くらいです。
ただし、検索機能を使う人はもっと少ないと思います。
ホストはプロバイダのものを使用します。
(何サイトが一台のマシンを利用しているのかなどはわかりません。)
スクリプトの仕様は、まだ決めていませんが、
マッチ数が10件程度に小分けして表示するなど、
軽くなるようにはするつもりです。
どういうCGIが、高負荷でプロバイダからお叱りを受けるものなのか、
わかっていないので、作成する際に注意する点をお教えください。
0445nobodyさん
02/09/28 01:57ID:???チャットのように秒単位で絶えずアクセスし続けているようなCGIでもなければ怒られる事はないかと。
あとCPUを1秒以上使用したスクリプトは強制停止させられるところなどもあるので
その辺が目安かも。
ただプロバイダのサーバは基本的にかなり重いのでファイルロックがしっかりしてないと
あっさりログが飛ぶかも。
0446nobodyさん
02/09/28 02:28ID:???CGI配布サイトなどの掲示板スクリプトなどが、
ログを少なめにしたりしているので、
ひょっとして掲示板のログ100件程度でも辛いのかな? などと
考えていましたが、アクセスが重なる時がマズイんですね。
>マッチ数が10件程度に小分けして表示するなど、
>軽くなるようにはするつもりです。
深く考えずに書いてしまいましたが、
これってマッチしないとファイルの最後まで
検索しつづけますね。
便利でかつ軽いというものが思いつかないのですが、
項目別にログファイルを分けて、検索する対象を限定するなど、
いろいろ考えてみようと思います。
ありがとうございました。
0447nobodyさん
02/09/28 02:37ID:???全文検索なんだからそれで良いんじゃないの?
ファイル開く前に条件を整理して軽い条件からindexで流して
一気に対象を絞り込むとか。
0448nobodyさん
02/09/28 03:01ID:???#!/usr/bin/perl
main:{
printf("Hello, world.\n");
exit(0);
}
0449444
02/09/28 03:49ID:???言われてみればそうですね。
それに、現状では巨大なデータベースというわけでもないですし、
アクセス数も大したものじゃないですし、
負荷について考えすぎのような気もしてきました。
一応いろいろと公開されているソースも読んでから(C言語の方が多いのかな?)、
作成してみます。
0450nobodyさん
02/09/28 10:52ID:???今、勉強しているのはフォームからデータを受け取り、
そのデータをメールで送信するプログラムなのですが、
メールの送信プログラムで
MIMEエンコード→メールヘッダ作成→メール送信(SENDMAIL)の流れは
みなさんどのように記述されてますか?
ネット上にUPされてるソースを見てるのですが、
いろいろな書き方があってどういう風に書けばいいのかがいまいち
よくわかりません。
ひとことアドバイスお願いします。
また、最近先人がつくられたソースを見てて思ったことなのですが
ライブラリ(例えば今回で言えばmimew.plとか)を
使ったものもあれば、使ってないものもある。
あれは『使わなくても書ける』とか『使った方が楽』とか
そういうレベルのものなのでしょうか?
別に使ったから処理が早くなる、遅くなるとかいったレベルではないんですよね?
(フォームデコードのやり方がやっと最近わかったのですが、cgi-lib.plを使うという方法も知ったので)
抽象的な質問ですみません。
0451nobodyさん
02/09/28 12:19ID:???プログラムなんて、要求仕様、開発者の技術レベルやポリシー、
開発期間などによって千差万別になって当たり前。
そういった諸条件さえしっかり把握できれば、必要な機能や
処理の流れは自ずと決まってくる。
人の書いたソースを読む時は、それが作られた背景も考慮に入れよう。
ライブラリやモジュールの類は「楽ができる」という以外に、
「理解し切れてない処理を正しく行ってくれる」という恩恵がある。
チャレンジは大事だが、あなたが mimew.pl の中身と同等以上の
コードを書けない内は、自分で書こうなんて考えちゃいけない。
スピードを気にするのは、処理内容とMIMEの仕様を理解してからだ。
0452nobodyさん
02/09/28 18:54ID:BrjfrQHT500個のファイルの最終更新時間を調べて配列にしたいのですが、
500ファイル全部statするのと、更新されるたびに最終更新時間を記録して
それを読み込むのとどちらの方が効率がいいと思いますか?
よろしくお願いします
0454某スレ68
02/09/28 19:23ID:9nQPxW7pabcdefg
を
a b c d e f g
みたいにするのってパールで簡単にできますか。
行の操作じゃないからなんか難しそう。
短くかけっかなー。
0455nobodyさん
02/09/28 19:23ID:???0456nobodyさん
02/09/28 19:28ID:???use Jcode;
print Jcode->new('abcdefg')->tr('a-zA-Z','a-zA-Z');
0457某スレ68
02/09/28 19:49ID:9nQPxW7pややこしくてすみません。
スペースを入れていくということです。
0458nobodyさん
02/09/28 19:49ID:???for ($i=1; $i<(length); $i+=2){
substr($_, $i, 0)= ' ';
}
print;
0459nobodyさん
02/09/28 20:02ID:???0461某スレ68
02/09/28 20:05ID:9nQPxW7pとにかく、短くできるようですね。
有難うございました。
0462すみません。某スレ68
02/09/28 20:14ID:9nQPxW7pabcdefg
% perl -e 'for ($i=1; $i<(length); $i+=2){substr($_, $i, 0)= \' \' ; } print;' hoge
とワンライナーで書きたいんですけど、
パーサーエラーと叱られます。
{}ってワンライナーでは禁止されているのですか?
0463nobodyさん
02/09/28 20:43ID:???perl -pe'$_=join" ",split//' hoge
0464nobodyさん
02/09/28 23:42ID:yZr0Nm9j本当にありがとうございます。m(_`_)m
0465データベース
02/09/29 01:20ID:???にある『検索専用データベース Ver2』
を使ってcsvファイルに含まれているデータの内容を取り除いてhtml上で繁栄
させる事ってできないでしょうか?
例
\pict\map\0001.gif
の「\pict\map\」の部分を取り除いて「 0001.gif 」だけ表示する
当方CGIの初心者で命令文の仕組みが全然把握できないので
「制作者に直接お願いしろやゴルァ」とか言わないで宜しくお願い致します。
急ぎの用なのでバージョンアップ待ちする訳にも行かず困っております。
0468nobodyさん
02/09/29 03:28ID:???少なくとも、
自分で調べてコード書いてみて、
間違ったままで良いからコピペして
どう直したら良いですか?
くらいしなきゃ、教える方も教えにくい。
「初心者だから」は通用しない。
初心者だからで言い訳するなら、はじめからCGIは触るな。
0469nobodyさん
02/09/29 04:28ID:GXYgNgIm@list = split(//, "abcdefg")
空の正規表現で分割すると,一文字ずつに分かれた配列が返る
join(" ", @list)
空白でつなぐ
ってこと。
0470nobodyさん
02/09/29 09:57ID:Xgxp2+Gpchomp(@array);
でいいけど、逆に 配列の値すべてに \n をつけたい場合はどうすればいいですか?
for で地味にループさせる以外に便利なものがあったら教えてください。
for($i=0;$i<=$#array;++$i){
$array[$i] .= "\n";
}
これよりスマートな記述キボンヌ
0471nobodyさん
02/09/29 10:02ID:NgmswZArmap {$_.="\n"} @array;
0472nobodyさん
02/09/29 10:05ID:NgmswZAr$_.="\n" for @a;
のほうがよかった。
0473nobodyさん
02/09/29 10:30ID:Xgxp2+Gpうぉお、すげぇ、ここまで短くなるんだな。サンクス子
0474nobodyさん
02/09/29 10:43ID:u41sQpPiそれを書き込む関数dbm_wがあって、
両方ともハッシュのリファレンスを渡してやるのですがdatasetはハッシュを返すようになっています。
なので%bufとか適当に経由しないといけないのですが、簡潔に済ませる方法はあるんでしょうか?
%buf = &dataset(\%in);
&dbm_w(\%buf, "chardata");
0475nobodyさん
02/09/29 11:21ID:???dbm_w({ dataset(\%in) }, "chardata");
でどう?
&dataset の仕様がいまいちよく分らないけど。
0476nobodyさん
02/09/29 12:12ID:Xgxp2+Gpmy $val = '';
のように書いて初期化しますが、これが複数になったとき、
my ($val,$aaa,$aho) = '';
とやっても、先頭の $val しか初期化されませんよね?だから
my ($val,$aaa,$aho) = ('','','');
と書けばよいかもしれませんが、これだと変数が100個になったら大変なので、
なにかよい方法がないです?
もっとも、変数100個なんて作らないんですが、
なんか、こういう記述って、いやなので、、
スマートな記述キボンヌ
0477nobodyさん
02/09/29 12:16ID:???0478nobodyさん
02/09/29 12:20ID:Xgxp2+Gpということは、初期化しなくても、勝手に初期化されるということ?
cとかでは、初期化しないと、ゴミが入ってるじゃん?
perl は my で宣言したときに、ゴミは入らないの?
0479nobodyさん
02/09/29 12:41ID:???通常は気にせず my $val; でいいが、
「未定義 (undef)」と「空文字列 or 0」は別物なんで注意。
{ my $val; print 1 if defined $val }
{ my $val = undef; print 2 if defined $val }
{ my $val = 0; print 3 if defined $val }
{ my $val = ''; print 4 if defined $val }
{ my($foo, $bar) = ('',''); print 5 if defined $bar }
{ my($foo, $bar) = (); print 6 if defined $bar }
0480nobodyさん
02/09/29 14:18ID:???my ($val,$aaa,$aho) = ('')x3;
でどう?
0481nobodyさん
02/09/29 15:22ID:???#!/usr/bin/perl
use Socket;
$port = 80;
$ipaddress = inet_aton("www.asahi.com");
$address = pack_sockaddr_in($port,$ipaddress);
socket(SOCKET,2,1,0);
connect(SOCKET,$address);
select(SOCKET);
$ |= 1;
select(STDOUT);
print SOCKET "GET /index.html HTTP/1.0\r\n";
print SOCKET "HOST: www.asahi.com";
print SOCKET "\r\n\n";
while(<SOCKET>){
print $_;
}
exit;
これで標準出力に表示されるはずなんですが表示されませんどうしてでしょうか?
0482nobodyさん
02/09/29 15:30ID:???print SOCKET "HOST: www.asahi.com\n";
print SOCKET "\n";
0484nobodyさん
02/09/29 16:00ID:u41sQpPiprint SOCKET "\r\n\r\n";
0485nobodyさん
02/09/29 16:04ID:u41sQpPi希望道理の動作が出来ました。有難うございます。
0486nobodyさん
02/09/29 16:05ID:???は
print SOCKET "GET http://www.asahi.com/index.html HTTP/1.0\r\n";
print SOCKET "\r\n\r\n";
で。
0487nobodyさん
02/09/29 16:16ID:???>>483を見なよ、Windows環境だよ。binmode(SOCKET)やってないんだから
"\r\n" はいかがなものか・・・
0488484=486
02/09/29 16:45ID:???うちはWindows環境で、binmodeやってないが通ってたりする。。。
っていうかこれは相手サーバに渡す物だから、自分の環境がWinかどうかは関係無いんじゃないんですか?
いやはや無知ですいません。出過ぎましたね。
0489nobodyさん
02/09/29 17:30ID:TaQBEb50{
XXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXX
}
の{}は何を意味しているの?
0490nobodyさん
02/09/29 17:34ID:???質問の意味がわからないけど、ブロック構造でしょ?
ソースの見栄えをエレガントにしたり、lastとかでブロック抜けしたりも可
if文やforなんかにも使ってるでしょ?
Cだとブロックの先頭でしか変数宣言できないんで、その為にブロックを作ることもあるかと。
0492nobodyさん
02/09/29 19:26ID:???print (("スン スン ス〜ン♪ ( ゜Д゜)ハッ!!\n") x <STDIN>);
0493nobodyさん
02/09/29 19:32ID:???0494nobodyさん
02/09/29 20:01ID:???この辺を読んで頑張る。
ttp://www.din.or.jp/~ohzaki/perl.htm#Character
ttp://homepage1.nifty.com/nomenclator/perl/shiftjis.htm
0496nobodyさん
02/09/29 21:23ID:TaQBEb50ありがと。
でも、まだよくわからない。
普通は
if (XX)
{
XXXXXXXXXXXXXXXXXX
}
こんなかんじで条件が入るでしょ。
ところが>>489は条件が無いんだよね。
条件が無いなら、わざわざくくる必要が無いと思うんだけど。
0498nobodyさん
02/09/29 22:10ID:???局所的な処理がしたいんじゃないの?
たとえば
$a = 1;
{my$a = 'hoge';…}
print $a;
#結果は1
そんな不思議ならその部分だけ出してみれば?
実際のコードを見ないと、それに確かな意味があるのかどうかはコメントできないよ。
0501nobodyさん
02/09/30 00:54ID:???0502nobodyさん
02/09/30 08:11ID:???C++等ではすごく一般的なコーディングスタイルで
局所的にしか使わない変数が、他へ漏れない様にするために使う
けど、perlでもそういう使い方なのかは知らない
0503nobodyさん
02/09/30 08:58ID:???0504nobodyさん
02/09/30 11:11ID:2MKvRRFxメイン画面⇒掲示板画面⇒投稿⇒掲示板画面
の順で操作をして最後の『掲示板画面』でブラウザの戻るを押したら
投稿する前の掲示板画面が表示されるのですけれども、メイン画面を表示させたいのです。
どうすればよいでしょうか? ご指導お願いします。
0505nobodyさん
02/09/30 11:16ID:???ダウト
スレ違いなのであまり深くは追求しないけど
宣言できることが重要なんじゃなくて、局所的な変数が他へ漏れない様にするのが重要
あとその局所的なコードを他へコピペするときとか
ブロック化してあるとどこからどこまでコピペすれば良いのか一目瞭然だし
0506nobodyさん
02/09/30 11:19ID:???それが仕様と思って諦める
というか自分で「メイン画面⇒掲示板画面⇒投稿⇒掲示板画面」つーフローを書いておきながら
ブラウザの戻るボタンでメイン画面まで戻そうとする事自体おかしいと気付かないか?
素直に「メイン画面へ戻る」リンクを掲示板画面に付けましょう
0507nobodyさん
02/09/30 11:43ID:gw3vjcK1自動で自分のパソコンに保存できるようにしたいのですが
そういうの可能でしょうか。
可能な場合、送信したあと「Webページの保存」のダイアログが出てしまいますか?
できれば送信したら勝手に保存できるのがいいのですが。
0509504
02/09/30 12:13ID:2MKvRRFxメイン画面⇒[掲示板画面⇒投稿⇒掲示板画面]
と最後の要素をひとくくりにして、ブラウザで戻るでメイン画面に戻る
ことはできないでしょうか?
しつこくてスイマセンが、実際とても困っているので。
0510nobodyさん
02/09/30 12:15ID:gw3vjcK1おお、素晴らしい。出来るのですね。
ですが、ちょっとどんな風に書いたらいいか想像できないのでヒントか、
それに近い動作をするスクリプトを紹介していただきたいのですが。
0513512
02/09/30 12:25ID:???スマソ
0515nobodyさん
02/09/30 12:30ID:???0516504
02/09/30 12:36ID:2MKvRRFxどうすれば、よいのでしょうか?
0517514
02/09/30 12:40ID:???0518nobodyさん
02/09/30 14:02ID:???自動は無理と思われ。
とりあえず、URLを入力したら、そこのhtmlを
ファイルに保存するとこから始めてみたら?
それができたら、次はダウンロードにすりゃいい。
0519nobodyさん
02/09/30 15:34ID:???世の中のPCの中は大変な事になってるな。
0520nobodyさん
02/09/30 15:36ID:???locationで[メイン画面]に飛ばすじゃ駄目なん
どうしても戻るボタンでどうにかしたいなら
全て(または一部)の画面をHTML化すればできるかもしれないけど
0521510
02/09/30 15:39ID:???open (DATA, ">>c:\data.txt") || &error("開けません。");
print DATA "あああああああ";
close(DATA);
こんな事が可能だったら・・・誰でもクラッカーになれますね。
という事はやはりhtmlのあるurlを入力してそのページを開いて
javascriptで「ページを保存しますか」のダイアログ出すまでがせいぜい精一杯てとこでしょうか。
0523504
02/09/30 16:52ID:2MKvRRFx初心者なもので、聞いてばかりですいませんが。
具体的にはどうすれば良いのでしょうか?
0525504
02/09/30 18:25ID:2MKvRRFxでは最初から事情を説明いたしますと、小説投稿サイトを作ったのですが
作品画面で
◆作品にポイントをつける
◆作品に感想をつける
の2つの送信ができるのです。
このとき、ブラウザの戻るで直接メイン画面に戻れない場合で、作品にポイントと感想の両方をつけたい場合
●メイン画面⇒(作品選択)⇒作品画面⇒(ポイントをつける)⇒メイン画面⇒(作品選択)⇒作品画面⇒(感想をつける)⇒メイン画面
とユーザーの操作がどうしても冗長になるのです。
それで
●メイン画面⇒(作品選択)⇒作品画面⇒(ポイントをつける)⇒(感想をつける)⇒(ブラウザで戻る)⇒メイン画面
としたいのです。
と少々入り組んだ事情があるのですけれど。
0526nobodyさん
02/09/30 18:36ID:???>とユーザーの操作がどうしても冗長になるのです。
ポイントと感想を同時に投稿すればいいのでは・・・
さらにどうして「ブラウザで戻る」にこだわるのか小一時間問い詰めたい。
投稿されたら、プログラム内で勝手にメイン画面ルーチンへ飛べばいいだけだと思うんだが。
0527504
02/09/30 18:38ID:2MKvRRFxポイントだけ、感想だけ、つけたいというユーザーもいるので。
0528nobodyさん
02/09/30 18:39ID:???>526さんの最後の一行は読みました?
0529nobodyさん
02/09/30 18:49ID:IOB01lXZ今試みてるんですが、
バイナリファイルを複数個送信すると2個目以降が送られてこないんです。
テキストファイルなら複数個同時にいけるんですが、、
0530nobodyさん
02/09/30 19:08ID:???初心者というからにはCGIも拾い物なんだろう
もっと理想に適ったものがどっかにあるだろうから
自分で作る気がないなら別のものを探してきなされ
0531nobodyさん
02/09/30 19:44ID:ImfR65/j出来る・・・よね?
探し方が悪いのか考え方が悪いのか、いまいちこれという情報に
行きつけないのだが・・・。
0532504
02/09/30 19:46ID:???いえ、スクリプトは自作ですよ。
どうすればいいのか分からない部分があったりして、
ネットでも探しましたが、欲しかったモノはなかったので。
ちょっと、今は解答を得られそうに無いので
もう少し、問題が具体的になってきたら、再び聞きにくるかもしれません。
そのときは、よろしくお願いします。
0533x
02/09/30 20:00ID:q3kf4WJx↓ ↓ ↓
http://www.dream-express-web.com/space-trust.htm
0534nobodyさん
02/09/30 20:02ID:???0536531
02/09/30 21:10ID:???さんくす!検索してみますた。
531書いてる時点では良くわかってなかったけど、
むしろOpen3の方が意図に近かったかもしれない。
ラクダ本は今手元にないのでそっちも今度見てみます。
0540529
02/10/01 00:10ID:x+as6bjiSTDIN見てるよ!
ってwebサーバ上にアプしたら普通に取得できますた。
これはwin+ActivePerl+Apacheの罠でしょうか。無念。
お騒がせしました。
0542nobodyさん
02/10/01 04:41ID:???画像なり音なりを受け取った際のPerl側での
ファイル形式判断はどうすればいいのでしょうか?
画像についてはImage::Sizeモジュールのおかげで
判別できましたがその他の形式の判別方法がわかりません。
皆さんどうやって最終的に書き出す場合、拡張子付けしてるのでしょうか?
0543nobodyさん
02/10/01 06:12ID:???アップされたファイルの拡張子を使いまわせば?
どうしても正確に判別したいなら
「GIFはデータの先頭がGIFで始まる。」
「PNGは0x89PNGで始まる。」
「JPEGは7バイト目にJFIFの文字がある。」
こんな感じの情報を探しなさい。
とんでもない量になると思うけど。
0544nobodyさん
02/10/01 07:04ID:???あれ?元ファイル名の拡張子ってもしかして使いまわせるんですか?
cgi-lib.pl使って受け取りデータをフォーマットしてるのですが、
どうもファイルデータを受け取るキーからは、画像なりの実データのみしか得られず
元ファイル名(の拡張子)が得られなくて、バイナリ判別しかないのだろうか
と思ってしまっていたのですが…。
0545nobodyさん
02/10/01 07:54ID:/I8m+twd0547546
02/10/01 08:03ID:???板違いだよ。
××リンク依頼の拒絶文××
http://pc3.2ch.net/test/read.cgi/hp/997085797/
0549529
02/10/01 10:18ID:x+as6bji見事にbinmode(STDIN);してませんですた。
フォームからのテキストやらまざってても問題ないですか?
とりあえず試してみます。
0551nobodyさん
02/10/01 12:40ID:???cgi-lib.plは使ったこと無いからわかんないけど
STDINにはfilename="…"ってデータが他のデータと一緒に送られて来てる。
>>549
問題無し。
0552nobodyさん
02/10/01 14:36ID:???やり方はなんでもいいんですけど自分の想像で書いたら見事に失敗しました。
何がいけないですか。
$url = "http://www.yahoo.co.jp/"
open (DATA, ">>data.html") || &error("開けません。");
print DATA "Location: $url\n\n";
close(DATA);
0553nobodyさん
02/10/01 14:37ID:???中身がそのまま「Location: $url\n\n」だったという事です。
0554nobodyさん
02/10/01 14:38ID:???0556nobodyさん
02/10/01 14:50ID:???絶対動かないけど、その場合
open (DATA, ">>$data") || &error("開けません。");
みたいな発想の方が自然だと思うぞ。
この辺ってsocket関連の情報をあたってみたらどうだろう。
もしくは、CGIプロクシのソースを参考にしてみては?
0557nobodyさん
02/10/01 14:54ID:???えっと、許可をもらっているので今回は大丈夫です。
例がヤフーだったのはよくなかったですね。
>>556
perlでネットワーク関連になるとちょっと知識が無いんです・・・。
掲示板を作れるくらいの知識じゃ厳しいですかね。
0558nobodyさん
02/10/01 14:58ID:???>>481
殊にネットワーク関係は中途半端なことしてると
よそ様に迷惑かけまくるから、
基礎をみっちり勉強してからトライしてね。
0561nobodyさん
02/10/01 15:41ID:???まったくそうですねすいません、
ところでinet_atonにはホスト名をいれるより
直接IPを入れたほうが処理は早いですよね?
0562nobodyさん
02/10/01 16:18ID:???ファイルの受け取りにcgi-lib.plというのを使ってるみたいなんですけど
それを使わないと無理なんでしょうか。
あと、use CGIも無しで。
use CGIを使った場合って
read( STDIN, $post, $ENV{ 'CONTENT_LENGTH' } );
で受け取るのが無効になってしまいますか?
hiddenの受け取りにread( STDIN, $post, $ENV{ 'CONTENT_LENGTH' } );を使って
ファイルの受け取りに$file = $query->parama('file);
をやったらhiddenが受け取れませんでしたので・・・。
0564552
02/10/01 17:01ID:???これが使えそうな気がします。
# Webブラウザスクリプト
# browser.pl
# モジュールの仕様宣言
use IO::Socket;
# URLを入力
print "URLを指定してください。:";
$url = <STDIN>;
# URLをホスト名とファイルパスに分割
chomp($url);
if($url =~ /http:\/\/([^\/]+)(\/.*)/){
$host = $1;
$file = $2;
}else{
die "そのURLには対応していません。\n";
}
0565552
02/10/01 17:02ID:???# ソケットオブジェクト作成
$client_socket = new IO::Socket::INET(
PeerAddr => $host,
PeerPort => 'http',
Proto => 'tcp',
Timeout => '5');
unless($client_socket){
print "Socket Error:$!\n";
}
# 入力をサーバーに送信
print "$host $file" . "\n";
print $client_socket "GET $file HTTP/1.0\n\n";
open (DATA, ">>data.html") || &error("開けません。");
# 出力を取得し、表示(複数行が帰ってくるので、取り終わるまでループ)
while($receive = <$cilent_socket>){
print $receive;
}
close(DATA);
# ソケットを閉じる
$client_socket->close();
これが全文です。ですが動きますがhtmlソースが出てきません。どこか間違っていますか。
0566552
02/10/01 17:03ID:???コマンド プロンプトから試しました。
0567nobodyさん
02/10/01 17:03ID:???0568nobodyさん
02/10/01 17:21ID:???LWPは使えんの?IO::Socketでも別にかまわんけど。
>htmlソースが出てきません。
data.htmlに出力されているんじゃないかと思うが、
ソース見ると開けて閉じてるだけかよ。
0569552
02/10/01 19:00ID:ydYlCK0mopen (DATA, ">>data.html") || &error("開けません。");
# 出力を取得し、表示(複数行が帰ってくるので、取り終わるまでループ)
while($receive = <$cilent_socket>){
print $receive;
}
close(DATA);
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
# 出力を取得し、表示(複数行が帰ってくるので、取り終わるまでループ)
while($receive = <$cilent_socket>){
print $receive;
}
実際はこうやって実験しました。
指定されたhtmlのソースが表示されていくはずなんですけどね・・・。
0570nobodyさん
02/10/01 22:01ID:???unless($client_socket){
print "Socket Error:$!\n";
}
$client_socket->autoflush(1); # これ追加
# 入力をサーバーに送信
...
でどうよ?
while($receive = <$cilent_socket>)
これは綴り間違い?
0571552
02/10/01 22:50ID:ydYlCK0mすごい!出来ました。
下の文がはじめに付いてくるんですがこれって自動で取ったり出来ないんでしょうか。
HTTP/1.1 200 OK
Server: Microsoft-IIS/4.0
Date: Tue, 01 Oct 2002 22:34:16 GMT
Connection: Keep-Alive
Content-Length: 39683
Content-Type: text/html
Set-Cookie: inkid=n92b0EDMgACIgMEZL2zSjaAAVvoH; expires=Wed, 01-Dec-2010 00:00:00 GMT; domain=goo.ne.jp; path=/
Set-Cookie: ASPSESSIONIDGGGQQGED=MMBNNELBNKGNJBKCPGNLGLCG; path=/
Cache-control: private
あと、ローカルではうまくいったんですけど、サーバーにアップしたら、
Your script produced this error: Can't locate IO/Socket.pm in @INC (@INC contains: .) at ./aaa.cgi line 5. BEGIN failed--compilation aborted at ./aaa.cgi line 5.
という風に「use IO::Socket;」の行でエラーが出てしまいました。
0572ヽ( ゚Д゚)丿 ◆1ZwOwwBE
02/10/01 23:40ID:???もうなにからなにまで全然だめみたいだから
ちゃんと本かってある程度勉強したほうがいいよ。
まず、IO::Socketはレンタルサーバーに入ってるのはまれだろ
よくてSocket.pm
つかえても制限ありとかそんなもんだ。
0573ヽ( ゚Д゚)丿 ◆1ZwOwwBE
02/10/01 23:43ID:???こんな感じのをいれる
if(/\r\n/){
next;
}
s/\r\n//o;
0574nobodyさん
02/10/02 00:06ID:???↑のようなことを表示できるようにするCGIってありますか?
0577nobodyさん
02/10/02 01:29ID:???>>488
>っていうかこれは相手サーバに渡す物だから、
>自分の環境がWinかどうかは関係無いんじゃないんですか?
ファイルハンドルが「テキストモード」の時,"\r\n"は
Winだと, 0x0D 0x0D 0x0A に
Unix系だと 0x0D 0x0A になる
っつーことで。
0578nobodyさん
02/10/02 12:31ID:6nY1Hcfpその場合
$mon = sprintf("%02d",$mon);
と書くのと
$mon = "0$mon" if ($mon < 10);
と書くの
どっちがいいと思いますか?
何か二極端になってるような気がして、、、自分は前者です。
0581nobodyさん
02/10/02 13:01ID:???#print "HOST:$host\n";
#print "FILE:$file\n";
print $client_socket "GET $file HTTP/1.0\n\n";
これだと単純に$fileで指定されたファイルが返ってくるんですけど、
$fileがcgiだった場合、例えば掲示板とかの場合に、
掲示板内の投稿内容を入力する<input type="text" name="message">
の値もサーバーに送ることってできますか?掲示板のformのmethodはpostです。
結果的に投稿後のhtmlが返ってくるようにしたいんです。
0582nobodyさん
02/10/02 13:08ID:6nY1Hcfp($mon,$mday,$hour,$min,$sec) = (split(/,/,sprintf "%02d,%02d,%02d,%02d,%02d",$mon,$mday,$hour,$min,$sec));
0584578 , 582
02/10/02 13:40ID:6nY1Hcfpお、忘れてた。サンクス。
0585nobodyさん
02/10/02 15:15ID:JLnBuPbJ1:RS-232Cに繋がったモデムに、ATコマンドを送ってリザルトを受け取りたい
2:googleを「perl RS-232C」で調べてみた
3:そうした事例がでて来ない
perlを使って、RS-232C通信は出来ないでしょうか?
簡単なATコマンドを送って、結果を見るだけなのですが、minicomで手打ち
は面倒くさいので、自動化したいのです。
でも、googleで事例が出ないので、もしかして、perlではRS-232C制御は
出来ないのでしょうか?
もし可能なら、組み込む必要のあるpmや、スクリプト例など教えてください。
環境は、RedHat Linux 7.3
perlのバージョンは、5.6.1です。
0586nobodyさん
02/10/02 15:27ID:???ATコマンド打つにはpppdがいるだろ
Perlだけじゃむりだ
0587585
02/10/02 15:39ID:JLnBuPbJpppdというのと組み合わせるんですか?
今は、minicom -s から手打ちして、結果を見ています。
出来たら、自動でAT打って、返ってきた結果でif分岐して、おかしいときだけ
メールとかで知らせるという風にしたいんですよね。
まず、pppdというのをgoogleしに行って来ます。
何か過不足あったら、教えてください。
0589578 , 582
02/10/02 17:30ID:6nY1Hcfp\$scalar とか \%hash とか、リファレンス参照ですよね
時々見る *scalar とかは一体何者なんでしょうか
おそらくリファレンスと同じようなもんだと思うんですが
いまいち挙動がつかめません。
0590585
02/10/02 17:37ID:JLnBuPbJあ、ほんとですね。/usr/sbin/pppdでありました。
さて、これをどうperlから呼んで、任意のATコマンドを出力させるのか、
調べてみなくてわ。
ただ、googleであたったところ、pppdってどうもインターンット接続のソフト
みたいなんですけど?
0591nobodyさん
02/10/02 17:50ID:???ATコマンドも打てるんじゃ!ぼけぇ!
Linuxさわったのはじめてでperlも分らんようなら帰れ!
どうせ厨だろ。/dev とかわからんだろ
おとなしくじーーーーーーーーーーーっくりしらべてから来い!
0593585
02/10/02 18:09ID:JLnBuPbJはは、いや、Linux/perl、1年くらい使ってるんですよ(笑)
ただねぇ、ルータが最初からあって、接続はLANでって環境でインターネット
に入ったもんで、ATコマンドって、つい最近まで、使ったことも見たことも無
かったのよん。
#Windowsも「ダイヤルアップなんたら」というの、使ったことまったくない。
だから困ってるのさ。
0594nobodyさん
02/10/02 18:31ID:???おめでたい香具師だな。
0595nobodyさん
02/10/02 18:34ID:???だから初心者なんだろ(w
0596nobodyさん
02/10/02 20:11ID:???> print $client_socket "GET $file HTTP/1.0\n\n";
この行の GET を POST にすることを気付かなかったのなら、
まず Socket と HTTP について勉強しる。
>>582
$_ = sprintf '%02d', $_ for ($mon,$mday,$hour,$min,$sec);
こう書いておけば、変数が増えても
一箇所書き換えるだけで済む。
>>585
「Linux perl シリアル通信」辺りでググってみてはどうか?
>>589
* は型グロブ。黒豹本 (O'REILLY「実用 Perl プログラミング」)
の三章に、実際の使用例と共に詳しく解説されている。
0597nobodyさん
02/10/02 20:56ID:???Sheet1.csv 〜 Sheet10.csvまで10枚のファイルがあります。
ファイルのそれぞれの1〜9行目、1列目〜4列目
を個々に加算してresult_11.cvs ファイルの1〜9行目、1列目〜4列目
に和を挿入したいのですが、awkとbc とpaste を使っていますが、
perlなら一発で出来そうです。何かいいアイディアはありませぬか?
% cat sum.array.awk
BEGIN {
OFS=FS=","
}
{
for (i=1;i<=4;i++)
sum[FNR,i]+=$i
}
END {
for (r=1;r<=9;r++)
print sum[r,1]"\n"sum[r,2]"\n"sum[r,3]"\n"sum[r,4]
}
0598597
02/10/02 20:57ID:???% awk -f sum.array.awk Sheet2.csv|sed -e 's/$/+/'>ac2.dat
% paste ac1.dat ac2.dat
55+ 59+
77+ 81+
36+ 40+
66+ 70+
111+ 115+
3+ 7+
39+ 43+
77+ 81+
(略)
0599597
02/10/02 21:03ID:???perlのwhile(<FIFO>){ほにゃらら;}とかで処理できないかなー。
0600nobodyさん
02/10/02 22:29ID:???データは
4,5,44124,1324\n
45,2345,44124,1324\n
45,2345,44124,1324\n
こんな感じで
324424124\n
424148124\n
423213131\n
(適当)
↑みたいににしたいってことですか?
0601nobodyさん
02/10/02 22:55ID:77XrC79cそこで質問なんですが無料のサーバー?ソフトみたいなのは無いんでしょうか?
0602597
02/10/02 22:57ID:???1,33,55,77,99,121,143,165
2,36,66,111,222,223,147,225
3,39,77,145,345,346,151,348
4,42,88,179,468,469,155,471
5,45,99,213,591,592,159,594
6,48,110,247,714,715,163,717
みたいなファイルが10枚あって、
ココの行列ごとに和をとって11番目のファイルに出力したい、ということです。
串刺し、といったイメージでファイルを横断して加算を取るということです。
この部分だけ、excelに頼っているのですが、
他の計算が全てUnix上なので、この計算もperlなどで行いたいなと。
0603nobodyさん
02/10/02 23:09ID:???=commentout
CGIとかを動くかどうか試したいんですがまだHPスペースの承諾メールがきてなく確認できません
そこで質問なんですが無料のサーバー?ソフトみたいなのは無いんでしょうか?
=cut
次。
0604nobodyさん
02/10/03 00:07ID:???0605nobodyさん
02/10/03 00:15ID:???>$_ = sprintf '%02d', $_ for ($mon,$mday,$hour,$min,$sec);
( ´,_ゝ`) プッ ネタかよ
0606578 , 582
02/10/03 01:38ID:uOd1wswNどんな機会に使うのでしょうか??
いまいちリファレンスより速度的に早いとか
何か利点があるのでしょうか??
0607nobodyさん
02/10/03 02:17ID:???そのくらいのデータ量だったら、値を全て読み込んでから
処理しちゃっても大丈夫/楽じゃないですかね。
use constant FIRSTFILENUM => 1;
use constant LASTFILENUM => 10;
my @data; #$data[ファイル名の数字部分]->[列][行]
for (my $fileno = FIRSTFILENUM; $fileno <= LASTFILENUM ; $fileno++){
open (FILE, "Sheet$fileno\.csv") or die;
for(my $n = 0; <FILE>; $n++){
chomp;
$data[$fileno]->[$n] = [split (/,/)]
};
close (FILE) or die;
}
こんな感じで、データを一気に読み込んで、あとは適当に
ループを回して足すなり引くなりするというのはどうでしょ?
my $sum; #各ファイルの列ごとの和
for (my $col = 0;$col < 6; $col++){
for (my $fileno = 1; $fileno <= 10; $fileno++){
for(my $row = 0;$row < 8; $row++){
$sum += $data[$fileno]->[$col][$row];
}
}
print $col + 1 . ":$sum\n";
}
たとえばこんな感じで。
0608602
02/10/03 02:52ID:l9L39VMS>そのくらいのデータ量だったら、値を全て読み込んでから
よく判らないのですが、2000行400列ぐらいに集めてしまった巨大ファイルも
処理する場合、
512Mのメモリー積んでれば(OSはLinux)大丈夫でしょうか?
今までは、excelに食わせるために一旦小さいファイルに分けるなどしてましたが。
一気にできるとなるとどれくらいのファイルまでならOKなのでしょうか?
今、手元の一番大きいので、7.3Mだから大丈夫なのかな?
0609602
02/10/03 03:05ID:l9L39VMS50枚も逝かないと思うけど……。けど、こういう場合、単純計算で512Mのうち
どれくらい残しておけばいいのかな。
基本的に表立ってはあまり使わない。
普通は、ファイルハンドルを使うときと、エイリアスを作成する時くらいじゃないかな。
0611nobodyさん
02/10/03 10:16ID:HWMUanwi本 or サイト どっちでも可
0612nobodyさん
02/10/03 10:42ID:???どっちでもいいんでしょうか。時と場合で使い分けるんでしょうか。
0613nobodyさん
02/10/03 10:54ID:xHS0Gcl+シフトジスの場合に文字化けエラーに気をつければ
どっちでもいい
0614nobodyさん
02/10/03 11:16ID:Co/qm2Ti配列名の中に変数をエラーってしまいます。
#!/usr/bin/perl
$num =0;
@ary = qw(a b c d e f);
foreach (@ary) {
push (@new_ary_$num,$_);
++$num;
}
この場合、
aを@new_ary_0
bを@new_ary_1
・
・
fを@new_ary_5
に入れたいのですが、push (@new_ary_$num,$_);で
引っ掛かってしまいます。
@new_ary_${num}など、いろいろ試してみたのですが
どうにもだめでした・・。
配列名の中に変数は使えないのでしょうか?
宜しくお願いします。
0615nobodyさん
02/10/03 11:18ID:???配列名の中に変数をエラーってしまいます。
↓
配列名の中に変数を使うとエラーってしまいます。
でした。すんません
0616nobodyさん
02/10/03 11:18ID:???<form action="aaa.cgi" method="post"><input type="text" name="text" value="aiueo"></form>
-----------------
# aaa.cgi
$post_name = "text";
$post_value = $FORM{text};
print "Location: http://xxx.yyy.zzz/hoge.cgi\n\n";
---------------
こうやってhoge.cgiへ自ら用意したpostデータ(name=text value=あらかじめ用意した値)
を送り付けたいのですが可能ですか?
getの時は引数を付ければいいだけですが・・・。
0617578 , 582
02/10/03 11:21ID:v6OPXcCdご回答ありがとうございます、胸のつっかえが取れました。
0618nobodyさん
02/10/03 12:46ID:???ところで UNIX板のシェル、オークスレにまったく同じ質問があるように見えるのは気のせいですか?
いや,マルチだとは思わないんだけどね,それぞれのやり方が知りたいのかもしれないし
0619581
02/10/03 13:38ID:???こうしたらおかしくないですか?
postのデータはどうやって送ってるんですか?
0620nobodyさん
02/10/03 13:48ID:???push (@{"new_ary_$num"},$_);
>>616
いったん全部hiddenにしたform出力してjavascriptで勝手にsubmitするとかダメ?
0621nobodyさん
02/10/03 14:44ID:V3RvumoZ0622nobodyさん
02/10/03 14:53ID:???これってなにしてるんですか?ただの代入?
0623nobodyさん
02/10/03 15:59ID:l7EfCAGl@_にデータがあればその先頭のデータを代入。なければ'あ'を代入。
0624n
02/10/03 16:08ID:KXoffugq0625nobodyさん
02/10/03 16:54ID:???0626607
02/10/03 17:36ID:???あー、ファイルでかいですかー。
じゃあ一行ずつ読み込んで処理してテンポラリに書き出すのは?
たとえば、Sheet1.csvからSheet10.csvの同位置の要素を串刺しに
足していくスクリプトだとこんな感じでどうでしょ。
0627607
02/10/03 17:38ID:???use File::Copy;
copy ('Sheet1.csv', 'Result.csv');
for (my $fileno = 2; $fileno <= 10 ; $fileno++){
open (DATA, "Sheet$fileno\.csv") or die;
open (SUM, '<Result.csv' ) or die;
open (TEMP, '>TEMP') or die;
while(<DATA>){
my @data = split(/,/);
my @sum = split(/,/, <SUM>);
my @result = map {$data[$_] + $sum[$_]} 0..$#data;
print TEMP join (',', @result) . "\n";
}
close (TEMP) or die;
close (SUM) or die;
close (DATA) or die;
unlink ('Result.csv');
rename ('TEMP', 'Result.csv');
}
うーん。もっとカコイイ方法ないかなあ。
あ、それと、607の書き込みの下のコード、間違ってました。ゴメン
0628ふとした疑問
02/10/03 18:28ID:v6OPXcCd&subname();
の形ですよね?
で、普段は&は省略して書いてるんですが
&が無いと動かないサブルーチンとかも在ってチンプンカンプンです
そもそも&はどんな場合に必須となるのでしょうか?
0629nobodyさん
02/10/03 18:54ID:bjQ5Yi4RRegisterClassExに渡すwndClassEx構造体の中で
ウィンドウプロシージャの指定はどうすればいいんでしょう?
Perlでユーザ関数(サブルーチン)を作ってそのリファレンスを渡せばいいのでしょうか?
0630nobodyさん
02/10/03 19:11ID:???○ hogehoge()
× \hogehoge
× \hogehoge()
○ \&hogehoge
0632nobodyさん
02/10/03 19:54ID:FetdaLGe省略記述って言うんだけど、実際の所省略しないほうが手っ取り早くていいぞ。
省略が通るかどうかは、他に前方宣言されているとかそうゆうのも関係ある。
ちゃんと正式に書けばどんな時も困った事にならない。
0633628
02/10/03 20:57ID:v6OPXcCdありがとうございました
自分には省略せずに書くのが見やすいし迷わなくていいかも。
0634nobodyさん
02/10/03 21:10ID:???0635nobodyさん
02/10/03 21:31ID:Wit0Sk8Mprint TXT "\n";
としただけなのに
TXTファイルの改行コードがCRCFになっています。なぜ?
0638nobodyさん
02/10/03 21:50ID:???0639nobodyさん
02/10/03 21:51ID:???0640nobodyさん
02/10/03 21:52ID:???0642nobodyさん
02/10/03 21:54ID:???0644nobodyさん
02/10/03 21:58ID:???0645nobodyさん
02/10/03 21:58ID:???LF(らいん・ふぃーど)
0647nobodyさん
02/10/03 22:34ID:G7kyuSYC本 or サイト どっちでも可
0648nobodyさん
02/10/03 22:44ID:???0651nobodyさん
02/10/04 00:00ID:???感じの言語だね。
0652nobodyさん
02/10/04 00:09ID:???0653nobodyさん
02/10/04 01:36ID:???for($i = 0; $i < 200000; $i++) {
$array1[$i] = 1;
}
#2
$#array2 = 199999;
for($i = 0; $i < 200000; $i++) {
$array2[$i] = 1;
}
先に領域の確保をしておく#2の方が速いと思ったら#1の方が速くなった。なぜ?
http://www.need4xxx.net/asian/hamedori/data/099/dir/index.html
おんなじのコピーしてつくろうとしたけど不可能
0656nobodyさん
02/10/04 08:04ID:iu1Ymefg心ある人は、rubyスレにお礼参りしてください。
0658nobodyさん
02/10/04 09:31ID:???CPANモジュールの全てを網羅するのは不可能かと…。
100や200というやわな数じゃないからねぇ。
有用なモジュールやperldocの日本語化は
http://perldoc.jpで行われてるけど、まだ発足したばかりのプロジェクトだし。
0661649
02/10/04 09:57ID:???>>659
http://member.nifty.ne.jp/hippo2000/perltips/CPAN.htm に
マニュアルはあるけど、これじゃダメ?
0662nobodyさん
02/10/04 10:03ID:???じゃ、引用してやるYo
------
Ruby >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Perl
ぷぷぷ
反論したいか?反論したいんだろ?ぷぷぷ大爆笑
お前らには無理。
Perlみたいな糞言語を使う奴らは人間以下
------
これがrubyキティ以外の何だってんだ、ドアフォ
あ、これはrubyキティに言ったんで気にしないで。
それが単にRuby厨を騙っているだけなんじゃないか、と皆思ってるわけで。
仮に本当にRuby厨だとしても、もはやそれは言語を超えた厨房でしょ。
無視以外の対策は無いと思うんだよね。
0665nobodyさん
02/10/04 10:36ID:???ところで奴はPerlの新スレはム板には立てるな、PerlはWebprogに
引きこもってろ、というわけ。rubyのスレはム板にいくつかあるよ
ね。Perl==CGIじゃないんで、ム板にも1つくらいPerlスレがあっ
てもいいと思うんだが、奴はスレ立てた奴のIPアドレスは分かっ
てしまうと言って脅してるんで誰も立てんでしょう。「無視」と
冷静に構えてますが、ますますPerl==CGI、ruby>>Perlという
認識が広まっていいわけ?
0666nobodyさん
02/10/04 11:34ID:???http://www.cpan.jp/
>>665
荒らされると、流れが追いかけにくくなるし
こっちで話てる分には文句言わないみたいだし
別に無理してム板に立てる必要もないかナっと
てしまうと言って脅してるんで誰も立てんでしょう。「無視」と
奴はスレ立てた奴のIPアドレスは分かっ
てしまうと言って脅してるんで誰も立てんでしょう。「無視」と
奴はスレ立てた奴のIPアドレスは分かっ
てしまうと言って脅してるんで誰も立てんでしょう。「無視」と
奴はスレ立てた奴のIPアドレスは分かっ
てしまうと言って脅してるんで誰も立てんでしょう。「無視」と
奴はスレ立てた奴のIPアドレスは分かっ
てしまうと言って脅してるんで誰も立てんでしょう。「無視」と
奴はスレ立てた奴のIPアドレスは分かっ
てしまうと言って脅してるんで誰も立てんでしょう。「無視」と
0669nobodyさん
02/10/04 12:30ID:???いらっしゃーい、Perlの「コーディング」で困ってる人のスレです。
1:自分はこう言う事がしたい。
2:それでこんな風にやってみたが・・・
3:それだとこんなエラーが出て上手く行かなかった。
1と3が無いと誰も答えられないよ。
良い回答は良い質問から。一緒に勉強しましょう。
0670659
02/10/04 12:42ID:???‥‥‥‥‥‥‥‥漏れ、ここのサイト行ったことあるわ。
なんで見つけられなかったんだろう?
恥ずかしいので、回線切って、首吊ってきます。
0671nobodyさん
02/10/04 13:38ID:???>perl知ってる人間がIPアドレスがばれるなんて事ビビるかよ…
perlを知っているかどうかとは関係ないでしょ。rubyキティが言うように
新スレを立てた人間のIPアドレスが記録されていて一般ユーザも参照可能
かどうかということでしょ。
0672nobodyさん
02/10/04 13:45ID:???1)Apacheなどのhttpdサーバは、httpdサーバにアクセスしたユーザのIPアド
レスと閲覧したページをaccess.logに記録します。(Perlなどアクセス解析ス
クリプトの多くは、このファイルを読んでグラフとか表に整形します。)した
がって、プロバイダの管理者は、特別な場合にこのaccess.logから特定の時間
に特定のページにアクセスしたユーザ情報を知らせることができます。2chで
も、個人名を挙げた誹謗中傷の書きコに対して時々見られます。今回の場合は、
この可能性は、ないと思われますが、問題は、rubyキティがプロバイダ関係、
あるいは2ch管理者関係の人間であった場合です。
2)新スレ立てたヤシ(1だね)に自鯖のHPを見るように誘って、IPアドレス
を抜き取る。
3)perlでは、packet解析も容易にできる。
0673nobodyさん
02/10/04 13:51ID:Ck18zQey#コメント行だけで数キロバイト・・・
やっぱファイルサイズが大きければ大きいだけ速度に影響しますか?
というか50KB程度なら体感的に別に関係ない気もしますが
どうなんでしょう
0674nobodyさん
02/10/04 13:57ID:???だからIP抜かれたから何…
企業からとかならともかく
プロバイダのIPじゃせいぜい
住んでる地域くらいしかわからないじゃん…
荒らしたわけじゃないからアカウント消されるわけでもなし
0676nobodyさん
02/10/04 14:00ID:???コメントの量くらいで体感差はないと思うけど、
気になるならコメントは別のファイルに書いとけば?
コメント自体あんま要らないと思うけど。
0677nobodyさん
02/10/04 14:18ID:???while($linevalue = <TXT>){
}
aaa.txtを一気に全部読み込むことってできますか?
while($linevalue = <TXT>){
$line_all .= $linevalue;
}
で、連結させていくしかないですか?
0678nobodyさん
02/10/04 14:25ID:???perl がスクリプトを解析する部分での影響は殆ど無い。
但しディスク I/O が遅ければ、当然その影響は受ける。
>>677
undef $/;
0679nobodyさん
02/10/04 14:41ID:zNdIxOGz$kakutyousi=~/\.([a-zA-Z]$)/;でいい
0680nobodyさん
02/10/04 14:42ID:???open (TXT, "aaa.txt") || &error("開けません。");
@linevalues = <TXT>;
こういうのをPerlお大尽といいます。
0684nobodyさん
02/10/04 16:02ID:???$full_path =~ s|(?<!^[A-Za-z])[:\\]|/|g;
($path, $basename, $extension) =
$full_path =~ m|^(.*?)([^./]+)((?:\.[^./]+)*)$|;
…過剰?
0685nobodyさん
02/10/04 16:25ID:???やっぱり無視が一番いいと思うな。
>>685
cron
0687nobodyさん
02/10/04 17:01ID:???分かりますた。って、ム板に新スレ「Perlについての質問箱2箱目」
が立ったので、とりあえずって感じ。また、荒らされたら、どうし
ようかってのは残るけど・・・
0689nobodyさん
02/10/04 17:09ID:FKzI73uU{
umask(0);
mkdir("hoge",0777);
chmod(0777,"hoge");
}
これを実行したらhogeフォルダが消せなくなってしまったのですが
このumask(0);ってどういう意味ですか?
0690質問
02/10/04 17:11ID:zDqIUs3vで最期のスラッシュ部分を削るとよくdirectry格納庫が見えるんですけど
これは犯罪なんですか?
まあ、とりあえずいいんじゃない?
荒らしはねぇ…実の所、私はまるで気にならないんだよね。慣れたのかな。
>>689
umask(0)はパーミッション操作に対するデフォルトのマスクを無しにする、
つまり「これからパーミッションを危険な値に設定するけど、これは確かに私が望んだことだからね」って意味。
見たところ、そのコードで作ったディレクトリが消せないとは思えないな。
とりあえずパーミッションを確認してみて。ていうかそういう場合はまずパーミッション確認して。
または、そのディレクトリの中にファイル作らなかった?それなら消せないと思うけど。
余談だけど、最後のchmod()は無意味だね。
>>690
そんなことで犯罪になるわけないでしょ。
0692nobodyさん
02/10/04 17:37ID:???http://pc.2ch.net/test/read.cgi/php/1031721334/292
http://pc.2ch.net/test/read.cgi/php/1031910901/236
0693nobodyさん
02/10/04 17:39ID:zDqIUs3vウザイ
0695nobodyさん
02/10/04 17:46ID:zDqIUs3vん、失敬。
# どっちもチェックしてないスレだ…
0698nobodyさん
02/10/04 17:52ID:zDqIUs3v0699nobodyさん
02/10/04 18:08ID:???マルチ呼ばわりされないといけないのか理解に苦しむ。
もしかして他のスレでzDqIUs3vにレスしてるのも俺だということに
zDqIUs3vの脳内世界ではなっているのであろうか。
そうだとしたらzDqIUs3vは相当おめでたい野郎だ。
0700nobodyさん
02/10/04 18:11ID:???よくあることだな
0701nobodyさん
02/10/04 18:11ID:mwNvTbYDその値を%HEIKINに入れる時に、0/0(ゼロ ÷ ゼロ)
になると、CGIが途中で止まってしまうのですが、
これって、仕様ですか??
foreach (@LIST){
$HEIKIN{"$_"} = $Point{"$_"} / $Count{"$_"};
}
0703nobodyさん
02/10/04 18:14ID:???ほっとけよ
0705nobodyさん
02/10/04 18:26ID:???% cat example
s/^(.*)$/$1 = $1\.new/;
% perl -p example kakikomi
【失敗】
% vim example
% perl -p example kakikomi
【失敗】
% perl -p example kakikomi
のようにちょこちょこフィルターをエディターで開いては
閉じてするんですが、ファイルをその場で編集できる
エディターって何かありますか?edは使いにくいので、パス。
シェル変数をぱっとその場で編集できるvaredコマンドの便利さに
あやかりたい。
0706701
02/10/04 18:26ID:???マジですか!?
とりあえず、
$Count{"$_"} = 1 unless($Count{"$_"});
を追加して、0にならないようにすれば、回避はできるのですが、
分母に0が入ると、必ずそこで処理が止まってしまうんです・・・
どなたか、同じような経験をした事ある人いませんか?
動作環境
Apache 1.3.26-win32
ActivePerl-5.6.1
0707nobodyさん
02/10/04 18:36ID:???それなら0で割った時点でエラーがでて終了しちゃうから続きは出ないよ。
漏れはてっきりコマンドプロンプトで打ったらそこから反応が返ってこなくなるのかと思ったよ。
スマソ。
0708nobodyさん
02/10/04 18:38ID:???0709701
02/10/04 18:46ID:???0/0は、500エラーになってしまいます。
0÷0=0って計算してくれないんですかね・・・
#!C:/perl/bin/perl
$test = 0 / 0;#これだと500エラー
#$test = 0 / 1;#これならOK
print "Content-type: text/html\n\n";
print "$test";
exit;
0711nobodyさん
02/10/04 19:25ID:oWNxUl3mhttp://www.din.or.jp/~ohzaki/perl.htm
を読んでいて、「改行コードを統一する」って話のところで、
s/\x0D\x0A|\x0D|\x0A/\n/g;
と同値な文が
s/\x0D\x0A/\n/g;
tr/\x0D\x0A/\n\n/;
ってことが理解できない。2番目の文が
tr/\x0D\x0A/\n/;
じゃないのかと思うのだけれども、そもそもtr///やs///が理解できていないような気がしてきた。
tr///とs///の違いを含めて、ご教授願います。
0712nobodyさん
02/10/04 19:46ID:???これも>>1に追加した方が良いかな?
0714nobodyさん
02/10/04 20:13ID:yQsbQ4Tj誰かタツけて下さい。
$ find -name "*.pl" >find.log
$ cat find.log
./lwp-perl/ch07/bbc_scan.pl
./lwp-perl/ch06/amazon-rank.pl
./lwp-perl/ch06/orn-summary.pl
./lwp-perl/ch06/bookmark-checker.pl
./lwp-perl/ch06/ora-temps.pl
./lwp-perl/ch07/ora-temps.pl
↓
↓
bbc_scan.pl
amazon-rank.pl
orn-summary.pl
bookmark-checker.pl
ch06_ora-temps.pl
ch07_ora-temps.pl
同じファイル名であれば、プレフィックス(ディレクトリ名)をつけるというやつでつ。
0716nobodyさん
02/10/04 20:17ID:FKzI73uU丁寧な説明ありがとうございます。
hogeフォルダをつくったあとに設定ファイルも自動でつくる
ようになっていたので自動でつくられました。
パーミッションはローカルのせいか764でした。
もうちょっといろいろやってみます。
ここはPerlコーディングに感する質問スレです。
そのような依頼はスレ違いです。
0719nobodyさん
02/10/04 20:22ID:???編集中のファイル(バッファ)にPerlスクリプトをかけて
そのまま変更できるエディターとか言ってましたね。
1)いわずと知れたEmacs、Meadow(windows版)
2)xyyzz(windows版)、秀丸(filter.macってどうなった?)(windows版)
もちろんお勧めは、1)。
0720nobodyさん
02/10/04 20:28ID:???eval { $HEIKIN{$_} = $Point{$_} / $Count{$_}; };
>>705
キミの使ってるシェルはヒストリが呼び出せないのかね?
>>711
ttp://flex.ee.uec.ac.jp/texi/perl/perl_103.html
>>714
>>684 を見てがんがれ。
0722nobodyさん
02/10/04 20:55ID:???http://pc.2ch.net/test/read.cgi/php/1030151932/
甘ったれが多いなどうも
0723nobodyさん
02/10/04 21:36ID:???0÷0=0
なんだろう…
0724719
02/10/04 22:37ID:???よく読んだら違った。簡単なフィルター(Perlスクリプト)を書き直す
のにエディターを開いたり閉じたりするのが面倒ってことね。え?、
例を見るとコマンドラインスクリプトで十分できません?unixをお使い
のようですから、複数行にまたがるスクリプトも'\'を付けて簡単につ
なげて書けるんだから。
私は、emacsで対象テキスト開いといて、C-x h、C-u M-|して、Minibuffer
でPerlスクリプト実行させてます。
0725705
02/10/04 22:58ID:???【ワンライナー】履歴に間違った正規表現まで残って、後で探す時にややこしい。
【emacs】重いので起動が困難(vmware内なので)。
よって、edみたいなコマンドラインでさくっと編集できるエディターってないのかな
と思ったわけです。ed もなんだか使いづらいので。
varedってemacsライク(GNU readline)なキーバインドにできますよね。
それと似たやつで、なんかないかなー、という意味です。
0726nobodyさん
02/10/04 23:13ID:???! perl hoge.pl somefile
後は履歴で
0728719
02/10/04 23:55ID:???それって出力結果(stdout)はどこに出るの?
emacsなら、command outputとかっていうバッファが
別に開いて出るんだけど・・、あるいは、現在の
バッファそのものが変更される。vi系は設定ファイルいじる
だけだからなぁ。
0729nobodyさん
02/10/05 00:56ID:2qdJnT+hファイルをダウンロードして!と要求するとサーバにファイルを保存できるスクリプトありませんか?
0731nobodyさん
02/10/05 01:28ID:2qdJnT+h2チャンネルを携帯電話で見ているときに、画像のリンクがあった場合、画像の種類が携帯電話で見れないものだったり
サイズオーバーだった場合に自分のサーバに保存して、後で見るみたいな使い方をしたかったのですか…。
そんなのってないのでしょうか?
0733nobodyさん
02/10/05 01:31ID:???ウンドウズのCHMファイルなんてないですよね〜。
0736nobodyさん
02/10/05 04:30ID:???$_ =~ s/($value)/<b>$1<\/b>/og;
※$_,$valueは共にShift_JISです
といった置換処理をしたいのですが
$valueの2byte文字列内に【\x5b="["】が入ると、
メタ文字扱いされてしまい置換に失敗してしまいます。
Source部分に変数が来る場合のメタ文字エスケープは
どうしたらいいのでしょうか?
0737736
02/10/05 04:31ID:???×Source部分
○Pattern部分
0739nobodyさん
02/10/05 05:55ID:???0740736
02/10/05 05:59ID:???ギャー!!!
完結にありがとうございます!
子一時間、文字コード変えたりして
対応できるか試していたんですが無理で聞いてしまいました…
よくマニュアル嫁って感じでしたね…
0741nobodyさん
02/10/05 07:57ID:???物凄く穴だけど
#! perl
my $cmd = "wget -q $ENV{QUERY_STRING}";
my $pid;
if( !defined($pid = fork) ){
die;
}elsif($pid){
print "content-type: text/html\n\n$cmd\n";
exit;
}else{
close(STDIN);close(STDOUT);close(STDERR);
exec($cmd);
}
1;
>>733
最近は
http://www.perldoc.jp/
http://www.cpan.jp/
http://member.nifty.ne.jp/hippo2000/
ここらかな
0742:
02/10/05 11:32ID:lD9sCbwyおまえ小学生か?もっかい割り算ならってこい
0743nobodyさん
02/10/05 11:42ID:???http://www.bekkoame.ne.jp/~bero/docj/module_/15/WWW_Search_HotBot.html
http://www.bekkoame.ne.jp/~bero/docj/module_/15/CGI_Form.html
などのモジュールでコーディングしてる時に入力を補完する
emacsのモード(viでも可)、ってないですか。
0744nobodyさん
02/10/05 11:54ID:???Spreadsheet::ParseExcel
について情報を扱っているナイスなサイトってどこですかぁ?
2chで話題になったことってありますこ?
0745nobodyさん
02/10/05 13:37ID:???http://www.wvware.com/#wv
0746nobodyさん
02/10/05 13:48ID:???極悪様の
http://homepage1.nifty.com/dune/PerseExcel.html?
にもあるよん。
0747nobodyさん
02/10/05 13:53ID:???perl-modeが.pmとかでも効くように.emacsに設定しる。
(setq auto-mode-alist
(append '(("\\.pm\$" . perl-mode))))
か?やってみそ。
0748nobodyさん
02/10/05 18:09ID:17DAoS9d500サーバーエラーが出てしまいます。ドコモおかしくないと思うのですが、
分かる方いらっしゃいますか?
0749nobodyさん
02/10/05 18:39ID:???取り敢えず、20行目を見よ。
0751nobodyさん
02/10/05 19:01ID:???何もおかしくないと思うんですが。
>>750
どこの最後でしょうか?]
構文チェックすると
Can't find string terminator "EOF" anywhere before EOF at "perl.cgi" line 29.
と出たのですが、40行目にちゃんとEOFで閉じてるのでおかしくないと思うんですが。
0752751
02/10/05 19:08ID:???おかしくなってたようです。
あと、時刻の取得がうまくいかないようなのですが、
(表示が正確に出ない)
どう直せばよいでしょうか?(;´Д`)
0753nobodyさん
02/10/05 20:34ID:???PerlはCGIのためだけの言語ではありません。
Perlはとても柔軟で簡単なためCGIで最も多く使われていますが
CGIのために作られた言語ではなく、その他の学問的・業務的・
日常的な用途に広く利用されています。ご存知かもしれませんが
そのことをわきまえておいてください。ここで質問しても回答者
がいれば構いませんが、本当は、CGIに特化した質問は、>>1に書い
てあるように、この板にある以下のスレで質問してください。
CGIだけど、なんか質問ある?
【スクリプト改造工房 Part4】
CGIとかPerlとか初心者なんだけど
0754nobodyさん
02/10/05 21:05ID:???スクリプトを見た限り、「時刻の取得がうまくいかない」、「(表示が正確に
出ない)」というのは理解できません。うまくいくはずです。表示が正確に出
るはずです。どこがどううまく行かないのか説明しないと答えられません。
0755nobodyさん
02/10/05 21:21ID:???0756nobodyさん
02/10/05 21:29ID:apJJAmbiどう書けば出きるでしょうか?
0757nobodyさん
02/10/05 22:29ID:EJw02ifJつまんない質問なんですけどFILEアップロードするプログラムなんですけど
<input type=FILE>でUPするとたしかにプログラムは動くのですが
ファイル名を表示することができません。
cgi.libをつかっています
$IN{’’}でとってきてprintとすると文字がばけます
エンコードするのですか?
よくわかりません。初心者です。
0758nobodyさん
02/10/05 22:47ID:???色々<SPAN>fiarla</SPAN>日本語<SPAN>tegsgs</SPAN>何か
<SPAN>aretgsda</SPAN>テスト<SPAN>aretgsda</SPAN>マトリックス<SPAN>vxchgf</SPAN>
と言う文字列を 色々日本語何か\nテストマトリックス
だけにしたいのですが
s/<span><\/span>//ig;
にすると "色々何か\nテストマトリックス" になってしまいます。
どうしたらいいでしょうか?
0759nobodyさん
02/10/05 22:52ID:???かな・・・
0760太郎
02/10/05 22:58ID:JyTnPr2r情報量は知り合いの友達よりも結構多いです。
あと、このサイトの正式タイトルを考案中ですので応募してみては。
あとアンケートにも答えてみては。
http://www31.tok2.com/home/sanche/
0761nobodyさん
02/10/05 23:01ID:ojGyzDqf困っています。
どなたか以下の文をわかり易く説明ください。
パソはウィンドウズ2000です。
>public_html (ホームディレクトリ) の下に、「bbsディレクトリ」を作成し、
さらにその下にロックファイル用ディレクトリ「lockディレクトリ」と過去ログ用ディレクトリ
「pastディレクトリ」を作成します。
ホームディレクトリってどこにあるのですか?
0762nobodyさん
02/10/05 23:17ID:???http://www5a.biglobe.ne.jp/~n_rieko/perl/8.htm
ここを参照にして試行錯誤したのですが、上手くいかなくて・・・
ありがとうざいました。
0763nobodyさん
02/10/06 00:14ID:???「multipart/form-data」について検索後、
不明な点をまとめて適切な板・スレで再度質問して下さい。
>>761
「ドキュメントルート」について検索後、
不明な点をまとめて、その掲示板プログラムの作者のサイトか、
適切な板・スレで再度質問して下さい。
>>755
「GNU」「UNIX」「Perl」「CGI」について検索後、
適切な比喩を再度考え直して下さい。
0764nobodyさん
02/10/06 08:40ID:???メインCGIから$incfn{'ファイルを受け取るキー名'}
でファイル名自体にアクセスできる。
イレギュラーで気持ち悪い利用に仕方でよければ。
0765nobodyさん
02/10/06 09:57ID:???>「GNU」「UNIX」「Perl」「CGI」について検索後、
>適切な比喩を再度考え直して下さい。
ばーかばーぁ
0766nobodyさん
02/10/06 13:01ID:???print "Content-type: zip/i\n\n";
print;
このようにブラウザで表示しないコンテンツタイプを与えているのですが
unixだと動くのですが、Winだと空ファイルになってしまいます。
よい方法はございませんでしょうか?
0767nobodyさん
02/10/06 13:08ID:???0768nobodyさん
02/10/06 18:31ID:93CgaJbgCGIでできることを(商品注文フォーム、カート)などをあえてPHPや
CFでやりたいと思いますが、どっちの方が初心者に易しいでしょうか?
0769nobodyさん
02/10/06 19:09ID:???http://pc.2ch.net/test/read.cgi/php/1032704121/l50
>>768
http://pc.2ch.net/test/read.cgi/php/1006006800/l50
0770nobodyさん
02/10/06 19:14ID:MFc5Z8S/CFってなんだ?sendmailか?
0771nobodyさん
02/10/06 19:17ID:TUOpefL4ファイルの削除をしたかったので
$deletecount = unlink( $DeleteFileName );
こう書いたんですが反応なし。戻り値も0。
ファイル名は相対パスで正しい。
削除できない理由は何でしょう?
0772nobodyさん
02/10/06 19:44ID:???http://pc.2ch.net/test/read.cgi/php/988191427/
>>771
unlink の戻り値の意味は分かってるんだよね?
-f $DeleteFileName が真なら大抵↓が原因だと思う。
ttp://www.begi.net/linux/reading/linux_basic_knowledge/permission2.html
0774771
02/10/06 19:54ID:TUOpefL4レスありがとうございます。
しかし。読み書きできて削除が出来ないということがありますか?
削除できないのでしょうがなくこうしました。
open( OUT, "> $DeleteFileName");
close( OUT );
こう書くとちゃんとファイルサイズを0(ゼロ)にはできるんですけど。
ちなみに、削除したいファイルは同じcgiが過去に吐いたファイルです。
0775nobodyさん
02/10/06 19:56ID:E7XA3HNJJSPが途中で切れてコケます。
でもプロキシ通して同じJSPを表示させると切れません。
なにか考えられることってありますか?
0776771
02/10/06 20:14ID:TUOpefL4パーミッションの問題ではないような‥‥?
ftpから削除することは可能です。
0777nobodyさん
02/10/06 20:34ID:MFc5Z8S/たぶん、なにか見落としがあるんだよ。
単純にテストするだけのスクリプト書いて実行してみ。
ファイル名も変えて、相対パスもやめてカレントでopen,unlinkを実行。
0778nobodyさん
02/10/06 20:45ID:???http://pc.2ch.net/test/read.cgi/php/984840356/l50
>>776
unlink 後の $! は確認した?
0779771
02/10/06 21:04ID:TUOpefL4うおー!
$!をprintしてみたら"No such file or directory"でした!
しかし、なぜだっ!?
if ( -e "$DeleteFileName" ) {
print "$DeleteFileName は存在します。" ;
} else {
print "$DeleteFileName 存在しません。" ;
}
としてみたら、たしかに「存在しません。」のほうがprintされるけど。
なぜだっ?!
なぜ書き込みは出来るのか‥‥?
カレントのファイルを扱うようにしてみましたが症状は改善してません。
んでもこれで手がかりが見つかったような、気が。
ありがとうございます。もーちょい研究してみます。
0780775
02/10/06 21:04ID:E7XA3HNJそのスレ死んでましたのであきらめます^^;
0781775
02/10/06 21:08ID:E7XA3HNJ逝ってきます。
0782771
02/10/06 21:08ID:???ファイル名の最後に空白文字が入ってました。
printさせても見えないから気付きませんでした‥‥。
ありがとうございました‥‥。
0783771
02/10/06 21:09ID:???書き出すというのをやっているんですが、ファイルの更新日の新しい順に並べて出力したいんです。
stat()[9]の値を比較するんだと思うんですけどアホなのでそこから先に進めません。。
0788nobodyさん
02/10/07 11:49ID:???一個ずつ開いて、ファイル名とstat()[9]をハッシュに入れて閉じる。
foreachでハッシュをvalueでsortしながらkeyをopenで
開きつつprintする。
0789nobodyさん
02/10/07 11:54ID:???注意汁。
0790nobodyさん
02/10/07 11:57ID:???こんな感じか?
my(@f_list,%files);
opendir(DIR,'.');@f_list = readdir(DIR);closedir(DIR);
foreach(@f_list){next if(/^[\.]+$/);$files{-M "$_"} = $_;}
foreach(sort {$a<=>$b} keys %files){
open(TXT,"$files{$_}");
while(<TXT>){
print;
}
close(TXT);
}
0791nobodyさん
02/10/07 12:53ID:UDwaJ+AD自分の持っている本独習perl、実践入門perl、CGI&Perlポケットリファレンスには
cronなど載っていませんでした。なぜでしょうか。
こんな感じ?
>>790とは違って先頭がピリオドで始まるファイルは全てスキップするけど。
opendir DIR, '.' or die $!;
foreach (sort { (stat $b)[9] <=> (stat $a)[9] } grep{ not /^\./ } readdir(DIR) ){
open IN, $_ or die $!;
# 適当に加工して出力
close IN;
}
closedir DIR;
>>790
/^[\.]+$/という正規表現は読みにくいよ。/^\.+$/で十分。
Perlとは何の関係も無いからね。書籍ならUnixのコマンドリファレンス系で調べてみてね。
あとはGoogleね。
0795nobodyさん
02/10/07 13:12ID:???opendir(DIR,'.');
while (readdir(DIR)) {
$files{$_} = -M $_; if !-d $_;
}
closedir(DIR);
foreach(sort {$files{$a}<=>$files{$b}} keys %files){
if (open(TXT,$_)) {
print while (<TXT>);
close(TXT);
}
}
0796nobodyさん
02/10/07 13:17ID:UDwaJ+AD調べたらUNIXで使えると書いてありましたが、自分はwindowsなんですけど
無理ってことですか?CGIを自動で動かしたいんですけど。
プロバイダーも許してるところが少ないらしいし。。
ごめんなさい、Windowsで同等の機能を持つものはわりません。
use IO::File;
use IO::Dir;
my %date;
my $dh = new IO::Dir('.') || die;
for(sort {($date{$a}||=-M $a) <=> ($date{$b}||=-M $b)} grep -f $_ , $dh->read ){
my $fh = new IO::File($_) || next;
print <$fh>;
}
>>792,797
( ´,_ゝ`) プッ
0801nobodyさん
02/10/07 15:25ID:???grep使うほうが無駄
っていうか、grep自体ループしてまわしてるのと変わらん
ファイルハンドルはwhileで一行づつ処理するのが
一番速いし、メモリーも食わない
print <$fh>とかが一番最悪
{($date{$a}||=-M $a) <=> ($date{$b}||=-M $b)}
はさらに無駄
ファイル演算子はコストでかいのよ
これだと、二回呼び出してるでしょ
Perl厨の自己満足オナニーコードにはほんと辟易するね
0802nobodyさん
02/10/07 15:34ID:???できたんですが、ファイルに保存しないで、ストリーム
っていうのかな、流れてきた文字列に日本語の単語一語の
検索かけて、それが入ってる文(。から。まで)だけを取
り出すようなことできますか?
よろしくおながいします。
なるほど確かにstatの結果はキャッシュするべきだね。
>>801
まあまあ落ち着きなさいって。
確かにprint <$fh>は好かないけど、
{($date{$a}||=-M $a) <=> ($date{$b}||=-M $b)}
これは問題ないでしょ。一度statしたファイルに対しては二度とstatしないから、
必要最低限のstatしか行わないよ。
CGIスレで質問したってことを一言断った方がいいかも。私は気にしないけどね。
LWPで"getline"相当のことは難しそうなんで、一旦splitするのが無難かなぁ。
my $contents = $res->as_string();
foreach (split /\n/, $contents) # while(<IO>)みたいなもの。ただし改行は含まれない
{
print $_, "\n" if /pattern/;
}
またはIO::Scalarを使うとか。
use IO::Scalar;
tie *SH, IO::Scalar => \$contents;
while (<SH>)
{
print if /pattern/;
}
そんなに急ぎの質問?
皆ボランティアで答えてるんだからもう少し気長に待ってもいいんじゃないのかな。
0808nobodyさん
02/10/07 16:02ID:???どもCGIでレス待ってたんですが途切れちゃったもんで。
いやー、お詳しいですね。2通りのやりかたでやってみる
ことにします。どうもありがとうございました。感謝の
気持ちです。m(_ _)m
/\
/イヨー \
/大統領! \
0810nobodyさん
02/10/07 16:14ID:???よく見てみますと、>>806では、受け取ったHPを$contentsとか
<SH>に格納するんですね。これが大容量になると(例えば100
ファイルとか)、やはりまずいかなーと。大きさはかって制限
すればいいことはいいですが。
漏れが考えてたのは、cat file | grep "string" みたいに、
ストリームで処理できないかなーということだったんです。
それは無理ですか。
0811nobodyさん
02/10/07 16:18ID:???たびたびスレ汚しスマソ。考えてみたら、受け取ったファイル1個
毎に上の処理すればいいので、>>806でできそうです。ありがとう
ございました。
0812787
02/10/07 16:36ID:???いろいろ試してみます。
Perl厨の自己満足オナニーコードですみませんでしたm(__)m
0814nobodyさん
02/10/07 23:24ID:???map { $_->[ 1 ]}
sort { $a->[ 0 ] <=> $b->[ 0 ]}
map{ [ (stat $_)[ 9 ], $_]}
@files;
0815nobodyさん
02/10/07 23:48ID:???を実行した時に、初回だけ、ミラーサイトを選択するメッセージが出ますが、
後から、そのミラーを変更したい場合は ~/.cpan/ 以下のどのファイルの
どのエントリーを変更すればいいのでしょうか?
ほしいファイルが今のミラーにないようで、困っております。
0816nobodyさん
02/10/07 23:50ID:???1:自分はこう言う事がしたい。
2:それでこんな風にやってみたが・・・
3:それだとこんなエラーが出て上手く行かなかった。
1と3が無いと誰も答えられないよ。
良い回答は良い質問から。一緒に勉強しましょう。
0817_gunzip ◆eiH/XdoCNg
02/10/08 01:24ID:???/usr/lib/perl5/5.8.0/CPAN/Config.pm を $HOME/.cpan/CPAN/MyConfig.pm
にコピーし、`perldoc CPAN`の"CONFIGURATION"セクションを参考にしつつ適切に書き換えてください。
0818nobodyさん
02/10/08 13:12ID:???1.---- Unsatisfied dependencies detected during [A/AD/ADIE/Test-Exception-0.12.tar.gz] -----
とエラーがでる
2.Test::Exceptionをmake testして失敗した後、Sub::Uplevelというのを
make testして Test returned status 1 (wstat 256, 0x100)という結果になって
3.再度Test::Exceptionをmake testして
/usr/bin/make test -- NOT OK
Running make install
make test had returned bad status, won't install without force
となって終了します。どなたか同じこと経験された方いらっしゃいませんか?
0819nobodyさん
02/10/08 13:55ID:1one6uxb数字が5文字以上続いた場合はどう書けばいいですか。
0821nobodyさん
02/10/08 14:07ID:???[0123456789][0123456789][0123456789][0123456789][0123456789]+
0822nobodyさん
02/10/08 14:23ID:???ありがとうございます。
0823nobodyさん
02/10/08 14:41ID:???[0123456789][0123456789][0123456789][0123456789][0123456789][0123456789]*
0825nobodyさん
02/10/08 16:31ID:???[0123456789][0123456789][0123456789][0123456789][0123456789]+
これは長くて、コードは短いほどいいと思うんですけど、
[0-9]{5,}とどっちが優れてるんですか?
0826nobodyさん
02/10/08 16:44ID:???画像アプローダみたいな物を作りたいのです、
アップロードまではperlでできるというようなことはわかりました。
そのあと、jpgの画像をサーバー内で縮小させたりしたいのですが、
どんなものが必要ですか?
0827nobodyさん
02/10/08 16:51ID:???>>824はネタれす。ネタニマジレス、アリガトン
コンパイルされるときは同じになるんじゃないかな。
省略記法の方が遅くなることえてしてあり。
私はWinだけど、問題なく成功してしまったなぁ…。
とりあえず、OSとPerlのバージョン、何のテストが失敗したか
くらないとアドバイスのしようがないよ。
0830nobodyさん
02/10/08 17:12ID:???すみません。
RedHat7.2
perl5.6
perl -MCPAN -e shellにおいて
install Test::Exception
とした場合に自動実行されるTest::Exceptionのmake testでエラーが出ました。
>>830
いやいや、"エラーが出た"だけじゃなんとも言えないよ。もっと詳しく。
例えば、makeするとこんな感じのログが表示されると思うけど:
C:\Perl5.6\bin\perl.exe "-MExtUtils::Command::MM" "-e" "test_harness(0, 'blib\li
b', 'blib\arch')" t\caller.t t\documented.t t\Exception.t t\pod.t t\preserve.t t
\return.t t\stacktrace.t
t\caller........ok
t\documented....ok
t\Exception.....ok
t\pod...........ok
t\preserve......ok
t\return........ok
t\stacktrace....ok
All tests successful.
Files=7, Tests=35, 2 wallclock secs ( 0.00 cusr + 0.00 csys = 0.00 CPU)
D:\bin\dmake.exe test -- OK
この中央の"t\*...ok"(Unixだと"t/*...ok")がモジュールのテストだから、
これらのどれが"not ok"となったか、また"not ok"の後ろに何か表示されたか(あれば)、を書いてね。
0832nobodyさん
02/10/08 17:47ID:lB7AvP/OGD.pm
0833nobodyさん
02/10/08 18:30ID:???flintstones => {
series => "flintstones",
nights => [ "monday", "thursday", "friday" ],
members => [
{ name => "fred", role => "husband", age => 36, },
{ name => "wilma", role => "wife", age => 31, },
{ name => "pebbles", role => "kid", age => 4, },
],
},
0834833
02/10/08 18:31ID:???series => "jetsons",
nights => [ "wednesday", "saturday" ],
members => [
{ name => "george", role => "husband", age => 41, },
{ name => "jane", role => "wife", age => 39, },
{ name => "elroy", role => "kid", age => 9, },
],
},
0835833
02/10/08 18:31ID:???series => "simpsons",
nights => [ "monday" ],
members => [
{ name => "homer", role => "husband", age => 34, },
{ name => "marge", role => "wife", age => 37, },
{ name => "bart", role => "kid", age => 11, },
],
},
);
0836833
02/10/08 18:38ID:???保存して、動的にデーター構造を作る方法について、ご相談があります。
具体的には、アンケート調査で得られた、各団体の属性をperlで処理するために
複雑なレコードデータを、一旦テキストファイルに保存する必要があるのですが、
一般的には、このくらいの複雑さであれば、どのような形式でテキストファイルに
保存するのが一般的なのでしょうか(あるいは、この程度の複雑さであれば単純に
○○使うといい、というものでも結構です)。
私は学生ですし、初めてこのような処理を行うため、
社会人で複雑なデータ構造を構築された経験のある方なら、こういう場合、
どのように判断されるのかなと思い、質問させていただきました。
0837nobodyさん
02/10/08 19:10ID:???0839597
02/10/09 02:56ID:???お返事がおくれまいした。おかげさまで、解決いたしました。お手数おかけしました。
すっかり見落としてた……
>うーん。もっとカコイイ方法ないかなあ。
少し内容は変わりますが、
http://www-6.ibm.com/jp/developerworks/linux/011130/j_l-pexcel.html
のexcel-x2.plという例題(Spreadsheet::ParseExcel、Spreadsheet::WriteExcelの例題なのですが)
がすごく参考になりました。
変数を沢山使うのですが、非常に応用できそうなコードだったので、ご紹介しておきます。
0840nobodyさん
02/10/09 13:57ID:???foreach $value (@value){
if($i == 11){
last;
}
print $i\n;
$i++;
}
こうすれば10まで表示したらforeachを抜けますよね?
0841nobodyさん
02/10/09 15:46ID:???10回ループしたら抜けます。つーか、ループさせる回数が決まっているのなら
foreach を@value でまわさずに$iで書いた方がわかりやすいです。
foreach $i (1..10) {
print $i, "\n";
}
で、質問はそれだけなの?
で、それに1つづつリクエストするわけですが、どう考えても重いんです。
50回リクエストするんだから当然と言えば当然だと思うんですけど、ブラウザで50ページ分開くのと同じですよね。
実際CGIを回したら40ページくらい保存したとこでCGIは「このページは表示できません」となりました。
その間、1分30秒くらいでした。こういうのってやっぱりサーバーに負担がかかるんでしょうか。
どっちにしろこのままじゃ途中でタイムアウトしちゃうので半分くらいに分けて
途中でhtmlを吐き出して、「残りの半分をダウンロード」とかいうボタン付けて続きをリクエストしようと思うんですけどこのやり方はどうですか。
0843840
02/10/09 16:50ID:???なるほどそういう書き方もあるのですね。
ありがとうございます。
0844nobodyさん
02/10/09 17:04ID:???ブラウザのタイムアウトかな?ってきがするんですが
1. 1ページ保存する毎になにかprintするようにする。
2. forkして、プロセス切り離してcgiはいったん終了する
3. そのとおりNページ毎に処理をわける
とかが、結構一般的かと、、、
0845nobodyさん
02/10/09 17:37ID:1+Y7R6lCmy $query = new CGI;
my $value = $query->param("text");
$query->header
(
-type=>'text/html; charset=euc-jp'
),
$query->start_html
(
-title=>"値の表示",
-lang=>'ja'
),
$query->h1($value . "の値"),
$query->end_html;
として$valueを取得して表示する場合、
文字コードの扱いはどうなるんでしょう?
自分は、クライアント環境のコードがそのまま
飛んでくるだろうと考えていたのですが、
UNIX上のブラウザから試してもWindows上のブラウザから
試しても化けずに表示されました。
もしかして、CGI.pm は適切に文字コードを変換するところまで
やってくれているのですか?
http://pc.2ch.net/test/read.cgi/php/1032704121/
0847nobodyさん
02/10/09 19:09ID:???そのスレの一番上に
>※Perlのコーディングに関する質問は専用スレがありますのでそちらでお願いします。
> ↓
> Perl 初心者コーナー Part16
> http://pc.2ch.net/test/read.cgi/php/1032070299/l50
って書いてあるぞオイ(w
まぁ>>845はどちらかというとCGIの話か。
0848nobodyさん
02/10/10 04:01ID:MdydjVId↑この添付ファイル対応のフォームメールスクリプトを設置してみたんですが、
添付したファイルが(画像でテスト)、ぐちゃぐちゃになって送られてきます。
小さいのだったら、いけるんですが、大きくなると・・・
で、以前どこかで、httpの仕様で、何kbまでしか云々ってのを読んだんですが、
ソレのせいでしょうか?
考えられる理由を教えていただけないでしょうか?
0849nobodyさん
02/10/10 04:46ID:ZvzQ38ZZなっているよ。誰が設定したのか知らんが、設定した人に字数制限
をしているのかどうか聞いてみたら?
もしもそうなら、画像ファイルをテキストにしたメールが制限に引っか
かって後半がちょん切られいるからぐちゃぐちゃになると思う。
あと、「添付した画像がぐちゃぐちゃになる」なんて言われるよりも
画像にする前のテキストがどうなっているのかを言ってくれる方が
対処しやすい。
それとHTTPの仕様で…なんて話はないです。もしも本当に読んだのなら
そのバカライターをここで晒してくれ。友達に聞いたのなら晒さなくてもいい
けど、100%鵜呑みにするべき人じゃないということです。
0850848
02/10/10 08:21ID:Z9fpt7At設定したのは自分です。
>※1 ファイルアップロード可能 字数制限なし(実際は2^17=131072bytes以内)
><form action="form2mail.cgi" method="POST" ENCTYPE="multipart/form-data">
↑これにしたんで、あってると思うんですが・・・
で、送られてきた画像は、gifなら、
おっしゃるとおり、半分くらいが、ちょん切れてます。
jpegなら、パズルでばらばらにされたようになるんですが・・・
これは、圧縮形式の違いで、両方、破損してるのは、間違いないと思います。
>画像にする前のテキスト
この辺が、おっしゃってる意味が、ちょっとわからないんです。
このフォームを使って何か画像を送り、
送る前の画像と、送った後の画像の拡張子を.txtにして、報告しろ
っていう意味でしょうか?(メチャクチャ言ってたら、ゴメンなさい)
>httpの仕様
そうですか、友達に聞いたとかじゃなくて、掲示板かどこかで、
見たんです。(2chだったかも)
おそらく全く別の話か何かだったんでしょう。スイマセン。
0852848
02/10/10 09:15ID:rBn0TZDOmain7.gifを送ったんですが、↓この辺のことでしょうか?
-------------------------------7d238f34a0412
Content-Type: application/octet-stream; name="main7.gif"
Content-Transfer-Encoding: X-uuencode
Content-Disposition: attachment; filename="main7.gif"
begin 644 main7.gif
・
・
・
0854しろうと
02/10/10 11:22ID:rv3sQjTvweb初心者なりにがんばって,アクセス解析用フリーCGIスクリプトのefStat
(ttp://www.skipup.com/~fuka/) というのを設置してみたのですが,アクセス
解析結果の検索ワード欄が文字化けしてしまい,調べてみると,どうも日本語
文字コードを扱うルーチンjcode.plというのが古すぎて,Jcode.pmというのに
変えなければならないということが分かりました.
ところが,闇雲に jcode.pm その他を cgi-bin/fstat/lib/ 下に置き,
fstat.cgi (アクセス解析スクリプト) を実行すると Internal Server Error
になってしまいます.
/usr/local/apache/logs/error_log を見ると,
Can't locate object method "new" via package "Jcode" at lib/start.pl line 62.
Compilation failed in require at /home/****/public_html/cgi-bin/fstat/fstat.cgi line 111.
[Wed Oct 9 15:57:38 2002] [error] [client ***.***.***.***] Premature end of script headers: /home/****/public_html/cgi-bin/fstat/fstat.cgi
こんな感じでした.
サーバはRH Linuxの7.0か7.1程度,Perlのバージョンは5.6.0です.
Jcode.pm利用への手順など,簡単に教えて頂けませんでしょうか?また,サー
バのrootに何かしてもらう必要はありますか?
宜しくお願いします.
0855849
02/10/10 12:02ID:ZvzQ38ZZ画像でもオフィス文書でもメールに添付するときにはMIME BASE64というエンコード
で、テキストに変換しているのです。 Outlook Expressなどのメーラは、そういう生の
データを見る方法があるのかどうなのかしりませんが、
------------92AECG1NXU3WZAT
Content-Type: audio/x-midi;
name=Setup.exe
Content-Transfer-Encoding: base64
Content-ID: <B1i55vjBs7G1k>
TVqQAAMAAAAEAAAA//8AALgAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAA4AAAAA4fug4AtAnNIbgBTM0hVGhpcyBwcm9ncmFtIGNhbm5vdCBiZSBydW4gaW4gRE9TIG1v
ZGUuDQ0KJAAAAAAAAABxdTv8NRRVrzUUVa81FFWvTghZrzEUVa+2CFuvNxRVr90LX68gFFWv3QtR
rzcUVa9XC0avPhRVrzUUVK+OFFWv3QterzoUVa+NElOvNBRVr1JpY2g1FFWvAAAAAAAAAABQRQAA
TAEDAF1Flz0AAAAAAAAAAOAADwELAQYAAMAAAAAQAAAAQAYAQA0HAABQBgAAEAcAAABAAAAQAAAA
AgAABAAAAAAAAAAEAAAAAAAAAAAgBwAABAAAAAAAAAIAAAAAABAAABAAAAAAEAAAEAAAAAAAABAA
添付書類はこういう感じになって普通の文章の後ろについています。
だから、そういったメールを見て、ちょうど何文字くらいで切れているとか
何行くらいで切れているとかというのがわかれば、そこらへんに原因が
あるのかなぁと。
0856nobodyさん
02/10/10 12:05ID:ZvzQ38ZZまあ、とりあえずここでも読んでください。
http://www.google.co.jp/search?sourceid=navclient&hl=ja&ie=UTF-8&oe=UTF-8&q=Jcode%2Epm+%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB
0857しろうと
02/10/10 12:14ID:???ありがとうございました.要点は,システムへのインストールが必要なので,
root に頼んで,きちんとインストールしてもらわなければならないものだと
いうことですよね?
何となく分かってきました.ありがとうございました.
0858848
02/10/10 12:31ID:0YXqHo+tあ、やっぱ、ソレだったんですか・・・
852から始まって、最後5行が、
・
・
・
MARSRR"27;+(PO:&I3L<>^T4Q3IA<3#$C+IUL\\TXYZSSK36AP^+.0`<M]-!$
J`]VSLT4GK?323#>-%[email protected]%17$FWU(R[]?/767'?M]==@AZU:(``[
`
end
-------------------------------7d238f34a0412--
↑こんな感じなんですが、コレじゃあわかんないですよね?
あ、コレ、Yahoo!のトップの画像なんですけど、(main7.gifってやつです)
0859848
02/10/10 12:45ID:???> 852から始まって、
は
>>852の
> -------------------------------7d238f34a0412
> Content-Type: application/octet-stream; name="main7.gif"
> Content-Transfer-Encoding: X-uuencode
> Content-Disposition: attachment; filename="main7.gif"
>
> begin 644 main7.gif
> ・
> ・
> ・
から始まって・・・って意味です
0860849
02/10/10 13:48ID:???メールが途切れていることはないと思います。となると一から考え直しですが、
ぐちゃぐちゃになった画像ファイルはサイズも変わっていますか?
0861848
02/10/10 14:10ID:084tFYZPYahoo!Top画像(main7.gif) 6.67 KB (6,837 バイト)
メールを通したもの 6.63 KB (6,792 バイト)
です。若干縮んでますね。
0862nobodyさん
02/10/10 14:41ID:???サーバの OS は? Win系だったら
231: if (!open(OUT,"| $nkf -j | $sendmail -t")) { &error('Error'); }
232: binmode OUT; # 追加
233: $host = $ENV{'REMOTE_HOST'};
かも知れない。Win でパイプなんて使った事ないから、
binmode 要るのかどうか知らんけど。
0863nobodyさん
02/10/10 14:41ID:Nn4CcN7jcgiスクリプトの
if (-e "$tmp$filenum") { unlink("$tmp$filenum"); }
をコメントにして、アップロードが正常に出来ているか確認してみては。
./tmp/ディレクトリにアップされた画像を表示してみる。
異常だったらアップロードが変
正常だったらuuencodeが変
0864質問
02/10/10 14:44ID:???ログ200行の中からwhileで10行処理するのとは
スピードは変わらないんですか?
具体的なソースを出してくれなきゃ、「そんなにかわらない」としか
言えない。けど、いまどきのコンピュータで100行の処理と200行の
処理で違いがでるほどのことがあるのかな。
0867862
02/10/10 14:59ID:???413: if (open(UU,"$UUENCODE $tmp$filenum $filename |")) {
414:
415: @UUFILE = <UU>;
見つからない、とかいうケースだと違いは大幅に出ますが、先頭10行出力、程度だと
ほとんど変わらないでしょうね。
0869848
02/10/10 15:05ID:???で、>861さんのをやってみたんですが、
ちゃんと表示されてました。
ってことは、uuencodeなんですよね?ヴァージョンでしょうか?
でも、レンタル鯖にお願いすることもできないですし・・・
このまま、tmpのんをコメントアウトしといて、
自分でダウンしに行くっていう手をとるしかないかなぁ・・・
何はともあれ、理由が解ってホッとしました。
有難う御座いますた!
あ、もし「こうしたら?」みたいなのがあれば、
書き込んでくれると、嬉しいです。
0870nobodyさん
02/10/10 15:06ID:???1;
__END__
これなんですか。
0873nobodyさん
02/10/10 16:11ID:???use Socket; は大抵のサーバーで使えるんですよね?
use IO::Socket; これは使える確立が低いんですよね?
0874nobodyさん
02/10/10 16:16ID:???Socket はperl5の標準モジュールですが、 IO::Socketは別途インストールする必要が
ありますから、使える可能性は低いですね。
0876nobodyさん
02/10/10 17:36ID:???IO::Socketも標準だけど…(少なくとも5.005の時点では)
しかもIO::SocketはSocketのラッパーに過ぎないので、
Socketが使えてIO::Socketが使えないという状況は考えにくいよ。
0878873
02/10/10 20:35ID:???0880nobodyさん
02/10/11 13:44ID:???「\$\w+」この書き方であってますか?
でもこれだと $abc123 とかいう変数は123に反応しないんで間違ってるみたいなんですが。
0881nobodyさん
02/10/11 13:53ID:???0882nobodyさん
02/10/11 13:56ID:ZUcC5F8u0883nobodyさん
02/10/11 15:08ID:3YhC7jcnまずは、ヘッダの取得とボディの取得。たとえば、
Recieved: ヘッダは複数行にわたることがありますし、同じヘッダ名で複数
存在することがあるので、これは複数行を一つにまとめ、配列にいれる。
](例)
Received: 1
2
3
Received: a
b
c
だったら、以下のように格納したいです
$header{Received][0] = "1 2 3";
$header{Received][1] = "a b c";
0884nobodyさん
02/10/11 15:10ID:3YhC7jcn本文は @0body に格納したいです。
以上を、まずやって、各行の内容をチェックして・・・・。
とおもっているのですが、いまだ超初心者のため、全然
うまくいきません
どなたかおしえていただけませんか?
0885nobodyさん
02/10/11 15:55ID:CDmI7Jp8print;
}
変数$nameにマッチするかどうかチェックするには
こんな書き方でいいんですか?正規表現でも$が使わ
れてるからよくないとは思うのですが。
うまくいったりいかなかったりするので、こういう
場合の正しい書き方教えてください。
0886nobodyさん
02/10/11 16:10ID:dKGHWOFuhttp://www.geocities.co.jp/Milkyway-Aquarius/4378/
北朝鮮の彼氏を持つ女の子のHP
具体的に何を教えて欲しいのかはっきりしてくれませんか?
Perl超初心者でも人間の初心者、日本語の初心者でなかったら、
何をやろうとして、こういうことをしたんだけど、こういう結果がでて
ほしいのに実行結果はこうなりました、くらい書けないのか。
0888nobodyさん
02/10/11 20:15ID:5ek4fUJV入門本に載っているいちばん単純なソースをエディタで打ち込んで
ブラウザからアクセスすると、500 Internal Server Errorとなります。
どこが悪いのでしょう?
#!/usr/bin/perl
use CGI qw(:satndard);
print header;
print start_html('Hello');
print h1('This is hello.cgi');
print end_html;
0889nobodyさん
02/10/11 20:51ID:???0890nobodyさん
02/10/11 20:53ID:???まずCGIの問題とPerlの問題に切り分けてください。
まずCGIがきちんとお約束どおりになっているかどうか
確認してください。プロバイダによっては、
#!/usr/bin/perl なのか #!/usr/local/bin/perl かに分かれますし、
ファイルのパーミッションもプロバイダから指定された通りになって
いるのかどうかを調べてください。
CGIだとエラーメッセージはwebサーバのログに
でますから、もしも自分でサーバを立てているとかで
サーバのログが見れるのでしたら、そこを見てください。
それが無理なら、
use CGI qw(:satndard);
use CGI::Carp qw(fatalsToBrowser);
という風にCGI::Carpをつけるとエラーメッセージがブラウザに
出ますので、とりあえずそれを見てください。
0891nobodyさん
02/10/12 01:31ID:???消えることがあるのはなぜですか?
自作でアクセスログ取得機能付きのカウンタをつけてみたのですが,
3日に一度はカウンタ数などを記録するファイルが消えてしまいます.
消えないように気をつけるための注意点などあれば教えてください.
0893nobodyさん
02/10/12 01:42ID:???http://www.makoto.ath.cx/~uploader/source/up0143.txt
0894892
02/10/12 01:51ID:???のように、読み込みなのに書き込み用ロックを実行している。
>open(OUT, "> $logfile");
のように、いきなりファイルを空にしている。
0895nobodyさん
02/10/12 01:58ID:???では,ひとつめはflock(IN,1)にすれば良いだと思います.
でも,ふたつめはどのように解決したらいいんでしょうか…
0896892
02/10/12 02:02ID:???flock(OUT, 2);
truncate(OUT, 0);
seek(OUT, 0, 0);
print OUT "hogehoge\n";
close(OUT);
みたいな感じかな・・・
0897nobodyさん
02/10/12 02:07ID:???早速そういうふうにしてみます.
それでもダメでしたらまた来ますのでよろしくお願いします.
0898nobodyさん
02/10/12 02:13ID:???0899892
02/10/12 02:15ID:???0900nobodyさん
02/10/12 02:23ID:???0901nobodyさん
02/10/12 02:30ID:???http://www.puni.net/~mimori/rfc/rfc3092.txt
0902nobodyさん
02/10/12 02:35ID:???どうも.fooとbarはわかりましたが,hogehogeはホゲホゲなんですか?
なんか変ですね.かくかくしかじかみたいな感じか.
0903nobodyさん
02/10/12 02:38ID:???http://pc.2ch.net/test/read.cgi/php/1012141548/l50
0904nobodyさん
02/10/12 02:41ID:???0905nobodyさん
02/10/12 13:13ID:kfRJ7swR#! c:/perl/bin/perl
$LOGPATH = './log/'; #ログ保存ディレクトリ
$EXPIRES = 3; #アクセスログ保存期間
# 日付の取得
$tm = time;
($sec, $min, $hour, $mday, $mon, $year,) = localtime $tm;
$year += 1900;
++$mon;
# アクセス情報の整形
$in = "$hour\t$min\t$ENV{'REMOTE_HOST'}\t"
. "$ENV{'HTTP_REFERER'}\t$ENV{'HTTP_USER_AGENT'}\n";
# ログファイルへの書き込み
open(FILE, ">>$LOGPATH$year$mon$mday.dat") or die("ERROR: open log-file.");
eval{ flock(FILE, 2) };
seek(FILE, 0, 2);
print FILE $ln;
close FILE;
# 古いログファイルの削除
$tm -= $EXPIRES * 60 * 60 * 24;
($sec, $min, $hour, $mdoy, $mon, $year) = localtime $tm;
$year += 1900;
++$mon;
$delfile = "LOGPATH$year$mon$mday.dat";
if(-e $delfile) {
unlink $delfile;
}
0906905
02/10/12 13:14ID:kfRJ7swRどこがおかしいのでしょうか?
エラーログは
[Sat Oct 12 13:06:54 2002] [error] [client 127.0.0.1] Premature end of script headers: c:/apache/htdocs/tendays/4-2.cgi
です。
0907nobodyさん
02/10/12 13:19ID:???0908905
02/10/12 13:25ID:kfRJ7swRえっ!?
それではこのエラーは何が原因ですか?
0909nobodyさん
02/10/12 13:41ID:???まず、こんなの効かないっしょ。
>#! c:/perl/bin/perl
あとここね。2行に分かれてるけど行末に転送時に\rが入っちゃってんじゃ
ねえの。
># アクセス情報の整形
>$in = "$hour\t$min\t$ENV{'REMOTE_HOST'}\t"
>. "$ENV{'HTTP_REFERER'}\t$ENV{'HTTP_USER_AGENT'}\n";
0910nobodyさん
02/10/12 13:42ID:???Win?
出力はないんですね?
0912911
02/10/12 13:53ID:???ログ内容からして、ヘッダが出力されていないよーって言ってます。
0913905
02/10/12 13:59ID:kfRJ7swRしかし・・・・
ヘッダ出力させるにはどうすれば・・・
0914nobodyさん
02/10/12 14:25ID:???0915nobodyさん
02/10/12 14:52ID:???引数の文字列が日本語か英語かの判断ってどうやるのですか?
「参考」
http://bulknews.net/lib/utils/eijiro/
0916915
02/10/12 14:54ID:???のほうがいいかも
0917nobodyさん
02/10/12 16:47ID:???aaa bbb ccc
ddd fff ggg
% foreach i (`cat aaa`);echo $i;end
aaa
bbb
ccc
ddd
fff
ggg
%
とバラバラにしてperlの@lines=<>;でそれを
aaa bbb
ccc ddd
fff ggg
のように変形してSTOUTに出したいのですが……
書き方が判りません。
助けてくださいませ。
0918nobodyさん
02/10/12 17:00ID:???0919%d%d%d%d%d%d%d%d%d
02/10/12 18:25ID:???36007 36045 36103 36115 36118 36136 36142
% perl -ane 'printf("(%d|%d|%d|%d|%d|%d|%d)\n",@F)' aaabbbbbbbbb
(36007|36045|36103|36115|36118|36136|36142)
といつもやってますが、%dを何度も書きたくないので、省略して書きたいです。
0920nobodyさん
02/10/12 18:45ID:???0922nobodyさん
02/10/12 20:53ID:???こっちにしとこ
open(OUT, "+< $datafile");
flock(OUT, 2);
seek(OUT, 0, 0);
print OUT "$data\n";
truncate(OUT, tell(OUT));
close(OUT);
http://homepage1.nifty.com/glass/tom_neko/web/web_04.html#output
0923nobodyさん
02/10/12 23:16ID:???に
『活動中のエクセルシートから1行抜き出す』
という記述があるが
AppleScript 使えば、
起動しているEXCELからデータ取れるのかな?
0924nobodyさん
02/10/13 01:15ID:yxI3IEPSif($ent_rate_extra && $line[12] < $ent_rate_border){ push(@line_temp, "$_\n"); next; }
この行の前に、
$ent_rate_border = 10;
を追加するとエラーが出ます。
javaをちょっとやった初心者ですが、
数値を代入しちゃ不味いですか。
0926nobodyさん
02/10/13 01:31ID:???$ent_rate_border = 10;
を書き足すと、if文内が実行されるからエラーが出る。
next; は不要だから削除するとエラーは出なくなるよ。
0927924
02/10/13 01:41ID:???レスサンクス。
サーバで直接実行しているので、具体的なメッセージはわかりません。
あーん、怒らないでね。
>>926
if文内が実行されるのですね。
やっぱり、しったかじゃ改造は無理みたいですね。
基本から勉強し直します。
0928924
02/10/13 01:47ID:???$line[12] < 50
で区分されるのを、10で区分したかったんです。
>if文内が実行
きっと今は、htmlから読み出された時に実行されるのですね。
0929924
02/10/13 04:16ID:???if($ent_rate_extra && $line[12] < 10){ push(@line_temp, "$_\n"); next; }
で、意図する物ができました。
お騒がせしました。
0930nobodyさん
02/10/13 17:54ID:???例
1(改行)
2
3
ローカルでfor($i=0;$i<100000;$i++)で配列作成と一回毎にファイルへの書き込む二通りをやってみたのですが、7000個(行)程度で新規ファイルを自動的に作成し、その後その新規ファイルを7000毎に更新して結局1〜7000、93000〜100000
の二つのファイルしかできませんでした。
次にfor文をネストして7000×15のファイルを作ろうと思い組んでみたのですが、ファイル名に変数が使えないため実現できませんでした。
6桁以上の連番ファイルを作成するにはどうしたらいいのでしょうか?
ファイル名に上手く変数を使う方法や別の方法がありましたら教えてください。
言語はscriptとJavaなどを少しかじった程度です。
0931nobodyさん
02/10/13 18:01ID:???なにをしたいのかなにを聞きたいのかさっぱりわからん。説明する能力って大事ね。
0932bloom
02/10/13 18:02ID:7jsv3n6xhttp://homepage.mac.com/leverage/
0934nobodyさん
02/10/13 18:16ID:???print $_,"\n";
}
0935930
02/10/13 18:23ID:???0936830
02/10/13 19:03ID:???レスしてくださった方すみませんでした。
そもそもこのテストの意味から勉強しようと思います。
例えば、 /usr/bin/make -- OK
Running make test
PERL_DL_NONLAZY=1 /usr/bin/perl -Iblib/arch -Iblib/lib -I/usr/lib/perl5/5.6.0/i386-linux -I/usr/lib/perl5/5.6.0 -e 'use Test::Harness qw(&runtests $verbose); $verbose=0; runtests @ARGV;' t/*.t
のように
makeが成功すると
t/f000....ok
t/f001....ok
t/f002....ok
のようにテストが始まりますが、
t/f** のはすべてOKですが
t/m004....ok
t/m005....FAILED test 5
Failed 1/30 tests, 96.67% okay
t/m006....ok
のように t/m005でエラーが出ます。
エラー表示はFailed Test Stat Wstat Total Fail Failed List of Failed
-------------------------------------------------------------------------------
t/m005.t 30 1 3.33% 5
Failed 1/48 test scripts, 97.92% okay. 1/2710 subtests failed, 99.96% okay.
make: *** [test_dynamic] エラー 11
/usr/bin/make test -- NOT OK
といった感じです。
0937830
02/10/13 19:05ID:???0938830
02/10/13 19:26ID:???perl -d -Iblib/arch -Iblib/lib t/m005.t
を実行しました。何かわかることあるでしょうか。
ok 4
main::(t/m005.t:42): $n++;
DB<1>
main::(t/m005.t:44): Date::Calc->date_format(2);
DB<1>
main::(t/m005.t:45): Date::Calc->language(11);
DB<1>
main::(t/m005.t:48): local($date->[0][2]) = undef;
DB<1>
main::(t/m005.t:48): local($date->[0][2]) = undef;
DB<1>
main::(t/m005.t:49): if ("$date" eq '4 1-ago-2001')
DB<1>
main::(t/m005.t:50): {print "ok $n\n";} else {print "not ok $n\n";}
DB<1>
not ok 5
0939nobodyさん
02/10/13 20:04ID:sWhCrFb+0940nobodyさん
02/10/13 20:06ID:???/ ̄ l | / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
■■-っ < 呼んだ?
´∀`/ \__________
__/|Y/\.
Ё|__ | / |
| У.. |
0941nobodyさん
02/10/13 20:09ID:sWhCrFb+でもタモさんでもいい!おしえてっ迅速に!
0942nobodyさん
02/10/13 20:17ID:???sub urlenc {
my($x) = @_;
$x =~ s/([\W])/sprintf("%%%02X",unpack("C",$1))/ge;
return $x;
}
かえ?
0944nobodyさん
02/10/13 21:56ID:???0946nobodyさん
02/10/13 22:01ID:???ベスト?ベターじゃない?
それ、お大尽スクリプトって言ってた人いたな。
メモリが許しゃ同じことだろうけど、あとの処理は、
かえって面倒じゃん。for(@log)でループでしょ。
0948nobodyさん
02/10/13 22:04ID:???「7.4.2 空間の効率を上げるためのヒント」
・配列操作やファイル全体を読み込むことを避ける。
「7.4.3 プログラマの効率を上げるためのヒント」
・配列全体をいじったり、ファイル全体を一気に読み込んだりする。
0949944
02/10/13 22:14ID:???$#log=298;
とかやるだけでログ行数が制御できるので配列を使おうと思ったんですが
どかっと @log=<LOG>; とかやっちゃまずいのかなと。
それともどのみち全部配列に入れるなら同じなのかなと。
0952nobodyさん
02/10/14 00:19ID:???1000行あるログファイルの100行目から199行目を処理する時、
@log = <LOG>;
@log = @log[99..198];
なら1000行分 + 100行分のメモリを必要とする。
while (<LOG>) {
push @log, $_ if $. == $start .. $end == $.;
}
なら1行分 + 100行分のメモリを必要とする。
…と理解してたんだが、もしかして違いますか?
0955953
02/10/14 00:29ID:???だったら、最終的にどっちも100行分で同じだけど、
@log = <LOG>; をやったほうは、全行分一気にメモリ食うからやばいかも
0956944
02/10/14 00:58ID:???検索下手なもんでみつけられじ
0957nobodyさん
02/10/14 01:40ID:???0958nobodyさん
02/10/14 03:17ID:1xBJawHO0959nobodyさん
02/10/14 03:17ID:???0960nobodyさん
02/10/14 07:45ID:???この際コテハンでスレ立てるのを伝統としてしまいますか
トリップは#コテハンで
0961nobodyさん
02/10/14 10:04ID:???今はいちいちこんな風に書いています・・・
C:>perl c:\tools\perl\scripts\aaa.pl
よろしくおねがいします。
0962nobodyさん
02/10/14 10:22ID:???write_arrays.plという
サンプルですが、
my $worksheet1 = $workbook->addworksheet('Example 1');
my $worksheet2 = $workbook->addworksheet('Example 2');
my $worksheet3 = $workbook->addworksheet('Example 3');
my $worksheet4 = $workbook->addworksheet('Example 4');
my $worksheet5 = $workbook->addworksheet('Example 5');
my $worksheet6 = $workbook->addworksheet('Example 6');
my $worksheet7 = $workbook->addworksheet('Example 7');
my $worksheet8 = $workbook->addworksheet('Example 8');
なんてコードがあった。
もっと綺麗に書けませんか?
0963962
02/10/14 10:31ID:???for my $idx (@sh_nums ){
my $worksheet${idx} = $workbook->addworksheet("Example $idx");
}
みたく書けませんか
0964nobodyさん
02/10/14 10:40ID:???my $wordsheet[$_]= $workbook->addworksheet("Example $_");
}
0965nobodyさん
02/10/14 10:40ID:OizI25TP変数に格納した文字列の長さを得るにはどうしたらよかとですか?
0966nobodyさん
02/10/14 10:40ID:???0968nobodyさん
02/10/14 10:49ID:???と入力してカレントディレクトリを変更する。
c:\tools\perl\scripts>
となるので、
perl aaa.pl
で実行できる。
0969961
02/10/14 11:25ID:???すいませんが、それでは aaa.pl が引数としてパスを求めるばあいに
perl aaa.pl g:\msc\include\aaa\bbb\ccc\
こんな風になってしまいます・・・
0970nobodyさん
02/10/14 11:29ID:???0971961
02/10/14 11:30ID:???perl には JGAWK の AWKPATH みたいなものは無いのでしょうか?
0972961
02/10/14 11:33ID:mVfsm4sPなんでさっきできなかったんだろ?
ありがとうございました。
0973nobodyさん
02/10/14 11:43ID:???http://www.perlpress.com/perl/gres
例の通りに実行しても全然動かないのですけど、どうやれば動くのでしょうか?
実はかれこれ1時間くらい苦闘しています・・・
0975973
02/10/14 12:57ID:mVfsm4sP比較文字列に正規表現が使えます。
perl gres.pl -e 's!and!or!' *.htm
これでカレントにある htm ファイルの 'and' が 'or' に変わるはずだと
思うのですが、動きません。
欲しい・・・
0976973
02/10/14 12:59ID:mVfsm4sP動きませんけど
0978973
02/10/14 14:16ID:???0981973
02/10/14 15:35ID:mVfsm4sPできれば試してみていただきたいのですが
以下は何もおきずに終わります。
perl gres.pl -e 's!and!or!g' *.txt
以下は"Processed 0 files." と表示されて終わります。
perl gres.pl -v -e 's!and!or!g' *.txt
ファイルを見つけられないのかとファイル名を直接指定すると、
perl gres.pl -e 's!and!or!g' readme.txt
BLOB(XXXX) ←こんなのが画面いっぱいに表示されて、readme.txt は 0 バイトになってしまいます。
もうわけがわかりません
0982nobodyさん
02/10/14 16:11ID:???foreach (@HOGE) {
ここで$_を使って;
}
foreach (@HOGE2) {
ここでも$_を使ったら;
}
何か問題ありますか?
0983nobodyさん
02/10/14 16:12ID:???0985962
02/10/14 16:16ID:???どうしても理解できません。
何故、973のように配列に格納することが出来ないのでしょうか?
0988982
02/10/14 16:25ID:???0990nobodyさん
02/10/14 16:52ID:???0991nobodyさん
02/10/14 16:53ID:???print "Content-type: text/plain\r\n\r\n";
print "Hello world!!\n";
これで俺もプログラマーだ!
ところで次スレは?
0992nobodyさん
02/10/14 16:59ID:???$aaaだけでいいなら
$line=s/\$aaa/$aaa/g;
何でも対応なら
$line=~s/$([A-Za-z_]\w*)/${$1}/g;
0993992
02/10/14 17:00ID:???0994990
02/10/14 17:10ID:???「何でも対応」の方を
$line=~s/\$([A-Za-z_]\w*)/${$1}/g;(「\」を追加)
としたら動きました。ありがとうございました。
0995992
02/10/14 17:11ID:???/ `ヽ、
/ \
/ \
/ \
/ ,r-ト-、
,' f /⌒ヽ!
,' i L、-、ヽ\
! ` `ー、 ) } \
! `ゝf j \
.| ' ノ \
! ,,、ノ∠, ヽ、`ー'
ヽ ,,;彡'' / / ヾ、ヽ
i 、 /シイノ ,'´ '; i
{ ヽ `ー,イ`二 ̄-'' i!|
\_,r-rフヽ‐'´ '´ 、_ i! | i / ̄ ̄ ̄ ̄ ̄ ̄
| `‐' ノ`' '⌒ヽ-、,_ ヽ、 ノ | ,' < 1000は渡さん!
!  ̄ 〉 ,r-ノ  ̄``ヽ、 ヽ /{ | / / \______
\ ( / ,,、ミ-‐''⌒! ヽ i / | | / / /
\ `ー‐‐'´,,、、ミッ‐',∠ノ ̄`! ! | / | / / /
\ 〈 r!=‐'´_,_// /、 ! | レ' / /
`ヾ、ヾ \ ̄|~´ / ノ } | //
`ヾ、 ヽ└---'´`` ノ ! /! // ,、-‐
/ `ヾ、ヽ、_ , ''´ j / // /
/ \丶ー‐'´ '´ / ノ´ /
/ \` / /
0997nobodyさん
02/10/14 17:16ID:???http://pc.2ch.net/test/read.cgi/php/1034583844/
#コテハン で立てますた
0999nobodyさん
02/10/14 17:52ID:g9J1cXOv10001000
02/10/14 17:52ID:g9J1cXOv10011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。