- 1 名前:デフォルトの名無しさん mailto:sage [2006/12/21(木) 22:35:39 ]
- "The duct tape of the Internet" こと、Perlについての質問箱です。
"There's more than one way to do it" ということで、Perlの奥深さについて皆で語り合い、追求してまいりましょう。 CGIについての質問は板違いです。WEBプログラミング板でどうぞ。 CGIとPerlの区別がつかない人もWEBプログラミング板に行ってください。 (WEBプログラミング板 pc8.2ch.net/php/ ) CGIの質問は答えがPerlと全然関係ない話に帰着する場合が多かったりするのでWEBプログラミング板に行って聞いたほうが得ですよ。 このスレでは(CGI以外の)純粋にPerlのみに関係する質問を取り扱っていこうと思います。 スレ違いの質問にはスルーか、速やかな誘導をお願いします。 www.perl.org/get.html ● 2006/12/21現在の最新版: 5.8.8 ● 2006/12/21現在の開発版: 5.9.3 前スレ Perlについての質問箱 28箱目 pc8.2ch.net/test/read.cgi/tech/1162273941/ リンク集は>>2-3 過去スレは>>4
- 205 名前:デフォルトの名無しさん mailto:sage [2007/01/07(日) 05:32:00 ]
- 文字列だった。すまん
一つだけなら /[1-9.]+/ すべてなら print(join(',', /[1-9.]+/g));
- 206 名前:デフォルトの名無しさん mailto:sage [2007/01/07(日) 06:01:09 ]
- #!c:\usr/bin/perl ←だとアクセスできますが、
#!usr/bin/perl ←だとアクセ500のエラーがでます。 3時間探しましたが答えが見つかりませんでした。 よろしくお願いします。 os:win2000 webserver:apache 2.059 active perl
- 207 名前:デフォルトの名無しさん mailto:sage [2007/01/07(日) 06:04:39 ]
- >>206
#!/usr/bin/perl
- 208 名前:デフォルトの名無しさん mailto:sage [2007/01/07(日) 06:05:19 ]
- スラッシュ一個たんなくね?
×#!usr/bin/perl ○#!/usr/bin/perl
- 209 名前:デフォルトの名無しさん mailto:sage [2007/01/07(日) 06:09:07 ]
- >>207-208
いろいろやっていくうちに"/"が消えてました。 やっとゴールにたどり着きました。ありがとうございました。
- 210 名前:デフォルトの名無しさん mailto:sage [2007/01/07(日) 06:25:02 ]
- >>205
説明不足ですみません。 $text = "12:24" なら $textの表示そのものをしない $text = "3.142" なら表示する というような不要な文字が1つでもあれば 無視するといった感じのものが作りたかったのです。 よろしくお願いします。
- 211 名前:デフォルトの名無しさん mailto:sage [2007/01/07(日) 06:30:58 ]
- $text =~/^[1-9.]+$/ and print "$&\n";
- 212 名前:デフォルトの名無しさん mailto:sage [2007/01/07(日) 06:32:14 ]
- printのとこ、$textじゃなくてわざわざ$&で出力する意味あるの?
- 213 名前:デフォルトの名無しさん mailto:sage [2007/01/07(日) 06:35:49 ]
- 短縮。
- 214 名前:デフォルトの名無しさん mailto:sage [2007/01/07(日) 06:40:16 ]
- >>211
無事作成できました。ありがとうございました。
- 215 名前:デフォルトの名無しさん mailto:sage [2007/01/07(日) 07:26:19 ]
- 2chのdatファイルを、差分で取得したいのですが、どのようにしたらよいのでしょうか?
- 216 名前:デフォルトの名無しさん mailto:sage [2007/01/07(日) 08:09:31 ]
- If-Modified-Since と Range をつけて叩いて 206|304|416 のどれかをもらうようにする
- 217 名前:デフォルトの名無しさん [2007/01/07(日) 14:11:53 ]
- package の中で、
sub func(\[$@]) { my $class = shift; my $arg = shift; } として、$arg に配列もしくはスカラのリファレンスを受け取りたいのですが、 $arg にはスカラしか入ってくれません。 どう書くのが正解でしょうか?
- 218 名前:デフォルトの名無しさん mailto:sage [2007/01/07(日) 15:06:23 ]
- >>202
\. じゃなくてええの?
- 219 名前:デフォルトの名無しさん mailto:sage [2007/01/07(日) 15:44:04 ]
- >>218
自分でちょっと試せばいいだろ print "Matchn" if 'ABC' =~ /[.]/;
- 220 名前:デフォルトの名無しさん mailto:sage [2007/01/07(日) 17:38:56 ]
- >>218
文字クラスの中だから
- 221 名前:デフォルトの名無しさん mailto:sage [2007/01/07(日) 20:45:01 ]
- >>217
prototypeに頼らないのが正解。 そのprototype、第一引数について書かれてないけど。
- 222 名前:デフォルトの名無しさん mailto:sage [2007/01/07(日) 22:45:16 ]
- ppmをつかってモジュールを持ってくるときに、zipで圧縮されてると展開方法を知らんとエラーが出てしまうのですが、
どうすればこのエラーが出なくなるんでしょう。
- 223 名前:デフォルトの名無しさん mailto:sage [2007/01/07(日) 23:28:08 ]
- Archive::Zip入ってる?
- 224 名前:デフォルトの名無しさん mailto:sage [2007/01/08(月) 00:48:56 ]
- >>223
入ってます。
- 225 名前:デフォルトの名無しさん mailto:sage [2007/01/08(月) 01:27:07 ]
- 手元だとzipアーカイブでもインストールできるなぁ。どこのリポジトリの何で発現してる?
- 226 名前:デフォルトの名無しさん mailto:sage [2007/01/08(月) 01:49:50 ]
- >>225
ためしに再インストールしようとしたArchive::Zipで出てます。。。 何処のレポジトリかはどうやってわかるんでしょうか。
- 227 名前:デフォルトの名無しさん mailto:sage [2007/01/08(月) 08:59:59 ]
- csvの一行目を検索して、二行目をprintするだけなんですが
「ー」を含む言葉だと検索結果で出力されません 「。」「・(半角)」「・(全角)」とか色々やったんですが、どうやら「ー」だけのようです 解決方法をよろしくお願いします open(IN,"$file"); while(1) { $line = <IN>; @data = split(/,/ ,$line); if ( $line eq "" ) { last;} if ( $data[0] =~ /$in{'test'}/ ) { print "$data[1]\n"; } } close(IN);
- 228 名前:デフォルトの名無しさん [2007/01/08(月) 11:44:40 ]
- >>227
CSVファイルを扱うならば、Text::CSV をお使いください。 (Text::CSV_XS かもしれない、手元にソースがない)
- 229 名前:デフォルトの名無しさん mailto:sage [2007/01/08(月) 12:25:03 ]
- >>228
返信ありがとうございます Text::CSVモジュールを使わないと対処できないということでしょうか? フリーのwebスペースを利用したいので、モジュールはインストール出来ないです Text::CSV自体は優れものみたいですね
- 230 名前:デフォルトの名無しさん mailto:sage [2007/01/08(月) 12:27:20 ]
- >226
えっと、ppmシェルで、 search Archive-Zip って入力して。 Searching in Active Repositories 1. Archive-Zip [1.18] Archive-Zip こんな感じに出てくると思う。仮に1番なら desc 1 って入力したときなんて表示されてる?
- 231 名前:デフォルトの名無しさん mailto:sage [2007/01/08(月) 13:21:02 ]
- >>227
つShift_JISの罠 /\Q$in{'test'}\E/ Text::CSVはマルチバイト文字通ったっけ? Text::CSV_XSでbinaryオプションを与えない駄目だったような記憶が
- 232 名前:デフォルトの名無しさん mailto:sage [2007/01/08(月) 14:02:13 ]
- Text::CSVは0x09(Tab)と0x20(Space)から0x7e(Tilde)の範囲しか使えないね。
Text::CSV_XSでbinaryオプションつけないとダメだ。
- 233 名前:デフォルトの名無しさん mailto:sage [2007/01/08(月) 14:07:57 ]
- >>231
返信ありがとうございます。おかげで解決することができました ただ、「\Q」が「\Eまでのメタ文字をリテラルとして判断する」のは別ったのですが 「/$in{'test'}/」←これのどこにメタ文字があるのかが分らないです 解決はしたけど理解出来てない…
- 234 名前:デフォルトの名無しさん mailto:sage [2007/01/08(月) 14:25:47 ]
- >>233
「ー」はShiftJISで0x81 0x5Bと表される。この2バイト目が'[' = 0x5B 他にもソ('\')とか+('{')とか色々。 文字コードの割り当て参考資料 ttp://www-cms.phys.s.u-tokyo.ac.jp/~naoki/CIPINTRO/CCGI/kanjicod.html ASCIIコード表 ttp://adlib.rsch.tuis.ac.jp/~akira/lect/softa/ascii.html
- 235 名前:デフォルトの名無しさん mailto:sage [2007/01/08(月) 14:31:01 ]
- >>233
「$in{'test'}」自体がメタ文字を含むってことじゃなくて、 実行時に変数$in{'test'}にメタ文字を含むShiftJIS文字が入る可能性があるってこと。
- 236 名前:デフォルトの名無しさん mailto:sage [2007/01/08(月) 14:51:17 ]
- >>234-235
かなり見当違いな考えをしてたみたいですね 「ー」以外にも注意しなければいけない文字が結構ありますね ご丁寧にありがとうございました
- 237 名前:デフォルトの名無しさん mailto:sage [2007/01/08(月) 16:52:09 ]
- >>230
1: Archive-Zip Provide an interface to ZIP archive files. Version: 1.18 Author: Ned Konz <perl@bike-nomad.com> Provide: Archive::Zip version 1.18 Require: File-Which Require: PathTools Repo: trouchelle CPAN: search.cpan.org/dist/Archive-Zip-1.18/ Installed: 1.18 (perl) 2: Archive-Zip Provide an interface to ZIP archive files. Version: 1.18 Author: Adam Kennedy (cpan@ali.as) Provide: Archive::Zip version 1.18 Provide: Archive::Zip::BufferedFileHandle Provide: Archive::Zip::MemberRead Provide: Archive::Zip::MockFileHandle Require: File-Which Repo: ActiveState Package Repository CPAN: search.cpan.org/dist/Archive-Zip-1.18/ Installed: 1.18 (perl) 3: Archive-Zip Provide an interface to ZIP archive files. Version: 1.18 Author: Ned Konz (perl@bike-nomad.com) Require: Compress-Zlib Repo: bribes CPAN: search.cpan.org/dist/Archive-Zip-1.18/ Installed: 1.18 (perl) こんな感じです。
- 238 名前:デフォルトの名無しさん [2007/01/08(月) 17:32:10 ]
- >>227
おもったが、他の文字コードに変換してsplitするのはどうよ。 いちばんお手軽。 open(IN,"$file"); while(1) { $line = <IN>; $line=Jcode->new($line)->euc; @data = split(/,/ ,$line); if ( $line eq "" ) { last;} if ( $data[0] =~ /$in{'test'}/ ) { print Jcode->new("$data[1]\n")->sjis; } } close(IN);
- 239 名前:デフォルトの名無しさん mailto:sage [2007/01/08(月) 17:41:21 ]
- たまに思うのだが、単なる文字列のスカラを
"$file" とかって、ダブルクォートで括って書くの無駄だよね。 全く同じ内容の、新しい文字列を生成してる訳でしょ? だったら単に $file って書いた方が効率良いのに。 KENTとか、どっかのサンプルでわざわざ括るようになってるのかな。 こういう書き方してる人が、どこで習ってくるのか知りたい。
- 240 名前:デフォルトの名無しさん mailto:sage [2007/01/08(月) 17:51:09 ]
- >>238
$in{'test'}が正規表現の場合の話か。 EUCにするくらいなら、変換に多少コストが掛かるがUTF-8にして処理したほうがいいと思う。 今度は>>176こういう問題が発生する。SJISでも率は低いが起こるけれどね。 ってもしかして元質問も正規表現を入力する質問だったんだろか… indexの代わりにマッチングを行ってるだけかと思って\Q\Eで答えちゃったけれども >>239 最近は見ないけれど print "@hoge"; とやっておいてなんか表示が変だと質問してくる人までいるから困る。 ついでにperlfaq ttp://www.kt.rim.or.jp/%7Ekbk/perl5.005/perlfaq4.html#What_s_wrong_with_always_quoting
- 241 名前:デフォルトの名無しさん mailto:sage [2007/01/09(火) 00:43:01 ]
- >>239
あ、それ昔やってた。 なんかprint = ダブルクォート括らないと不安、みたいな気がしてたような。
- 242 名前:デフォルトの名無しさん mailto:sage [2007/01/09(火) 00:46:26 ]
- #俺にも
print $a, $b; #とすればいいところを print $a . %b; #としていた時代や print "$a$b"; #としていた時代があったなあ
- 243 名前:デフォルトの名無しさん mailto:sage [2007/01/09(火) 01:05:55 ]
- カンマは直接に文字連結の意味じゃないから余り好きじゃないなぁ。。
そっちの方が速いんだけどね。
- 244 名前:デフォルトの名無しさん mailto:sage [2007/01/09(火) 01:39:08 ]
- 強制的に文字列コンテキストに変えたいときとか。
オブジェクトじゃなくてその文字列表現だけ保持したい場合とかあるでしょ。
- 245 名前:244 mailto:sage [2007/01/09(火) 01:46:32 ]
- ちゃんと読んでなかった。スマソ
- 246 名前:デフォルトの名無しさん mailto:sage [2007/01/09(火) 12:09:24 ]
- >>243
散々既出だが、一応突っ込んどく。カンマの方が遲い use Benchmark ; my ( $hoge, $moge ) = ( 'hoge', 'moge' ) ; sub dot { print STDERR $hoge . $moge . "\n" ; } sub dq { print STDERR "$hoge$moge\n" ; } sub comma{ print STDERR $hoge , $moge , "\n" ; } timethese ( 1000000, { op1 => 'dot', op2 => 'dq', op3 => 'comma' } ) ; $ perl Bench.pl 2> /dev/null Benchmark: timing 1000000 iterations of op1, op2, op3... op1: 15 wallclock secs ( 7.67 usr + 4.81 sys = 12.48 CPU) @ 80128.21/s (n=1000000) op2: 12 wallclock secs ( 7.37 usr + 4.67 sys = 12.04 CPU) @ 83056.48/s (n=1000000) op3: 22 wallclock secs ( 9.13 usr + 11.23 sys = 20.36 CPU) @ 49115.91/s (n=1000000)
- 247 名前:243 mailto:sage [2007/01/09(火) 13:10:54 ]
- >>246
初心者でゴメン。Windowsだから、nulに出力して実行してみた。 (Windows XP SP2 ActivePerl5.8) Benchmark: timing 10000000 iterations of op1, op2, op3... op1: 12 wallclock secs (11.02 usr + -0.02 sys = 11.00 CPU) @ 909173.56/s (n=10000000) op2: 12 wallclock secs (10.87 usr + 0.00 sys = 10.87 CPU) @ 919540.23/s (n=10000000) op3: 8 wallclock secs ( 7.02 usr + 0.00 sys = 7.02 CPU) @ 1425516.75/s (n=10000000) あれ?最初自分の考えでは関数を二回使ってるカンマの方が遅いと思ってたんだけど、 ベンチしたらドットの方が速いんで>>243を書いた。 なんで結果違くなっちゃうのか誰か教えて〜。
- 248 名前:243 mailto:sage [2007/01/09(火) 13:29:23 ]
- あー、わかった。Perlでの出力処理はcommaの方が速いけど、
systemのIOでのオーバーヘッドで結果的にdotの方が速いという寸法か。>>246 Windowsで実際にファイルに出力して計測してみると大体同じ(わずかにcommaが速い)になった。 ここらへんはLinuxとWindowsで違うんだろうね。
- 249 名前:デフォルトの名無しさん mailto:sage [2007/01/09(火) 14:06:58 ]
- >>246
うんにゃ。 8Bのメモリ確保なら大してコストかからんからサンプルとして不十分じゃないか?。 $hogeが十キロの単位になってくるとカンマが追い抜くんじゃないだろうか。
- 250 名前:デフォルトの名無しさん mailto:sage [2007/01/10(水) 01:42:28 ]
- >>248
いや、>>246はSTDERRに出力してるからカンマ区切りが遅くなっているだけ。 STDERRはperl内部でも特別扱いされていて、カンマで区切られた要素毎に fflush される。 なので、STDERRへ出力する場合はカンマ区切りの方が(fflushの増える分だけ)遅くなる。 他のハンドルだと($|=1でも)、普通はカンマ区切りの方が速くなる。
- 251 名前:デフォルトの名無しさん mailto:sage [2007/01/10(水) 04:22:12 ]
- えっちだから遅いんだね。
- 252 名前:デフォルトの名無しさん [2007/01/10(水) 15:25:22 ]
- フリーウェアのソースを眺めてると、一つのファイルにやたらと機能を詰め込んでるのが
多いように感じるんだけど、これってどうなんだろう。 掲示板だったら、表示.cgi 書込み.cgi とか分けた方が保守しやすいのでは、と。 意見求みまする。
- 253 名前:デフォルトの名無しさん mailto:sage [2007/01/10(水) 15:43:02 ]
- >>252
インスコするファイルがたくさんあるとお子様が混乱してしょうもない 質問で邪魔してくるので、ソースメンテする手間はかかるけどトータル では得らしい。
- 254 名前:デフォルトの名無しさん mailto:sage [2007/01/10(水) 15:51:55 ]
- コーディング外の質問です。
今、plファイルのwindows向けのアイコンを何となく作っていますが、 真珠っぽいのがファイルについたアイコンか、らくだの絵のアイコンかどちらがふさわしいと思いますか?
- 255 名前:デフォルトの名無しさん mailto:sage [2007/01/10(水) 16:07:31 ]
- 当然らくだ
- 256 名前:デフォルトの名無しさん mailto:sage [2007/01/10(水) 16:18:38 ]
- PARのparl.exe
- 257 名前:デフォルトの名無しさん mailto:sage [2007/01/10(水) 16:25:41 ]
- >>256
- 258 名前:デフォルトの名無しさん [2007/01/10(水) 20:00:56 ]
- 初めて書き込みさせて頂きました。
現在、perl(HPUX)とNet-Telnet-3.03を利用してtelnet接続しているのですが、 telnet中にESCキーを入力させる事は可能なのでしょうか? perl:v5.8.0 built for PA-RISC1.1-thread-multi telnet:Net-Telnet-3.03 対話式なプログラムを実行していき、途中で どうしてもESCキーが必要になりました。 $telnet->print("\x1B"); こんな感じで文字コード入力でもダメでした。。
- 259 名前:韋駄天はふと考えた [2007/01/10(水) 23:02:23 ]
- あなた達も↓のような経験が一度や二度あるでしょう。私はわずか4年の間に
2回もパソコンをウイルスによって不調になり使えなくなりました。 私達はパソコン製造業者及び修理業者とパソコン関連で商売をしている業者を あまりにも野放にしすぎました。 その結果が自作自演ウイルスバラ撒きの悪徳商法です。 703 :韋駄天はふと考えた :2007/01/10(水) 22:11:17 ID:ZKnpXOph ノートンがウイルスを検出しました。 あなたのパソコンを60日間に渡り78250個ものウイルスから守ってきました。 もうすぐ無料期間が終わりますので、ウイルス対策有料ソフトを購入してください。 はぁ????なにいってんの?なんで、たった60日間で78250個ものウイルスが進入してくんだよ? 明らかに自作自演目的の業者の仕業じゃねえか? 犯人はおまえらだろが!この犯罪者かぶれの集団が!! あちこちのサイトを開く度にコンピューターウイルスがパソコンにバンバン進入してくる。 おまえらな!自分で作ったサイトにコンピューターウイルスを混ぜて、他人の 何十万台ものパソコンを不調にさせたり故障させて、ウイルス対策ソフトを 高額で売りつけてまで儲けたいのかよ? 自転車屋が地域の自転車をパンクさせて回ったり、消防士が管轄地域で放火して 回るのと同じ犯罪をおまえらがやっているんだよ! てめえらで新たなコンピューターウイルスを次々に作ってはバラ撒いては、ウイルス対策ソフトを 高値で売りつける自作自演商売しやがって! この腐れ外道共が! 恥知らずの犯罪者共めが!
- 260 名前:デフォルトの名無しさん mailto:sage [2007/01/10(水) 23:06:09 ]
- >254
でっかく「PL」とか「Perl」の文字が入ってるアイコンとか……。(聞いてない)
- 261 名前:デフォルトの名無しさん mailto:sage [2007/01/11(木) 00:08:30 ]
- >>255
公式のらくだの絵をちょっと使って作ってみました。 >>256 あれはそのままでも結構かっこいいのですが、ちょっと抵抗があったので。。 >>260 一応Perlの文字を入れました。 どうもでした。
- 262 名前:デフォルトの名無しさん mailto:sage [2007/01/11(木) 01:01:46 ]
- ファイルを最終行から順にさかのぼって読む方法ないですか?
seek , getc等で1文字単位で読むしかないかな?
- 263 名前:デフォルトの名無しさん mailto:sage [2007/01/11(木) 01:09:57 ]
- >>262
つFile::ReadBackwards
- 264 名前:デフォルトの名無しさん mailto:sage [2007/01/11(木) 01:15:30 ]
- >>263
ありがとうございます。
- 265 名前:デフォルトの名無しさん mailto:sage [2007/01/11(木) 17:03:13 ]
- 課題で
aを1文字の文字列、$bを数字とし、上の行から$aを$b回と表示していき、3角形を描くプログラム。 というのが出ています。 print "a? "; chomp($a=<stdin>); print "b? "; chomp($b=<stdin>); でaに+をいれ、bに5といれると + ++ +++ ++++ +++++ こんな感じで表示させたいです。 for文の入れ子でやると思うのですが、表記がわかりません。 ヒントだけでもいただけないでしょうか?
- 266 名前:デフォルトの名無しさん mailto:sage [2007/01/11(木) 17:09:13 ]
- bに1を足してaをb個並べてプリントしたら改行を繰り返す
- 267 名前:デフォルトの名無しさん mailto:sage [2007/01/11(木) 17:19:33 ]
- forの入れ子でやるとかいうと、もしかしたらこういう
おぞましいコードを期待してるかもしれないんだけど for (my $line=1; $line <= $b; ++$line) { for (my $num=1; $num <= $line; ++$num) { print $a; } print "\n"; } こういう風に簡潔にかける。 for my $num (1..$b) { print $a x $num, "\n"; }
- 268 名前:デフォルトの名無しさん mailto:sage [2007/01/11(木) 17:21:58 ]
- あと $a と $b は sort とかで使われるから使うなといっとけ
- 269 名前:265 mailto:sage [2007/01/11(木) 17:33:51 ]
- >>267
できました。ありがとうございます。 入れ子でわけわからない長いプログラムを作っていた自分がアホらしくなりましたw もし入れ子でやるとしたら 入れ子の方の後半部分の print $a; } print "\n"; } はどういうことでしょうか?
- 270 名前:デフォルトの名無しさん mailto:sage [2007/01/11(木) 17:34:37 ]
- すぐ答え出す奴ってなんなの・・・
- 271 名前:デフォルトの名無しさん mailto:sage [2007/01/11(木) 17:54:51 ]
- 漁師さん
- 272 名前:デフォルトの名無しさん mailto:sage [2007/01/11(木) 18:12:08 ]
- こういう場合は普通、for文を使わずにトリッキーなコードを書いてあげるのが
お決まりなんだけどね。
- 273 名前:デフォルトの名無しさん mailto:sage [2007/01/11(木) 18:21:32 ]
- print map { $a x $_ . "\n" } 1..$b;
- 274 名前:デフォルトの名無しさん mailto:sage [2007/01/11(木) 18:58:59 ]
- チューニングした答え書いて分かるかよ。
いっそのことCPANで(笑
- 275 名前:267 mailto:sage [2007/01/11(木) 19:02:50 ]
- $a='+';$b=5;$t=0;
(${a}x(($b*$b+$b)/2))=~m{((??{++$t;".{$t}"}))(?{print"$^N\n"})}g; こうですか?わかりません><
- 276 名前:デフォルトの名無しさん mailto:sage [2007/01/11(木) 19:17:38 ]
- $^Nなんて使ってるのはじめてみた(笑)
- 277 名前:デフォルトの名無しさん mailto:sage [2007/01/11(木) 19:26:01 ]
- (笑)なんて使ってるのはじめてみた(笑)
- 278 名前:デフォルトの名無しさん mailto:sage [2007/01/11(木) 20:25:30 ]
- 確かにな(藁
- 279 名前:デフォルトの名無しさん mailto:sage [2007/01/11(木) 20:27:11 ]
- まぁ、ありえない
- 280 名前:デフォルトの名無しさん mailto:sage [2007/01/12(金) 02:12:36 ]
- print map "$_¥n", unpack +( join '', map "A${_}X${_}", 1..$b ), $a x $b ;
不毛だ…
- 281 名前:デフォルトの名無しさん mailto:sage [2007/01/12(金) 02:31:38 ]
- $_が半角文字"@"(0x40)を含むときのみデータを取得したいのですが、
以下のコードだと、$_が"病院"(0x95,0x61,0x89,0x40)とかの場合でも データを取得してしまいます。 このような2バイト文字を取得しないようにするには どの様に修正すればいいですか? if ( $_ =~ "@" ) { $data[$i++] = $_; }
- 282 名前:デフォルトの名無しさん mailto:sage [2007/01/12(金) 03:56:45 ]
- まず始めに。
当方、Perlは殆どいじった事がなく、 HSPやCを少々組んだ事がある程度の知識で質問しているため、 常識的な事や的外れな事を質問していたら申し訳ありません。 google等で調べても何やっても上手くいかなかったので、 どうか皆様の力をお貸し下さい。orz CGIで生成したページから別サイトへのリンクをクリックした時に、 「このURLへアクセスします。よろしいですか?」 と言ったような確認ページを挟んでアクセスするようにしようとしています。 具体的書くと、元ページの別サイトへのリンクは、 xxx.cgi?url=www.xxx.com/index.php?%A5%AC%A5 と言うように、リンク先のURLを<a>タグに埋め込んで自身のCGIに返すようになっています。 URL=の部分を取得し、そのまま確認ページの<a>タグに埋め込みたいのですが、 実際にやってみると?以降のURLエンコードされた部分が漢字や化けた文字として表示されてしまい、 綺麗なURLになってくれません。 渡されてきたURLを「www.xxx.com/index.php?%A5%AC%A5」のように、 そのまま表示するにはどうしたらいいでしょうか? 一応書いておくと、スクリプトはUTF-8Nで書いています。
- 283 名前:デフォルトの名無しさん mailto:sage [2007/01/12(金) 04:00:48 ]
- >1に全てが隠されているんじゃないだろうか。
- 284 名前:デフォルトの名無しさん mailto:sage [2007/01/12(金) 04:08:40 ]
- >>283
orz CGIはスレ違いだったんですね。本当にごめんなさい。 一日考え続けてて疲れてたのか、>>1を確認するのを失念してました。 向こうの初心者質問スレで質問してくる事にします。 スレ汚し失礼しました。
- 285 名前:デフォルトの名無しさん mailto:sage [2007/01/12(金) 04:14:03 ]
- プログラム板から誘導されて来ました。
まず始めに。 当方、Perlは殆どいじった事がなく、 HSPやCを少々組んだ事がある程度の知識で質問しているため、 常識的な事や的外れな事を質問していたら申し訳ありません。 google等で調べても何やっても上手くいかなかったので、 どうか皆様の力をお貸し下さい。orz CGIで生成したページから別サイトへのリンクをクリックした時に、 「このURLへアクセスします。よろしいですか?」 と言ったような確認ページを挟んでアクセスするようにしようとしています。 具体的書くと、元ページの別サイトへのリンクは、 xxx.cgi?url=www.xxx.com/index.php?%A5%AC%A5 と言うように、リンク先のURLを<a>タグに埋め込んで自身のCGIに返すようになっています。 URL=の部分を取得し、そのまま確認ページの<a>タグに埋め込みたいのですが、 実際にやってみると?以降のURLエンコードされた部分が漢字や化けた文字として表示されてしまい、 綺麗なURLになってくれません。 渡されてきたURLを「www.xxx.com/index.php?%A5%AC%A5」のように、 そのまま表示するにはどうしたらいいでしょうか? 一応書いておくと、スクリプトはUTF-8Nで書いています。
- 286 名前:デフォルトの名無しさん mailto:sage [2007/01/12(金) 04:20:09 ]
- ぎゃー!!!
ありえない誤爆・・・。 ほんっとうにごめんなさい・・・。
- 287 名前:デフォルトの名無しさん mailto:sage [2007/01/12(金) 04:23:33 ]
- >1に全てが隠されているんじゃないだろうか。
- 288 名前:281 mailto:sage [2007/01/12(金) 04:29:08 ]
- 自己解決しました。
おさわがせしました。
- 289 名前:デフォルトの名無しさん mailto:sage [2007/01/13(土) 00:44:28 ]
- >>281見てて、ふと、半角数字を全角数字に置換することはできても、半角英字を全角英字に置換することが難しいことに、
うーんうーん悩んでいた時のことを思い出した。 そういや、半角英字を全角英字に置換することってできるの?
- 290 名前:デフォルトの名無しさん mailto:sage [2007/01/13(土) 00:53:02 ]
- use utf8やるとか。
- 291 名前:デフォルトの名無しさん mailto:sage [2007/01/13(土) 01:42:35 ]
- EncodeもあるしUnicode::Japaneseもあるし。
- 292 名前:デフォルトの名無しさん mailto:sage [2007/01/13(土) 22:09:16 ]
- WebProg板に書いたけど、こっちの方がふさわしそうなので
こちらでお聞きします。 キー入力を待って、キー入力があれば処理を次に進める、ということをやりたいのですが、 C言語でいうところの、getch() に相当する関数はないでしょうか?
- 293 名前:デフォルトの名無しさん [2007/01/13(土) 22:10:05 ]
- 4年前ぐらいまでPG兼SEをしていたのだが、
そのころと比べるとかなりPerlは寂れた?
- 294 名前:デフォルトの名無しさん mailto:sage [2007/01/13(土) 22:34:22 ]
- >>292
Term::Getch
- 295 名前:デフォルトの名無しさん mailto:sage [2007/01/14(日) 00:42:13 ]
- こんな配列 @result=("E:15000", "S:20000", "W:15000", "N:50000")を作りまして
ここから、1位=N、2位=S、3位=E、4位=W、という結果を出したいと思っています。 得点が同点の場合、E→S→W→Nの順で優先となります。 とりあえず、$rank{E}='15000',$rank{S}='20000',,,として、 if(($rank{E}>=$rank{S})&&($rank{E}>=$rank{W})&&($rank{E}>=$rank{N})){ #E=1位 #SとWとNで2位以下の判別 #何かと何かで3位と4位の判別 } elsif (($rank{S}>=$rank{W})&&....... #S=1位 #EとWとNで2位以下の判別 #何かと何かで3位と4位の判別 }elsif(.. と、やり始めましたが、とてつもない作業になりそうです。 何か、よい解決法がございましたらご示唆お願いします。
- 296 名前:デフォルトの名無しさん mailto:sage [2007/01/14(日) 00:49:18 ]
- 普通にソートすりゃいいやん
@result= sort {(split/:/,$b)[1]<=>(split/:/,$a)[1]} @result;
- 297 名前: ◆TWARamEjuA mailto:sage [2007/01/14(日) 01:04:42 BE:1633853-BRZ(6701)]
- とん・なん・しゃー・ぺー♪
- 298 名前:デフォルトの名無しさん mailto:sage [2007/01/14(日) 01:06:36 ]
- use strict;
# こんな配列 my @results = ("E:15000", "S:20000", "W:15000", "N:50000"); # 得点が同点の場合の順 my %prio_of = ( E => 0, S => 1, W => 2, N => 3, ); my @s_results = map { $_->[0] } sort { $b->[2] <=> $a->[2] || $prio_of{$a->[1]} <=> $prio_of{$b->[1]} } map { [ $_, (split/:/=>$_)] } @results;
- 299 名前:デフォルトの名無しさん mailto:sage [2007/01/14(日) 01:23:07 ]
- 数値として使う予定の変数を、文字列で宣言するのって確か非効率だよね。
随分長い間Perlから離れてるので間違ってるかも知れないけど $foo = '2000'; と文字列にしておいて、その後で $foo を数値として使った場合、 スカラ変数の構造体は、 文字列型のものから、数値も文字列も両方入る奴に切り替わる。 構造体切り替えの手間もあるし、構造体のサイズも大きくなるから非効率 …だったような気がする。
- 300 名前:295 mailto:sage [2007/01/14(日) 01:43:35 ]
- すばやいご提示、ありがとうございます。
>>296 様 すみません、説明が不足していました(ということに気づくのに、いただいた式を 眺めながらかなり時間がかかりました・・・)。実は、EやSが変数の中に出てくる 順番は毎回変わる可能性がありました。申し訳ありません。 >>298 様 欲しい結果が出せました。ただ、内容の理解には私にはまだまだ時間がかかりそうです・・ なんとか少しずつ、吟味していきたいと思います。 >>297 様 わかりましたか。そのとおりです。 皆様、すばらしいご教授、どうもありがとうございました。
- 301 名前:デフォルトの名無しさん [2007/01/14(日) 01:59:22 ]
- >>299
perl は型はなしでしょ。 $foo = '2000'; も $foo = 2000; は同じでしょ。
- 302 名前:デフォルトの名無しさん mailto:sage [2007/01/14(日) 02:13:38 ]
- >>301
つ [perlguts] つ [Devel::Peek]
- 303 名前:デフォルトの名無しさん mailto:sage [2007/01/14(日) 02:45:43 ]
- >>302
もちっと教えてくれんかのう。 perldataには 「あるスカラー変数が、“文字列”型、“数値”型、“ファイルハンドル”型、 あるいはその他の型であるように宣言する方法はありません。」 とあるかんだけど、それとは違うレベルで何かあるのか?
- 304 名前:デフォルトの名無しさん mailto:sage [2007/01/14(日) 03:03:20 ]
- 提示されている情報ぐらい見なさい。
> Double-Typed SVs > スカラー変数は通常、整数、倍精度、ポインタ、リファレンスのうちの いずれか一つの型をとります。Perl は実際のデータに対して、 > 蓄積されている型から要求されている型へ、自動的に変換を行ないます。
- 305 名前:265 mailto:sage [2007/01/14(日) 03:39:50 ]
- >>275 を提出したんですが、授業後
せんせから呼び出し受けました。
|

|