【Perl】初心者コーナー Part19

このエントリーをはてなブックマークに追加
978本7 ◆JMmE5ppk7Y
掲示板の名前表示にトリップ機能を追加しようとおもいます。
トリップ変換のアルゴリズムはその辺のトリップチェッカーを拾ったんで途中に割り込ませようとおもいます。
で、すでにできあがってる2chスクリプトなのですこし強引ですが名前をdatファイルに保存する際に

投稿の際に名前入力してそれをdatファイルに保存してるのがread.cgiだと決めつけて考えてます。
空の変数$karinameを用意してそこに正規の名前変数$nameを代入して料理しよかと思いました。

まず最初に良く分らないのが文字列変数$nameに"#"が入ってる時だけ"#"以降の文字列抜き出しをするに
はどいう形の分がいいんでしょうか?

さらに抜き出せたとしてそれを変換ルーチンで料理。もう一つ用意した$ryouriに代入

$name=$ryouri で元にかえしてやってその後は通常の流れに続くという方法でよいでしょうか?

雑な質問のしかたで申し訳ないです。よろしくお願いします


979nobodyさん:03/02/08 04:03 ID:???
>>977
こんなデータを作ってみました。
33<>c<>169<>120
22<>b<>169<>68
1<>a<>169<>68
正しくはa,b,cさんの順ですよね?

>>978
正規表現でマッチング。
980 :03/02/08 04:12 ID:???
>>978
こんな感じ?

$name =~ s/?#(.+)/&trip($1)/eg;
sub trip {
my ($conv) = @_;
my $conv = substr(crypt($conv, $salt), -8);
($conv);
}
981同一人物?:03/02/08 04:22 ID:???
264 :本7 ◆HON7/awDa. [sage]:03/02/07 20:34
この早さでは言いにくいが













旧2ch式BBS立てたけど誰も来ない
982nobodyさん:03/02/08 08:23 ID:???
>>977
> open(FILE);
本当に問題ないの?

--- test.dat ---
ABC-001<>foo<>165<>65
ABC-002<>bar<>170<>70
ABC-003<>baz<>170<>65
ABC-004<>boo<>170<>65
---

my $file = './test.dat';
open FILE, '<' . $file or die;
my(@item, @person) = qw(i n h w);
chomp, @{$person[$. - 1]}{@item} = split /<>/ while <FILE>;
close FILE;

print map "@{$_}{@item}<BR>\n",
sort {
$b->{'h'} <=> $a->{'h'} ||
$a->{'w'} <=> $b->{'w'} ||
$a->{'i'} cmp $b->{'i'}
} @person;

参考。
http://www.google.co.jp/search?q=Schwartzian+Transform&hl=ja&lr=lang_ja
983nobodyさん :03/02/08 14:06 ID:???
>>982
どうだ、凄いだろ、俺のチンチン!っていう回答
熟女は喜ぶが処女は痛がる
984nobodyさん:03/02/08 16:30 ID:???
>>982
Perlらしいコードですな。
985本7 ◆HON7/awDa. :03/02/08 19:05 ID:???
>>980
アドバイスありがとうございます
抜き取った文字列はどこに代入されるのでしょうか?
どしろうとで申し訳ないです
986nobodyさん:03/02/08 23:03 ID:???
>>985
勝手に置換されるように書いてあるぞう。わからなくてもとりあえず読んでみよう。
987 :03/02/08 23:04 ID:???
backslashが文字化けた。
$name =~ s/¥#(.+)/&trip($1)/eg;
#の後の(.+)がトリップ用数字に相当。
(.+)が$1に入って、
これにsub tripで処理したものを、
元のやつと置換する。
$name = "私の名前 #123456";

$name = "私の名前 aKsdjA4w";
みたくなる。
988nobodyさん:03/02/08 23:15 ID:r91Y0UUN
open F,"+<$file";
while(<F>){print;}
seek F,0,0;
print F $temp;
close F;

としたとき、$tempのサイズが元のファイルサイズより小さいと、
$fileの元のデータが後半残ったまま上書きされてしまいました。
これはやはり上書きモードで開き直さなければ駄目でしょうか。
989nobodyさん:03/02/08 23:23 ID:???
>>988
わかんないけど、seek後truncateしてみたら?
990nobodyさん:03/02/08 23:28 ID:???
>>989
うお、できました!サンクスです。
991本7 ◆HON7/awDa. :03/02/08 23:30 ID:???
>>986
なれこれいじいったらトリップ入ってないときはそのままで出力できるようになりました。
あとは◆を名前欄に入れたら◇になるよう改造してみます
992nobodyさん:03/02/08 23:43 ID:???
例えば、
http://www.yahoo.co.jp/
のソースを $st バイトから $to バイトまでのみ
ネットワーク通信によって取得するにはどうすればいいですか?

LWPとかSocketとか頑張って調べましたがわかりません
よろしくお願いします。
993nobodyさん:03/02/08 23:45 ID:???
>>992
もうちょっとSocketとHTTPの勉強すればいいよ。
994nobodyさん:03/02/08 23:54 ID:???
perlのmyって変数を続けて書くと最初のやつ以外はmy変数じゃなくなってしまうんですか?

例:
my  $i;    # ←はmy変数
my  $i,$j,$k; # ←は$iだけがmy変数(残りはglobal?)
my  ($i,$j,$k);# ←は全てmy変数

↑このような認識でいいのですか?
995nobodyさん:03/02/08 23:58 ID:???
myは関数じゃないからそうなるんだよーん。
996nobodyさん:03/02/09 00:00 ID:???
>>995
997nobodyさん:03/02/09 00:10 ID:???
>>995
myは関数です。
ついでにいえばreturnも関数です。
998nobodyさん:03/02/09 00:15 ID:???
このスレは終わらんのか?
999nobodyさん:03/02/09 00:17 ID:zusUFu+4
次スレあるの?
1000nobodyさん:03/02/09 00:17 ID:zusUFu+4
ついでに1000

あ、誰も>>>999に答えられなくなっちゃうや。
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。