【Perl】初心者コーナー Part18
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
02/11/20 22:04ID:???1:自分はこう言う事がしたい。
2:それでこんな風にやってみたが・・・
3:それだとこんなエラーが出て上手く行かなかった。
1と3が無いと誰も答えられないよ。
良い回答は良い質問から。一緒に勉強しましょう。
CGIだけど、なんか質問ある? Part 8
http://pc.2ch.net/test/read.cgi/php/1032704121/
参考書籍の話題は【Perl,CGI】参考書籍 第三版
http://pc.2ch.net/test/read.cgi/php/1030209573/
その他の雑多な話題は、【CGIに依存しないPerlの話題一般/Part2】
http://pc.2ch.net/test/read.cgi/php/1030548610/
スクリプトの改造依頼は 【 スクリプト改造工房 PART 5 】
http://pc.2ch.net/test/read.cgi/php/1028193595/
過去ログ、その他の役立ち情報は>>2-10あたりを見よう。
0410nobodyさん
02/12/12 21:26ID:???そうかなあ。ちゃんとしたPerl使いならもちろん
使っているだろうけど、CGIだけのためにPerlやってる
人ってなんかそういうのあんまり意識してないような。。。
0411nobodyさん
02/12/12 21:33ID:???$a =~ s/\.00$//;
>>410
巷で配布してるCGIはピンからキリまであるからなあ。
あと配布用にPerl4でも動くようにしてるところもあるでしょうし。
0413ななし
02/12/12 22:17ID:???なんとか方法は分かったんですが、ブラウザにドラッグするののやり方が
わかりません。おしえてください。おねがいします。
0414nobodyさん
02/12/12 22:20ID:???0415nobodyさん
02/12/12 22:21ID:LUwqAPKoありがとうございます。
そういう方法しかないんですかね。結局。
あるサイトに
$a = int($a * 100)/100;
ってあったんですけど、これだと無駄が多そうですよね。
$a =~ s/\.00$//;
$a =~ s/\.0$//;
の方が早そうですね。
0417nobodyさん
02/12/12 22:50ID:rgoFlUwc★http://yahooo.s2.x-beat.com/linkvp/linkvp.html★
0418n
02/12/12 22:51ID:rgoFlUwc★http://yahooo.s2.x-beat.com/linkvp/linkvp.html★
0420nobodyさん
02/12/12 23:16ID:???>407を読み直した方がいいかも。
0421nobodyさん
02/12/12 23:19ID:i62/L17Z0423422
02/12/13 00:04ID:???$b+=0;
の間違い。
0424nobodyさん
02/12/13 00:12ID:???ベタだけど、
%hash1=%hash2=();
for (@data) {
my @array = split/,/;
$hash1{$array[0]} += $array[1];
$hash2{$array[0]}++;
}
$hash1{$_} /= $hash2{$_} for keys %hash1;
でどうかな。(結果は%hash2)
0425398
02/12/13 00:53ID:???0427424
02/12/13 08:15ID:???0428nobodyさん
02/12/13 11:37ID:???検索すれば理由は簡単に判りそうな気がするけど・・・
ttp://www.ryu.dyn.to/cgi-bin/tree.cgi?action=clip&no=771
※※※これは「Return-Path」のみの検索キーで見付けた※※※
注)自力で調べる努力を怠ってる人はまともに相手をして貰えません
0430nobodyさん
02/12/13 15:58ID:???の者ですが。色んな方法がありますね。
sprintf($a=~s/\.0+//?"%4f":"%4.2f",$a)
と
$b=sprintf('%4.2f', $a); $b+=0;
が一番シンプルそうです。
>>419
int $a ではいけないですよね?
0431nobodyさん
02/12/13 17:39ID:iG+3sspLCSVで貯めるのですが、その際、CSVデータが誕生日$yyyy,$mm,$ddで
ソートしたいのですがいつソートするんでしょう?
1回そのまま書き込んで、もう一回呼んで、ソートしかないですか?
書き込む前にソートできますか?
0433nobodyさん
02/12/13 18:16ID:???好きなように決めてくれ。
書き込みが追加書き込みなら、読んでからソートのほうが改造が楽。
基本的には頻度が少ないほうでソートするべきだろう。
0434nobodyさん
02/12/13 19:29ID:4EJmzvt/@MIX??・・・は、ないです。
$MIXではなく@MIXにしないといけないのでしょうか。
あ、あと%の件ありがとうございました(^^;
で、書き直しましたが、これでもできてないです。
文法エラーとかInternalエラーとかは一切出ず、フォームに
言葉を入れてボタンを押すとリロードされます(これはちゃんとした処理)
動いているように見えるんですけど、PDへの書き込みが出来てません。
どこで引っかかっているのかな・・・。
cryptが動いていないのか、ファイル書き込みが動いていないのか。。。
0436nobodyさん
02/12/13 20:12ID:???そもそも、
$kw = $MIX[int(rand(@pwd))] . $MIX[int(rand(@pwd))];
は、
$kw = $pwd[int(rand(64))] . $pwd[int(rand(64))];
であるべきでは?
あと、
print PD "$words";
は、何かセパレータを入れておくべきかも?
例:
print PD "$words\n";
13文字ずつで切り出せばよいけれども。
0437nobodyさん
02/12/13 20:13ID:???これはちょうど表示部分のところです。
#このスクリプトの名前,"bbs.cgi"
$pagemax = "1ページの表示数";
$file = "データファイル";
open(OUT, "<$file");
flock(OUT,2);
@view = <OUT>;
$log = @view;
if($ARGV[0] =~ /\d{1,3}/){
print @view[$ARGV[0]..$ARGV[0]+$pagemax];
$ARGV[0] += ++$pagemax;
if($ARGV[0] < $log){
print "<a href=\"bbs.cgi?$ARGV[0]\">NEXT</a>";
}
}else{
print @view[0..$pagemax];
if($log > $pagemax+1){
$pagemax++;
print "<a href=\"file.cgi?$pagemax\">NEXT</a>";
}
}
close(OUT);
とりあえずこれで動作はしたんですが、もっとスマートな方法はないですかね?何かすごく効率が悪そうなんで。
0438nobodyさん
02/12/14 01:20ID:???去年まで金無し君だったけど、オンラインカジノとパチンコで
二年で350万貯めた。一度やってみなよ。
初回のみだけど、1ドル以上のチップを買えば30ドル(4000円くらい)貰える。
もらうだけもらってプレイせずに換金することもできるし、ルーレットで赤か黒に
思い切って賭けてしまえば50パーセントで二倍になる。
金なきゃオフラインでゲームすればいいだけ。暇つぶしになる。
ビデオポーカーとかスロとか色々あるのでマジでお勧め。
http://www.imperialcasino.com/~1kl5/japanese/
0439nobodyさん
02/12/14 11:40ID:???無駄なところは読み込みたくないので
何行目〜何行目 を ハンドルに放り込む方法はないのでしょうか?
0440439
02/12/14 11:57ID:???ちょっとログがMB級あるんで
必要なところだけ読み込めたら楽なんだけど
0441nobodyさん
02/12/14 12:20ID:???原始的な方法でいいなら、100〜200行の場合。
$from = 100;
$to = 200;
open(IN,$file);
foreach $l(1 .. $from-1){<IN>;}
foreach $l($from .. $to){push(@data,<IN>);}
close(IN);
とか。
過去スレで出た方法だと、行の始まりのインデックスを別ファイルに保存して
readで呼び出すとかあったかな?
0442nobodyさん
02/12/14 12:59ID:???データを展開しないで指定行に飛ぶのは無理っぽい。
0443439
02/12/14 13:08ID:2kNAmjtjログファイルの記録方法を考え直して見ます
0444nobodyさん
02/12/14 13:12ID:???0445nobodyさん
02/12/14 15:48ID:???$from = 100;
$to = 200;
$lines = $to - $from + 1;
open IN, "head -$to | tail -$lines |";
0447439
02/12/14 17:45ID:???open IN, "head -$to $filename | tail -$lines |";
で逝けそうですね ありがとうございます。
0448nobodyさん
02/12/14 19:22ID:???while (<IN>) {
next if ++$count < $from;
last if $count > $to;
...
}
ファイルの大きさと、指定範囲によるけど、
数千行ぐらいなら十分かなぁと。
パイプは起動コスト高いから、ベンチとって見るのがいいと思う。
perlメモにperlでtailするサンプルあったけど、正直大して早くなかった。
でもお勧めは、バークレイDBかな。。身も蓋も無いけど。
0449nobodyさん
02/12/14 21:36ID:???自動で、別窓で一覧にして永久的に表示するというのをやりたいのですが
どうしたらいいでしょう
0451nobodyさん
02/12/14 21:49ID:???0453nobodyさん
02/12/14 23:14ID:TSZsnHUGAn electric wave boy is the reason which carried out the way which finishes being incomprehensible...
電波少年は不可解な方法を実行した理由です...
微妙ですが
0454nobodyさん
02/12/15 00:32ID:???0456nobodyさん
02/12/15 02:18ID:???0457nobodyさん
02/12/15 02:56ID:N8e98l/q$value{key}
この二つではどちらが書き方として正しいのでしょうか?
0458nobodyさん
02/12/15 03:13ID:brjLalCm↑ここはどうですか?
0460nobodyさん
02/12/15 04:02ID:N8e98l/qいちおうどちらの形にしても、同じ値が見れるので
どっちでもいいのかなと思ったのですが。。。
0461nobodyさん
02/12/15 11:28ID:???perl5以降なら$value{key}
0463nobodyさん
02/12/15 21:08ID:5VtRENUn参考になるサイト、書籍等ありますでしょうか?
0464nobodyさん
02/12/15 22:17ID:V1pBf1mlどなたか教えてください。
use strict;
print ${&return_html};
sub return_html {
return \"<p>てすと</p>";
}
これを実行すると当然のごとく<p>てすと</p>が出力されますが、
1.この”<p>てすと</p>”が記憶される領域は変数を宣言して確保するのとどう違うのでしょうか。
2.これが記憶されている領域はいつまで読めることが保証されているのですか?
(読まれる可能性があるときまで保持して置くように勝手にコンパイルされるのですか?)
3.このように値の参照を返す方法は返す内容が膨大になった時に、
値そのものを返すよりパフォーマンスの点で期待できますか?
いまいち上手く説明できないので質問の意図がわからないかもしれませんがよろしくお願いします。
0465nobodyさん
02/12/15 23:20ID:1E3ue/P5よくわからんけど・・
1. 無名のスカラーのリファレンスだという所。
2. 参照されている間、だから、printの次の行では、もう消滅している(読む手段がなくなるから)、かな??
3. 期待できる
0466464
02/12/16 03:56ID:???それで納得いきました。
0467nobodyさん
02/12/16 14:33ID:P42iaa2L上手く <p>文章</p> としてやりたいのですが、上手くいきません。
改行コードを </p><p> に置換しても、最初の部分で </p> が余ってしまうし。
どうにか上手く囲えないですかね?
0468nobodyさん
02/12/16 14:51ID:3MTAHZ/Xデータを$detaに入れるとして
$deta = "<p>$deta</p>";
$deta =~ s/[\r\n]/<\/p>\n<p>/g;
これでダメ?
0469nobodyさん
02/12/16 18:06ID:y6GM3n5O#改行コードを統一
$str =~ s/\x0D\x0A/\n/g;
$str =~ s/\x0D/\n/g;
$str =~ s/\x0A/\n/g;
#行末の改行を削除
$str =~ s/\n+$//;
#空行があれば段落とみなす
$str =~ s/(.+?)(\n{2,}|$)/($_ = $1) =~ s!\n!<br \/>!gs; "<p>$_<\/p>\n";/gse;
これじゃダメかな。
0470nobodyさん
02/12/16 20:20ID:???467じゃないけど、
いま改造してるヤツでありがたく使わせてもらいます。
うまくできました。
でもなんでそれでできるのか解らない漏れ・・・
0471nobodyさん
02/12/16 23:10ID:???俺だけ?
CGI.pm使ったら、すっきりするような。
0472nobodyさん
02/12/17 00:06ID:x9yr2U770473471
02/12/17 00:56ID:???改行をそのまま<p></p>にするのか、それとも<br/>にするのか、
それとも二行以上あいているのを<p></p>にするのかとかさ。
その辺の処理をきちんとしないときちんとしたものはできないと思う。
0475469
02/12/17 02:04ID:???こういう所にレスをつけるときは、答えを書くというより参考になればなと思って書いています。
今回の例だと少し正規表現いじれば、471さんの言うようなケースには合わせられるわけですし・・・
0476nobodyさん
02/12/17 15:15ID:/cJ6LV5I0478nobodyさん
02/12/17 15:37ID:???○use Socket;
0479434
02/12/17 16:27ID:dfOkftcJう〜ん、パスワードを別ファイルに保存するのは無理なのかな・・・。
0480nobodyさん
02/12/17 16:59ID:dfOkftcJする、っていうのをつけようとしています。
が、500エラーになってしまいました。こういうふうに書いたのですが、何が
間違っているでしょうか。
#設定部
#メール通知機能
#0:使用しない
#1:管理人の投稿も通知する
#2:管理人の投稿は通知しない
$mailing = 2;
#管理人の名前(メール通知2の時設定)
$adname = "管理人";
#sendmailのパス
$sendmail = '*****';
# 通知先
$mailto = '****@*****';
#ここまで。
#以下を「書きこみ処理」サブルーチンの一番最後に追加。
if ($mailing == 1) { &mail_to; }
elsif ($mailing == 2 && Form{'name'} ne "$adname") { &mail_to; }
}
↑サブルーチンの締めかっこ。
元になってる掲示板はLiteboard。
0481nobodyさん
02/12/17 17:00ID:???0482nobodyさん
02/12/17 17:31ID:???>>401の $MIX[] を $pwd に変えて
sub words { ... };
&words;
でやったらちゃんとできた。
&wordsはちゃんと呼び出されてる?
もしかしたら crypt() がMD5専用かもしれないので(BSD系の場合?)、
$words = crypt($in{'word'}, '$1$' . $kw);
でやってみたら。
0483nobodyさん
02/12/17 17:31ID:???ttp://pc.2ch.net/test/read.cgi/php/1028193595/
【 スクリプト改造工房 PART 5 】
0484nobodyさん
02/12/17 18:21ID:???> Form{'name'}
$Form{'name'}じゃないのか?
それと、なぜ$adnameを引用符でかこんでいるのかわからん。
0485nobodyさん
02/12/17 18:44ID:c+lM3tmR---●●●変態痴女を紹介致します。●●●---
例えば>欲求不満オマ●コヌレヌレ女・露出オナニー痴女・
フェラチオおしゃぶり女・ミニスカ・ノーパン娘・巨乳パイズリ娘・
アナルSEXおねだり娘・オマ〇コ弄られマン汁グチョグチョ女・
SM牝豚・緊縛・浣腸・スカトロ・等・・・刺激を求めています。
●●●学生・OL・主婦・モデル・牝豚・女王様・オカマ等・多数!●●●
090-8002-8356番
下のカタカナを小文字に変換してください。
http://www.エムティーティー.jp/i
0486Omoti@2ちゃんねるアナリスト ◆hFOmotia5o
02/12/17 19:17ID:???既婚女性板
● ちょっと奥様今年のご主人のボーナスおいくら?
http://human.2ch.net/test/read.cgi/ms/1039952630/
のスレの書き込みのボーナスの金額をスマートに抜き出して
統計処理したいのです。どうすればいいでしょうか。
0488Omoti@2ちゃんねるアナリスト ◆hFOmotia5o
02/12/17 19:43ID:???アドバイスありがとうございます。
できれば、人間の手でやるのではなくて、
もっとスマートにできないものでしょうか?
0489nobodyさん
02/12/17 20:02ID:???0490Omoti@2ちゃんねるアナリスト ◆hFOmotia5o
02/12/17 20:07ID:???2ちゃんねらーにしては、あきらめが速いですね?
不可能を可能にするのがプログラマーでは?
ま、私自身もうまい方法が思いつかないので
ここで相談してるわけですが(@w餅
0491nobodyさん
02/12/17 23:25ID:???こういうのはゴリゴリソースを書いていくしかないね。
.datを取得して、行に分解する。
その一行一行に対して以下の処理を行う。
・書き込みのみを抜き出し、
・全角数字を半角に変え(正規表現にひっかかるように)、
・半角カタカナを全角に変え(ひっかかりやすくするように)、
・数字の連続+「マン/マソ/万」をボーナス額と考えて正規表現で取得する。
・例外として「ゼロ」は0として扱う。
・以上の条件にあてはまらない時は、その行には金額が書き込まれていないと判断する。
こうして得られたデータを表示するなり別ファイルに書き出したりして保存する。
こういう流れだろうな。
後は実際にスクリプトを起こすだけだが、
それぐらいなら初心者と言ってもできるだろう?
んで、実行してみてうまく抜き出せない場合は、条件を見直す訳だ。箇条書きの部分な。
そんじゃ健闘を祈る。
0492Omoti@2ちゃんねるアナリスト ◆hFOmotia5o
02/12/17 23:33ID:???おお。詳しい説明ありがとうございます。
やってみます。今後ともよろしくお願いします。
0493木田
02/12/18 00:04ID:???http://www.diohosting.com/jp
0494nobodyさん
02/12/18 00:23ID:???0496
02/12/18 01:27ID:uR+QrFPjエラーがでてしまいます。検索してもおかしくなさそうに見えるのですが…
perl -e"s/aaaa/bbb/g;" *.txt
<エラーメッセージ>
Unquoted string "perl" may clash with future reserved word at
"C:\WINDOWS\デスクトップ\test.pl" line 1.
syntax error at "C:\WINDOWS\デスクトップ\test.pl" line 1, near "perl -e"
Unquoted string "txt" may clash with future reserved word at
"C:\WINDOWS\デスクトップ\test.pl" line 1.
"C:\WINDOWS\デスクトップ\test.pl" had compilation errors.
以上、よろしくお願いします。
0497nobodyさん
02/12/18 01:31ID:1Ah7QOiOHOGE
までの中で計算する方法ってなにか無いのでしょうか?
0498nobodyさん
02/12/18 01:49ID:cSfhj2ax夜も更けて参りましたので今宵はお休み下さい。
0499496
02/12/18 02:01ID:???そうですか、ではまた明日伺います。お休みなさい。
0500nobodyさん
02/12/18 03:35ID:???【Perl 】初心者コーナーPart5
http://corn.2ch.net/php/kako/988/988728069.html
ここの256あたりからやり方が書いてあるよ。
0501nobodyさん
02/12/18 04:29ID:???それはスクリプトの中に書くものではなく、コマンドラインから実行するもの。
スタート>プログラム>MS-DOS プロンプト(またはコマンドプロンプト)
C:\WINDOWS>cd デスクトップ
C:\WINDOWS\デスクトップ>perl -e "s/aaaa/bbbb/g;" *.txt
0502nobodyさん
02/12/18 06:19ID:+CI84VDc@a = sort {$a cmp $b} @a;
print @a;
実行すると、一三四二 となります。
漢字の数字って、どうやって並べるの?
できればこれを 一二三四 にしたいんだけど、
どうすればいい?
0503nobodyさん
02/12/18 08:24ID:???漢数字は、漢字コード上では順番に並んでないから、ソートできないよ。
通常は普通の数字で処理して、表示するときに漢数字に変換するといい。
0504nobodyさん
02/12/18 11:45ID:8xOlQixN処理にいささか困ってます。送信フォームから来る情報は
検索文字 and検索(ラジオボタン)にするか 検索ファイル(チェックボックス) です。
and検索にするかと検索ファイルは情報が可変長なので困っています。
このような場合は受け取った情報を一つずつ解析していくのがベストなのでしょうか?
検索という性質上、0.1秒でも処理を早くしたいのでベストな手順を
教えていただけないでしょうか。お願いします。
0505nobodyさん
02/12/18 11:48ID:???0506nobodyさん
02/12/18 12:27ID:???0507nobodyさん
02/12/18 13:44ID:dss5kZ4mとやっても全角スペースが消せません。sjis
簡単な正規表現か何か希望。
\Q\Eつけても、一時的にEUCにしてもだめでした。
いい正規表現かなにかないですか?
■ このスレッドは過去ログ倉庫に格納されています