1 名前:(・∀・)チンポー!! mailto:(・∀・)チンポー!! [04/06/02 11:39] perl書きなんだがさ、こうリクに答えてなんか作りたいんだ。 だからリクエストをくれ。
528 名前:525 mailto:sage [2006/03/17(金) 23:51:02 ] >>526 >>527 こんな感じで書いてみました。 while(<>) { tr/[0-9]/[0-9]/; s/(¥D)1(¥D)/$11$2/g; (中略) s/(\D)9(\D)/$19$2/g; print; } ただ、これだと2回同じ処理をしないといけないですよね。 最初の処理でtr行、次の処理でs行になるんでしょうか。 これを効率よく1回の処理ですませたいのですが、いいやり方をご存知ないですか?
529 名前:ヽ(´ー`)ノ ◆.ogCuANUcE mailto:sage [2006/03/18(土) 00:13:06 ] use utf8; use Unicode::Normalize; $str = NFKC($str); $str =~ s/(?<!\d)(\d)(?!\d)/(my $ret = $1) =~ tr[0-9][0-9]; $ret/ge; これでどうだろう。
530 名前:デフォルトの名無しさん mailto:sage [2006/03/18(土) 17:46:30 ] >>528 逆。数字をまず全部全角にして、 その後2文字以上連続する全角数字を半角にする。
531 名前:http://www.vector.co.jp/soft/win95/util/se072729.html mailto:http://msdn2.microsoft.com/ja-jp/library/h2k70f3s.aspx [2006/03/18(土) 21:12:31 ] TextSS のWindowsXP(Professional)64bit化おながいします もしくは64bitにネイティブ対応したテキスト置換ソフトありますか? そういや64bitにネイティブ対応している2chブラウザてありましたっけ?
532 名前:デフォルトの名無しさん mailto:sage [2006/03/18(土) 21:35:05 ] テキスト置換で64bitに対応してると なんかいいことあんの?
533 名前:デフォルトの名無しさん mailto:sage [2006/03/18(土) 22:40:20 ] >>531 マルチ + スレ違い乙
534 名前:525 mailto:sage [2006/03/18(土) 23:37:27 ] >530 ご指摘どうもありがとうございます。 他にも処理が山ほどあり、あまり時間がなくてテンパってました。 >529 うまくいきました。どうもありがとうございました。 こういうときに先読み・後読みを使うんですね。 教えていただいたものを流用して、 2桁のみ半角にすることもできました。
535 名前:ヽ(´ー`)ノ ◆.ogCuANUcE mailto:sage [2006/03/19(日) 00:33:20 ] >>529 を書いて気が付いたんだが、Encode::JP::H2Z が変換できるのは カタカナだけなんだな。 日本語処理で凝ったことしようと思ったら、Jcode なんかねぇ…。
536 名前:デフォルトの名無しさん [2006/03/19(日) 03:25:47 ] >>532 読み込みの段階で64ビットは有利
537 名前:デフォルトの名無しさん mailto:sage [2006/03/19(日) 09:25:18 ] うそつけ
538 名前:デフォルトの名無しさん mailto:sage [2006/03/22(水) 21:16:20 ] >>528 「¥」と来たか。「\」ではないと。
539 名前:デフォルトの名無しさん mailto:sage [2006/03/29(水) 06:15:44 ] すいません、リクです。 数字を有効数字の桁数で丸めるスクリプトを探しています。 例えば、round(数字, 桁数)の形で使うとすると、 round(-12345.067, 4) round(-12345.067, 7) round(0.0567, 1) round(1234567890123456, 4) は、それぞれ -12350 -12345.07 0.06 1.235e+015 を返す、というようなものなんですが、どなたかお願いできませんか
540 名前:デフォルトの名無しさん mailto:sage [2006/03/29(水) 12:19:00 ] 最後の1つはprintfの%.3eでいいだろうし、上3つはMath::SigFigsのFormatSigFigsが 使えると思うから、値の範囲かなんかで場合分けしてそれぞれ食わせればいいんで ないかな。
541 名前:539 mailto:sage [2006/03/29(水) 23:21:01 ] >>540 出来ました。どうもです。 あと、CPANを漁っていたらNumber::Formatに似たような機能をみつけたので、 これを改変してもうまくいきました。 sub round { my ($number, $digits) = @_; my $sign = $number <=> 0; my $result = abs($number); my $index; if($number =~ /(.*)e(.*)/) { $result = $1; $index = $2; } my $precision = $digits - length(int($result)); if($result =~ /^0(\.0*)/) { $precision += length($1); } my $multiplier = (10 ** $precision); $result = int($result * $multiplier + 0.5000001) / $multiplier; $result = -$result if $sign < 0; $result *= (10 ** $index) if $index; return $result; }
542 名前:デフォルトの名無しさん mailto:sage [2006/03/32(土) 03:59:17 ] $ip_sample = 222.4.xxx.xxx #フォームや環境変数から取得 $ip_data <<END_DATA; #外部ファイルから読み込んだデータ(実際は約2万4千行程度) 国名A-221.184.0.0-221.191.255.255 国名B-221.240.0.0-222.15.255.255 国名C-222.144.0.0-222.151.255.255 END_DATA foreach (@ip_data) { ($cctld,$ip_a,$ip_b) = split(/-/,$_); if ( 判定ルーチン ){$ans = $cctld last; } } print $ans;#この場合は"国名B"と表示したい $ip_dataを参照して$ip_sampleの値が$ip_dataのどの行に在るかの判定を行い $ansへ該当する$ip_deta行の$cctldを返すようにしたいのですが 判定方法でつまずいています。gethostxxx関数を使えという方向は無しにして 元の$ip_dataを増やさずに行える極力短い判定のルーチンを教示おねがいします このテの質問はwebプでやれと言われそうな気がするけど質問の内容が 板を選ぶ以前のレベルの自覚があるので敢えてこちらに投下しまふ。
543 名前:デフォルトの名無しさん mailto:sage [2006/03/32(土) 06:32:36 ] こういうパズル的なのはどこでも答えてもらえそう my $target = "222.4.0.0"; my @iptable = qw( 国名A-221.184.0.0-221.191.255.255 国名B-221.240.0.0-222.15.255.255 国名C-222.144.0.0-222.151.255.255 ); $target = pack("C"x4, split(/\./, $target)); for(@iptable){ my($country, $from, $to) = split /-/; $from = pack("C"x4, split(/\./, $from)); $to = pack("C"x4, split(/\./, $to)); if($from le $target && $target le $to){ print "$countryが範囲内でした\n" } }
544 名前:デフォルトの名無しさん mailto:sage [2006/03/32(土) 06:34:47 ] ありがとうございます 早速走らせて見ます 実は・・・・ - foreach (@ip_data) { + foreach ($ip_data) { ですた、阿呆ですんませんです・・・ orz
545 名前:デフォルトの名無しさん mailto:sage [2006/03/32(土) 07:51:49 ] その2万4千行のデータの状態によっては物凄く処理速度に差が出そうだ。 データを読みながら1回から2万4千回判定するのがいいか、 全部配列に読み込んでおよそ5回判定するのがいいか。
546 名前:デフォルトの名無しさん mailto:sage [2006/03/32(土) 07:54:50 ] 違った。14回?
547 名前:542 mailto:sage [2006/03/32(土) 14:00:16 ] >>543 web鯖にはまだ置いてませんが手元の環境では問題なく動きました。 答えを教えてもらうと、なるほどなぁと納得行くのですが その答えをせめて自分で作れるまでにはなりたいです。 ネットでも資料沢山あるけどラクダ本がほしくなったので 日曜日にでも街に探しにイッテキマス 目標は脱ド初心者w >>545 できれば色々なパターンをベンチ取って一番軽い処理を使いたいですw どうしても重かったらIP国別データを2〜3000行程度に分けて IPの最初の8ビットを参照して呼び分けてみようかなと思ってますが・・・
548 名前:デフォルトの名無しさん mailto:sage [2006/03/32(土) 20:14:29 ] >>547 アルゴリズムの勉強したほうがいいよ。 >>545-546 でバイナリサーチに気づかないのはかなり重症
549 名前:デフォルトの名無しさん mailto:sage [2006/04/02(日) 05:03:28 ] >>547
550 名前:デフォルトの名無しさん mailto:sage [2006/04/02(日) 05:08:26 ] スマソ。書き込む前に送信してもうた・・・ >>547 IPをキー、国名を値にもつハッシュを作り、データベースクラスにtieしてみては? 2万4千行をメモリに持つのはつらいと思う。
551 名前:550 mailto:sage [2006/04/02(日) 05:38:58 ] ちょっと練習で書いてみた。IPは悩んだ末、強引に10進数に変換した。 my $data = <<EOF; A-221.184.0.0-221.191.255.255 B-221.240.0.0-222.15.255.255 C-222.144.0.0-222.151.255.255 EOF unlink 'test.db'; use Fcntl; use DB_File; tie my %db, 'DB_File', 'test.db', O_RDWR|O_CREAT, 0644, $DB_BTREE or die; foreach(split/\n/, $data) { my ($country, $from, $to) = split /-/; for($from, $to) { s/(\d+)\.(\d+)\.(\d+)\.(\d+)/$1*256**3+$2*256*256+$3*256+$4/e; } $db{$from-1} = 'N/A'; $db{$to} = $country; } untie %db; sub find_country { my $query = shift; $query =~ s/(\d+)\.(\d+)\.(\d+)\.(\d)/$1*256**3+$2*256*256+$3*256+$4/e; my $x = tie my %db, 'DB_File', 'test.db', O_RDONLY, 0644, $DB_BTREE or die; my ($ip, $country) = ($query, 'N/A'); $x->seq($ip, $country, R_CURSOR); return $country; } print find_country('221.239.0.1');
552 名前:デフォルトの名無しさん mailto:sage [2006/04/02(日) 06:41:56 ] # IPアドレス→32bit整数 $ip = unpack('N', pack('CCCC', split(/\./, $ip))); これで2倍くらいの速度になった キャプチャが大きいんかなぁ 2個目のIPアドレス変換部分、最後が\d+じゃなくて\dになってたよ。 桁数が多いから計算ミスかと思ったけど、数字が文字列として尻についてただけなんだね。
553 名前:デフォルトの名無しさん mailto:sage [2006/04/04(火) 17:06:58 ] >>552 use Socket; して inet_aton() 使ったら?
554 名前:デフォルトの名無しさん mailto:sage [2006/04/05(水) 11:25:50 ] ベンチしたらinet_aton意外にとてつもなく遅いです。あとは ・「.」でばらすのはsplitより正規表現でキャプチャする方が速い ・4つの10進数から32bit整数にするのは、シフト>掛け算>pack-unpackの順で速い。 552の言うのとは逆の結果になったわけだがなんでかね? Benchmark: running inet_aton, multiple_re, shift_re, unpack_re, unpack_split for at least 3 CPU seconds... inet_aton: 5 wallclock secs ( 1.62 usr + 1.46 sys = 3.08 CPU) @ 425.97/s (n=1312) multiple_re: 7 wallclock secs ( 3.26 usr + 0.00 sys = 3.26 CPU) @ 229803.99/s (n=749161) shift_re: 3 wallclock secs ( 3.08 usr + 0.03 sys = 3.11 CPU) @ 274049.84/s (n=852295) unpack_re: 3 wallclock secs ( 3.10 usr + 0.00 sys = 3.10 CPU) @ 183073.87/s (n=567529) unpack_split: 4 wallclock secs ( 3.13 usr + 0.00 sys = 3.13 CPU) @ 119672.52/s (n=374575)
555 名前:デフォルトの名無しさん mailto:sage [2006/04/05(水) 11:26:39 ] use Benchmark; use Socket qw(inet_aton); my $ip_a = 100.100.100.100; timethese(undef, { unpack_split => sub { my $ip = unpack('N', pack('CCCC', split(/\./, $ip_a))); }, unpack_re => sub { $ip_a =~ /^(\d+)\.(\d+)\.(\d+)\.(\d+)$/; my $ip = unpack('N', pack('CCCC', $1, $2, $3, $4)); }, multiple_re => sub { $ip_a =~ /^(\d+)\.(\d+)\.(\d+)\.(\d+)$/; my $ip = $1*256*256*256 + $2*256*256 + $3*256 + $4; }, shift_re => sub { $ip_a =~ /^(\d+)\.(\d+)\.(\d+)\.(\d+)$/; my $ip = $1 << 24 + $2 << 16 + $3 << 8 + $4; }, inet_aton => sub { my $ip = inet_aton($ip_a); }, } );
556 名前:デフォルトの名無しさん mailto:sage [2006/04/05(水) 12:29:42 ] すまん、どうにも直観と反する結果なのでさらに調べていたらなんのことはない my $ip_a = 100.100.100.100; になっていたorz... もちろん正しくは my $ip_a = '100.100.100.100'; なのでベンチ取り直した。 Benchmark: running inet_aton, multiple_re, shift_re, unpack_re, unpack_split for at least 3 CPU seconds... inet_aton: 3 wallclock secs ( 3.16 usr + 0.00 sys = 3.16 CPU) @ 267949.37/s (n=846720) multiple_re: 3 wallclock secs ( 3.16 usr + 0.00 sys = 3.16 CPU) @ 69144.94/s (n=218498) shift_re: 4 wallclock secs ( 3.11 usr + 0.00 sys = 3.11 CPU) @ 74248.87/s (n=230914) unpack_re: 3 wallclock secs ( 3.21 usr + 0.00 sys = 3.21 CPU) @ 68071.03/s (n=218508) unpack_split: 2 wallclock secs ( 3.13 usr + 0.00 sys = 3.13 CPU) @ 95474.76/s (n=298836) まとめ: inet_atonはやっぱり速いので、自分で書くのはやめよう。
557 名前:デフォルトの名無しさん mailto:sage [2006/04/05(水) 13:42:14 ] v文字列以外では ・ inet_atonはpackしたIPアドレス("100.100.100.100"なら"dddd")を返すのに、他は整数(1684300900)を算出している。 ・ "+"演算子は"<<"演算子より優先度が高いため($1 << 24)とカッコで括らなければならない。 一応 sub getRandIPString { join '.', int rand 256, int rand 256, int rand 256, int rand 256; } といったものを用意して 全てバイナリ文字列を出力するコードにしてからベンチ取ったけど、inet_atonが常に1位だった。 今更だけど、後で直接比較可能にするための前処理として保存しとけば速度関係無かったね。
558 名前:デフォルトの名無しさん mailto:sage [2006/04/19(水) 06:59:49 ] Mac OS XでPerlを使っています。 Macで作成したテキストを処理したいのですが、改行コードがCRになるのでうまく処理できません。 LFでないため、全て1行として認識されてしまいます。 標準入力を常にLFとして読み込んだ後、それに対してマッチや置換を行いたいのです。 以下のように書いてみましたけどダメでした。 while (<>) { s/\x0D\x0A|\x0D|\x0A/\x0A/g; if (/aaa/) { print; } } 出力されたデータはLFになりましたが、マッチはうまくいきませんでした。 何かいいやり方はないものでしょうか。
559 名前:デフォルトの名無しさん mailto:sage [2006/04/19(水) 09:14:57 ] 求めてるのは<>使う前の $/ = "\x0D"; か /aaa/m あたりかも
560 名前:558 mailto:sage [2006/04/19(水) 19:51:43 ] >559さん 入力時の区切り文字をCRに決めてやればいいんですね。 解決しました。ありがとうございました。
561 名前:デフォルトの名無しさん mailto:sage [2006/04/19(水) 23:24:22 ] すいません。行のナンバリングをリクエストしてもよろしいでしょうか。 あいうえお(段落1) かきくけこ(段落2) さしすせそ(段落3) たちつてと(段落4) なにぬねの(段落5) はひふへほ(段落6) という文章があって、これを、 1:あいうえお(段落1) 2:かきくけこ(段落2) 3:さしすせそ(段落3) 1:たちつてと(段落4) 2:なにぬねの(段落5) 3:はひふへほ(段落6) のように空行をはさんで新たにナンバリングを開始したいのですが方法が思い浮かびません。
562 名前:デフォルトの名無しさん mailto:sage [2006/04/19(水) 23:59:01 ] 言いたいことが分からんが新たにナンバリングを開始したいところで ナンバリング用の変数を初期化して空行を出力するだけじゃないのか?
563 名前:デフォルトの名無しさん mailto:sage [2006/04/20(木) 02:27:54 ] >>561 は、単純にすべての行に通し番号でナンバリングするプログラムは作れるのか?
564 名前:561 mailto:sage [2006/04/20(木) 23:04:01 ] >563 あっ、はい。 my $i = 0; while (<STDIN>) { if (/^./) { print ++$i; print ": "; print; } } ちょっと冗長ですけど。
565 名前:デフォルトの名無しさん mailto:sage [2006/04/21(金) 00:11:57 ] うーん、、、自分で作りたい?それとも誰かにサクッと作って欲しい?
566 名前:デフォルトの名無しさん mailto:sage [2006/04/21(金) 10:46:46 ] >>564 そこまでかけるなら else で $i = 0; を書けないか?
567 名前:デフォルトの名無しさん mailto:sage [2006/04/21(金) 10:55:29 ] 空行が来たらカウントをリセットする、というと、こんな感じ? $n = 1; while (<>) { $n = 1 if (/^\s*$/ print "$n: $_"; $n++; }
568 名前:デフォルトの名無しさん mailto:sage [2006/04/21(金) 10:58:13 ] あ、閉括弧とか忘れた。まあいいや。脳内で修正してくれ。
569 名前:561 mailto:sage [2006/04/21(金) 22:35:44 ] >566 elseを使っても結果が変わらないんです。 マッチがヘボいんでしょうか。 >567 実行させると入力がぶっとんでしまいました… >565 いろいろ試してみたのですが、自分の力ではムリっぽいです… あつかましいとは承知していますが、作っていただくと助かります。
570 名前:561 mailto:sage [2006/04/22(土) 19:48:05 ] 出来てしまいました! my $i = 0; while (<STDIN>) { if (/^..+/) { print ++$i; print ": "; print; } else { $i = 0; print; } } else文で「my $i = 0;」にしていたのがまずかったようで、 空行になっても$iが初期化されなかったみたいです。 レス下さったみなさん、ありがとうございました。 おさわがせしました。 私ってPerlの才能ないのかな…
571 名前:デフォルトの名無しさん mailto:sage [2006/04/23(日) 05:53:25 ] >>570 完成おめ! 才能がどうかは知らないけど、結局経験じゃないですかね? 俺も本スレで叩かれたりしながら勉強してますw 一応俺が用意してたスクリプト貼っておきます。。。 use strict; my $c = 1; open IN, 'filename'; while (<IN>) { (/^$/) ? $c = 1 : print $c++ . ':'; print; } close IN;
572 名前:561 mailto:sage [2006/04/23(日) 12:42:55 ] >571 ありがとうございます。 自分のはだいぶ冗長だと思うので、用意していただいたスクリプトを参考にさせていただきます。 今自分の書いたものを見直してみると、if (/^./)でいいですよね... 恥ずかしい...
573 名前:デフォルトの名無しさん mailto:sage [2006/04/23(日) 14:49:38 ] >>570 myはローカル変数の宣言。単なる代入では無いよ。 myを使うと、同名の新たな一時変数を作る事になる。 んで、詳しい条件は忘れたが、ブロック抜ける時とかに消える。 長いコードになると 「この変数名って他で使われて無かったっけ…?」 ってなるけど、my使えばそんな心配が減るワケ。
574 名前:デフォルトの名無しさん mailto:sage [2006/04/23(日) 18:39:57 ] >>558 >>560 では解決しちゃったみたいだけど、これ俺も知りたい。 コマンドラインから入力されたテキストの改行コードをLFに統一、 という前処理をしてからwhileループ処理をかますってできるのかな? あんまりセパレータとか変えたくないんで。
575 名前:デフォルトの名無しさん mailto:sage [2006/04/23(日) 21:25:04 ] >>574 >セパレータとか変えたくない なんで?
576 名前:デフォルトの名無しさん mailto:sage [2006/04/23(日) 22:10:27 ] >575 セパレータも一文字として認識されてしまわない? 回避する方法があればいいんだけど。
577 名前:デフォルトの名無しさん mailto:sage [2006/04/23(日) 23:08:11 ] 認識できるから区切れるんだが。 いまいち言いたいことが分からん。
578 名前:デフォルトの名無しさん mailto:sage [2006/04/23(日) 23:40:26 ] メタキャラ「.」って改行を除く一文字にマッチするじゃん。 でも「.」もCRにマッチしちゃわね? LF読み込むときと処理が変わっちゃうからイライラすんだよね。
579 名前:デフォルトの名無しさん mailto:sage [2006/04/24(月) 00:10:50 ] 自分の都合に合わせてセパレーター変えるなり置換するなりすりゃいいじゃん。
580 名前:デフォルトの名無しさん mailto:sage [2006/04/24(月) 03:57:29 ] あーいう変数ってlocal出来ないっけ?
581 名前:デフォルトの名無しさん mailto:sage [2006/04/24(月) 23:15:36 ] whileで読み込む前に処理しとくって、 できないってことでおk?
582 名前:デフォルトの名無しさん mailto:sage [2006/04/25(火) 04:35:21 ] 質問は質問スレ行け
583 名前:デフォルトの名無しさん mailto:sage [2006/05/01(月) 22:52:12 ] Win32::GUI::ListView ソートメソッドないじゃん・・・orz た・・・す・・・け・・・て・・・・
584 名前:デフォルトの名無しさん mailto:sage [2006/06/15(木) 22:54:05 ] りすとびゅーか... なにもかもがな・・つ・・か・・し・・ぃ・・
585 名前:デフォルトの名無しさん mailto:sage [2006/06/16(金) 20:37:02 ] 一瞬、不治痛の電子帳票ソフトかと思った
586 名前:デフォルトの名無しさん [2006/07/09(日) 11:10:16 ] 初めまして。 浅知恵で掲示板の改造を試みています。 オートリンク機能付き掲示板に記事修正機能を追加したのですが、 記事修正をするたびに、文中にあるリンク先が <A href=www.a.b.c target=_blank><A HREF=www.a.b.c target=_blank> www.a.b.c</A></A> と、タグが無制限に追加されていきます。 そこでお願いしたいのは、 記事修正時にファイルに保存されているデータ ---------------------------------------------- <A HREF=www.a.b.c target=_blank> www.a.b.c</A> ---------------------------------------------- を一端 ---------------------------------------------- www.a.b.c ---------------------------------------------- というデータに戻すサブルーチンを作成したいのですが、 行き詰まっています。 よろしくお願いします。 オートリンク機能のスクリプトは以下の通りです。 *************************************************************** #オートリンク sub auto_link { my($msg) = $_[0]; $msg =~ s/([^=^\"]|^)(http\:[\w\.\~\-\/\?\&\+\=\:\@\%\;\#]+)/$1<A HREF=$2 target=_blank>$2<\/A>/g; return $msg; }
587 名前:デフォルトの名無しさん mailto:sage [2006/07/09(日) 11:15:33 ] ↑ ありゃ、文字がおかしい。 全角にしてありますが、Aタグです。 www.a.b.c の後ろは、</A>
588 名前:デフォルトの名無しさん mailto:sage [2006/07/10(月) 01:11:44 ] そういう時は表示時にオートリンクを適用すればいい。 保存時にいじっちゃうと後でいじりにくくなるというのは定説。 ファイル構造上、改行の置換とかは仕方無いと思うけどさ。
589 名前:デフォルトの名無しさん mailto:sage [2006/07/10(月) 10:01:41 ] >>586 ようするに、すでに<A>タグ化されている部分を除外すればいいわけだな?
590 名前:デフォルトの名無しさん [2006/07/10(月) 10:03:49 ] ああ、ごめん。>>586 にいての>>588 の意見を読んでなかった。 確かに保存時は生データのまま記録し置いて、閲覧時に http:なんた
591 名前:デフォルトの名無しさん mailto:sage [2006/07/10(月) 10:06:04 ] >>590 途中で送信しちゃった。 保存時は生で。閲覧時は「http:なんたら」の条件で抽出→<A>タグ化のほうが効率的だね。
592 名前:586 mailto:sage [2006/07/10(月) 14:07:06 ] みなさん、ありがとうございました。 発想の転換ですね。 私の堅い頭では思いつきませんでした。 保存時ではなく、表示時にオートリンクを適用でうまくいきました。 ありがとうございました。
593 名前:デフォルトの名無しさん mailto:sage [2006/07/18(火) 22:59:04 ] 俺は全く解らないので、申し訳ないけど誰かに頼みたいorz ボタンを押したらカウントが増えるシンプルなシステムを作って欲しいです。
594 名前:デフォルトの名無しさん mailto:sage [2006/07/19(水) 02:59:10 ] どこにでもあると思うが…
595 名前:デフォルトの名無しさん mailto:sage [2006/07/19(水) 16:54:07 ] >>593 use CGI; my $cgi=new CGI; my $n=$cgi->param('n')+1; print $cgi->header(-charset=>'Shift_JIS'), $cgi->start_html(-lang=>'ja',-encoding=>'Shift_JIS',-title=>'simple count'), $cgi->a({href=>"$ENV{'SCRIPT_NAME'}?n=$n"},$n), $cgi->end_html;
596 名前:デフォルトの名無しさん mailto:sage [2006/07/20(木) 00:02:04 ] >>593 <?php if (! $HTTP_COOKIE_VARS{'Num'}) { $start=0; $i=1; setcookie("Num",$i,time()+30); } else { $i=$HTTP_COOKIE_VARS{'Num'}+1; setcookie("Num",$i,time()+30); } echo $start.$HTTP_COOKIE_VARS{'Num'}."<br>\n"; echo "<form method=POST action=><input type=submit value=count_up></form>\n"; ?>
597 名前:デフォルトの名無しさん mailto:sage [2006/07/20(木) 01:41:37 ] >>593 <input type="button" value="0" onclick="this.value++">
598 名前:デフォルトの名無しさん mailto:sage [2006/07/20(木) 02:06:11 ] どんどん簡易な物になってくな
599 名前:デフォルトの名無しさん mailto:sage [2006/07/20(木) 20:10:06 ] つーかスレタイに反してPerlですらなくなってるな このスレ自体がアレなのは確かだが
600 名前:デフォルトの名無しさん mailto:sage [2006/07/21(金) 00:49:26 ] 待て待て、Web物とは一言も言ってないぞ? # CUI use Term::ReadKey; binmode STDIN; ReadMode 3; print my $count = 0; print "\r", ++$count while (defined ReadKey 0); ReadMode 0; # GUI(Perl/Tk)版 use Tk; my $count = 0; my $mw = MainWindow->new(); my $label = $mw->Label(-text => $count)->pack(); $mw->Button( -text => 'Count up', -command => sub { $label->configure(-text => ++$count) }, )->pack(); MainLoop;
601 名前:デフォルトの名無しさん mailto:sage [2006/07/21(金) 12:46:48 ] Term::ReadKey を入れてないおいらが来ましたよ。 #!/usr/bin/env perl print my $i = 0 ; $i ++ ; system "stty -echo" ; print "¥e[1K" . $i ++ while <STDIN> ; system "stty echo" ; このスクリプト ( hoge.pl )、perlcc が通ったのには笑った。@5.6.6 perlcc -o counter hoge.pl
602 名前:デフォルトの名無しさん mailto:sage [2006/07/21(金) 13:24:24 ] なんで笑えるのかわからんが、もっと短くしてみた。 perl -e '`stty cbreak -echo`;print $i++,"\r" while getc'
603 名前:デフォルトの名無しさん mailto:sage [2006/07/21(金) 13:49:37 ] cbreakはサポートしてないものもあるよ
604 名前:デフォルトの名無しさん mailto:sage [2006/07/21(金) 17:11:49 ] >>602 いや system 関数ってみるからにコンパイルの時コケそうじゃないですか。
605 名前:デフォルトの名無しさん [2006/08/06(日) 00:00:47 ] 頭が混乱してきた。 ETRADEのポートフォリオのページを取得するスクリプトつくって。 6時間考えたけど、いっぱいいっぱい。だめぽ
606 名前:デフォルトの名無しさん mailto:sage [2006/08/06(日) 00:29:53 ] 既製品を探すという作業を飛ばしたようだね。
607 名前:デフォルトの名無しさん [2006/08/06(日) 00:52:42 ] >>605 だけど。 やっとできたよ。 しばらく POSTとGETの仕組みと INPUTタブの仕組みを 忘れてた。
608 名前:デフォルトの名無しさん mailto:sage [2006/08/06(日) 03:44:01 ] inputタブだってよ
609 名前:デフォルトの名無しさん [2006/08/08(火) 10:10:47 ] ディレクトリ内にある.jpgファイルを全て 1.jpg, 2.jpg, 3.jpg, ... というように連番のファイル名に変換するプログラムを つくって頂けませんか。 そのディレクトリには.jpgファイルしか置いてません。(全部変換する) もともとのファイル名は、*****.jpg もしくは ******.jpg (*は数字) という形です。 こういうプログラムを作るのにperlが適しているのかどうかはわからないのですが、 他に作成依頼できそうなスレがみつからなかったので。 お願いします。
610 名前:デフォルトの名無しさん mailto:sage [2006/08/08(火) 10:16:02 ] folderの中にある複数の圧縮ファイル(zip, rar)の中のファイルの情報の一覧(text fileでOK) を作ってくれるscriptがほしいです。
611 名前:デフォルトの名無しさん mailto:sage [2006/08/08(火) 10:55:06 ] >>609 perl -e'my $i = 1; foreach(glob("*.jpg")) { rename $_, "$i.jpg"; $i ++;}' 動くかどうかはしらん
612 名前:609 mailto:sage [2006/08/08(火) 11:52:55 ] >611 できてるぽいです! ありがとうございます。
613 名前:デフォルトの名無しさん [2006/08/08(火) 16:23:26 ] アクセスしてきたPCのポートスキャンをするcgi 目的:自分のPCのセキュリティーチェックをしたいので
614 名前:デフォルトの名無しさん mailto:sage [2006/08/08(火) 18:06:17 ] 嘘付け
615 名前:613 mailto:sage [2006/08/08(火) 18:24:59 ] 最初はIPアドレスを入力して入力されたIPをもつPCのポートスキャンができるようにとおもったのですが、 >>614 さんのように邪推される方がいると思ったのでアクセスしてきたPCのポートスキャンということにしました。 さらにいうなら、IDパスワード認証をしてそのチェックを通過した人だけセキュリティーチェックできるようにお願いします。 もっともIDパスワードをさらしておいて他人のPCのポートスキャンができることも懸念されますが・・・・。。
616 名前:デフォルトの名無しさん mailto:sage [2006/08/10(木) 16:45:15 ] >>610 while (<*>) { if ((/\.zip$/i) or (/\.rar$/i)) { open(AAA, "unrar l $_ |") || die "err"; $list = <AAA>; close(AAA); } } こんなもんで、よろしいんじゃないですか?
617 名前:デフォルトの名無しさん [2006/08/24(木) 20:33:41 ] perl -e '`stty cbreak -echo`;print $i++,"\r" while getc'
618 名前:デフォルトの名無しさん mailto:sage [2006/08/30(水) 14:53:13 ] LINUXのCRONで動かしているPerlがあるんだが、自分自身2重起動を阻止したい。 リクエストお願いします。
619 名前:デフォルトの名無しさん [2006/08/30(水) 15:34:33 ] >>618 例えばlockファイルを使う。perldoc -q lock use Fcntl qw(:DEFAULT :flock); sysopen(LCK, "/tmp/lockfile", O_WRONLY|O_CREAT) or die "open: $!\n"; flock(LCK, LOCK_EX|LOCK_NB) or die "flock: $!\n"; sleep 100;
620 名前:デフォルトの名無しさん [2006/08/31(木) 19:03:19 ] なんじゃそりゃ
621 名前:デフォルトの名無しさん mailto:sage [2006/09/07(木) 21:41:40 ] 5分経過したら再認証のページに飛ぶものを作って下さい。 お願いします。。。
622 名前:デフォルトの名無しさん mailto:sage [2006/09/07(木) 21:50:03 ] >>621 仕様がはっきりしなさ過ぎて無理
623 名前:デフォルトの名無しさん mailto:sage [2006/09/07(木) 22:12:49 ] >622 タイムアウト処理だけでも無理ですか?
624 名前:デフォルトの名無しさん mailto:sage [2006/09/07(木) 23:40:42 ] 同じ学校のやつか? 964 名前:デフォルトの名無しさん 投稿日:2006/09/07(木) 21:36:27 質問です! ログインして10分経過後、再認証を行なうプログラムについて教えて下さい。 学校の課題なんですがさっぱり分りません。。。
625 名前:デフォルトの名無しさん mailto:sage [2006/09/08(金) 00:13:21 ] マルチかよ
626 名前:デフォルトの名無しさん mailto:sage [2006/09/08(金) 16:15:04 ] >>623 sleep(300);
627 名前:デフォルトの名無しさん [2006/09/08(金) 19:48:59 ] >>621 鯖に「ID=************が何時何分何秒にログインした」ってファイルを 作っておいて、その人がCGIにアクセスするたびに最終ログイン時刻を チェックする。規定時間をオーバーしていると、ログイン画面に飛ばす。 って感じのやつはダメ?
628 名前:デフォルトの名無しさん mailto:sage [2006/09/12(火) 05:37:49 ] そーいや前に、タイムアウトの処理を HTMLのタグでやってるの見たことある ブラウザ側で簡単に回避されるっての…w