Perlについての質問箱 33箱目

このエントリーをはてなブックマークに追加
1デフォルトの名無しさん
"The duct tape of the Internet" こと、Perlについての質問箱です。
"There's more than one way to do it" ということで、Perlの奥深さについて皆で語り合い、追求してまいりましょう。

CGIについての質問は板違いです。WEBプログラミング板でどうぞ。
CGIとPerlの区別がつかない人もWEBプログラミング板に行ってください。
(WEBプログラミング板 http://pc11.2ch.net/php/ )

CGIの質問は答えがPerlと全然関係ない話に帰着する場合が多かったりするのでWEBプログラミング板に行って聞いたほうが得ですよ。
このスレでは(CGI以外の)純粋にPerlのみに関係する質問を取り扱っていこうと思います。
スレ違いの質問にはスルーか、速やかな誘導をお願いします。

http://www.perl.org/get.html
● 2007/10/12現在の最新版: 5.8.8
● 2007/10/12現在の開発版: 5.9.5

前スレ
Perlについての質問箱 32箱目
http://pc11.2ch.net/test/read.cgi/tech/1186995713/

リンク集は>>2-3
過去スレは>>4 あたり
2デフォルトの名無しさん:2007/10/16(火) 01:01:34
[プログラミング自体の経験が無い奴はまずココを読め]
Perlプログラミング講座: http://www.site-cooler.com/kwl/perl/

[本]
リャマ: http://www.oreilly.co.jp/books/4873111269/
駱駝: http://www.oreilly.co.jp/books/4873110963/
Effective Perl: http://www.ascii.co.jp/books/detail/4-7561/4-7561-3057-7.html
クックブック: http://www.oreilly.co.jp/books/4873112028/

[オンラインマニュアル] (追加)
最新のドキュメント: http://search.cpan.org/~nwclark/perl-5.8.8/
perl5.8.xのドキュメント(一部): http://www.kt.rim.or.jp/~kbk/perl-5.8/
perl5.005_03 のドキュメント: http://www.kt.rim.or.jp/~kbk/perl5.005/
日本語ドキュメント検索: http://www.cpan.jp/search.cgi
perldoc.jp: http://www.perldoc.jp/
Perldoc.com: http://www.perldoc.com/
3デフォルトの名無しさん:2007/10/16(火) 01:01:40
2
4デフォルトの名無しさん:2007/10/16(火) 01:02:09
5デフォルトの名無しさん:2007/10/16(火) 01:03:10
[過去スレ]
1 ttp://pc.2ch.net/tech/kako/1017/10177/1017736187.html
2 ttp://pc3.2ch.net/tech/kako/1033/10336/1033688230.html
3 ttp://pc2.2ch.net/tech/kako/1041/10412/1041205885.html
4 ttp://pc2.2ch.net/tech/kako/1048/10485/1048519394.html
5 ttp://pc5.2ch.net/tech/kako/1053/10530/1053053082.html
6 ttp://pc5.2ch.net/tech/kako/1060/10606/1060689008.html
7 ttp://pc2.2ch.net/test/read.cgi/tech/1068051036/
8 ttp://pc2.2ch.net/test/read.cgi/tech/1074151549/
9 ttp://pc5.2ch.net/test/read.cgi/tech/1079114157/
10 ttp://pc5.2ch.net/test/read.cgi/tech/1085564875/
11 ttp://pc5.2ch.net/test/read.cgi/tech/1090889189/
12 ttp://pc5.2ch.net/test/read.cgi/tech/1094579428/
13 ttp://pc5.2ch.net/test/read.cgi/tech/1097851764/
14 ttp://pc5.2ch.net/test/read.cgi/tech/1101649274/
15 ttp://pc5.2ch.net/test/read.cgi/tech/1105953092/
16 ttp://pc8.2ch.net/test/read.cgi/tech/1111034732/
17 ttp://pc8.2ch.net/test/read.cgi/tech/1117870308/
18 ttp://pc8.2ch.net/test/read.cgi/tech/1121804136/
19 ttp://pc8.2ch.net/test/read.cgi/tech/1126977805/
20 ttp://pc8.2ch.net/test/read.cgi/tech/1131286411/
21 ttp://pc8.2ch.net/test/read.cgi/tech/1134327348/
22 ttp://pc8.2ch.net/test/read.cgi/tech/1138519327/
23 ttp://pc8.2ch.net/test/read.cgi/tech/1141742901/
24 ttp://pc8.2ch.net/test/read.cgi/tech/1146022352/
25 ttp://pc8.2ch.net/test/read.cgi/tech/1149259409/
26 ttp://pc8.2ch.net/test/read.cgi/tech/1153412251/
27 ttp://pc8.2ch.net/test/read.cgi/tech/1157874614/
28 ttp://pc8.2ch.net/test/read.cgi/tech/1162273941/
29 ttp://pc11.2ch.net/test/read.cgi/tech/1166708139/
30 ttp://pc11.2ch.net/test/read.cgi/tech/1173880452/
6デフォルトの名無しさん:2007/10/16(火) 01:04:11
7デフォルトの名無しさん:2007/10/16(火) 01:06:03
>>6
過去スレ 32 間違えた

32 ttp://pc11.2ch.net/test/read.cgi/tech/1186995713/
8デフォルトの名無しさん:2007/10/16(火) 05:19:04
俺のチンコは左寄り。
9デフォルトの名無しさん:2007/10/16(火) 12:15:22
前スレの「前」の話の人は
上司が2ch見てたらオワタな
10デフォルトの名無しさん:2007/10/16(火) 20:05:06
スレの前って言ったら、ここだろ。
11デフォルトの名無しさん:2007/10/16(火) 22:54:36
で?結局、「前」 はどっちなのさ。はっきり決着をつけてもらおうか。
12デフォルトの名無しさん:2007/10/16(火) 23:25:10
「前」はおやつに入るんですか?
13デフォルトの名無しさん:2007/10/16(火) 23:25:56
男前 の前はどっちなん?
14デフォルトの名無しさん:2007/10/16(火) 23:29:27
つか前スレの981がアホなのが諸悪の根元。
「前ってどっちですか?」なんて聞かれた日にゃ、
俺が上司ならブチ切れ。 使い物になんねから左遷だな。
15デフォルトの名無しさん:2007/10/16(火) 23:34:20
と言いつつ、実はどっちが 「前」 か答えられない >>14 であった。
16デフォルトの名無しさん:2007/10/16(火) 23:40:12
もしや、これのオチは

sub 前 {
print "hoge";
}

っていうサブルーチンの事だったと言うんじゃ・・・
17デフォルトの名無しさん:2007/10/16(火) 23:48:47
アインシュタインの相対性理論を説明するときに必ず出てくるのが「電車」のたとえ。
これにならって、電車について考えてみる。
止まっている電車はどっちが前だかわからない。
だが走ってる電車ならわかる。進行方向が前だ。
これはペチャパイ女にも言える。

プログラムの「前」とは、プログラムの進行方向なのでは無いか?

・・・で、プログラムってどっちに向かって走ってるの?
(とりあえず、ループとか条件分岐とかは考えにいれないでいい)
18デフォルトの名無しさん:2007/10/16(火) 23:58:59
しかし981は、人間の前は「顔のある方」って言い切ってるよ博士
19デフォルトの名無しさん:2007/10/17(水) 00:33:45
人を顔で判断するのは、あまり関心しないな。
20デフォルトの名無しさん:2007/10/17(水) 00:36:26
>>18
顔が両側についている人はどうするんだよ
21デフォルトの名無しさん:2007/10/17(水) 00:45:07
>>20
ハリーポッターのヴォルデモートかいな(笑)
22デフォルトの名無しさん:2007/10/17(水) 00:46:31
画面の方向です。
23デフォルトの名無しさん:2007/10/17(水) 00:57:39
>20
そりゃ今お前が会話しているほうの顔が前だろ
24デフォルトの名無しさん:2007/10/17(水) 02:54:21
いいからそろそろどうでもいい話やめれ。
急に新スレまで行っててビックリだ
25デフォルトの名無しさん:2007/10/17(水) 10:51:13
んじゃ。

5.10っていつ出る予定なん?
5.10に期待することは?

とか聞いてみる。

// とか err って5.10から使えるようになるんだっけ?
26デフォルトの名無しさん:2007/10/17(水) 15:50:55
そんな事はどうでもいいだろ。
このスレにはマジメに質問するヤツはいないのか?
27デフォルトの名無しさん:2007/10/17(水) 16:14:49
ウェブサイトでcgi(bbs)を扱う上で、
perlとPHPのどちらを用いるのが良いと思いますか?
調べてもPHPが楽で軽くて良い、逆にperlは重いからダメだということばかり書いていまして…
28デフォルトの名無しさん:2007/10/17(水) 16:16:08
>>27
>>1
> CGIについての質問は板違いです。WEBプログラミング板でどうぞ。
> CGIとPerlの区別がつかない人もWEBプログラミング板に行ってください。
> (WEBプログラミング板 http://pc11.2ch.net/php/ )
29デフォルトの名無しさん:2007/10/17(水) 16:37:38
進行方向が前なら、
次スレ=前スレってことですか?
30デフォルトの名無しさん:2007/10/17(水) 18:22:49
PHP厨のネガティブキャンペーン必死ですねwwww
31デフォルトの名無しさん:2007/10/17(水) 20:06:48
なんだこれ、俺達に“動け”ってことか
そろそろ言語のひとつでも潰して力見せる時か
しかし、なんでもム板にもちこむなよな
ま、実際何とかしちゃう俺らも俺らだけどw
32デフォルトの名無しさん:2007/10/17(水) 20:40:28
> ま、実際何とかしちゃう俺らも俺らだけどw

どんな抗うつ剤を飲むとそういう狂言を吐けるようになるの?
33デフォルトの名無しさん:2007/10/17(水) 21:30:43
この中にニュー速民居たら手上げろ〜(^o^)ノ
34デフォルトの名無しさん:2007/10/17(水) 21:38:55
何か?
35デフォルトの名無しさん:2007/10/17(水) 23:29:31
前は住民でした
36デフォルトの名無しさん:2007/10/18(木) 02:36:16
Expectモジュールについて質問
Tclの.expファイルをExpectモジュール使ったPerlのファイルに書き換えてるんだけど
TclのputsにあたるものはExpectモジュールでは用意されてないの?
37デフォルトの名無しさん:2007/10/18(木) 13:50:25
つまらんこと聞くな!
38デフォルトの名無しさん:2007/10/19(金) 11:38:04
「つまらんこと」 = >>37に理解できないこと

最近、いちいち質問者につっかかる厨房が徘徊しているようだ。
39デフォルトの名無しさん:2007/10/19(金) 11:56:05
mod_perl な環境で、Perl5.8 の rand() を繰り返すと
同じ数列が発生しちゃうんだけど、やっぱり srand() 必要?
40デフォルトの名無しさん:2007/10/19(金) 14:24:38
まっとうな乱数が欲しいならrand()とか使っちゃダメ
41 ◆TWARamEjuA :2007/10/19(金) 20:29:47 BE:6099078-2BP(6825)
そして真っ当な乱数って云うのがほぼ実現不可能と気が付くのであった。まる♪
42デフォルトの名無しさん:2007/10/19(金) 20:33:03
43デフォルトの名無しさん:2007/10/19(金) 21:59:18
マジレスすると、無理数がまともな乱数。
44デフォルトの名無しさん:2007/10/19(金) 23:52:56
最初だけは疑似乱数で任意の数nを生成
→円周率の小数点以下n桁目の数値を乱数として取得
→以下nを一つずつ増やす

とか?
45デフォルトの名無しさん:2007/10/20(土) 00:53:02
結構少ない個数の観察で以降の出力を予測できるようになるから、
もう一ひねりいりそうだな。
46デフォルトの名無しさん:2007/10/20(土) 02:14:07
その円周率はどこから持ってくるんだ。
47デフォルトの名無しさん:2007/10/20(土) 03:22:45
スーパーπで104万桁を毎回計算させますが
48デフォルトの名無しさん:2007/10/20(土) 03:23:22
↑自分ワールドで何舞い上がってるんだろ
49デフォルトの名無しさん:2007/10/20(土) 09:37:46
マジレス乙
50デフォルトの名無しさん:2007/10/20(土) 12:51:32
51デフォルトの名無しさん:2007/10/20(土) 13:55:32
@ARGV、標準入出力、テキストファイルの中身は全て
プラットフォームのデフォルトのエンコードだと仮定して、
どのプラットフォームでも同じように動作するようにスクリプト書きたい。

コード中にcp932とかハードコードしたくないので
.NETやpythonみたいにstdioのエンコードを取得したりできればいいと思うけど、
どうしたらいい?
52デフォルトの名無しさん:2007/10/20(土) 15:59:53
>>51
> @ARGV、標準入出力、テキストファイルの中身は全て
> プラットフォームのデフォルトのエンコードだと仮定して、

プラットフォームのデフォルトのエンコードが存在しない場合は?
53デフォルトの名無しさん:2007/10/20(土) 16:41:50
>>52
そういう環境は視野に入ってないっす。
ascii扱いでいいんじゃないの。
変なバイト列だったらエラーになればいいと思う。
どちらかというと、クロスプラットフォームよりも、
とにかく日本語版Windows上のアプリとしてちゃんと動き、
なおかつ、cp932をハードコードせずに済ませることの方を重視したいかな。

それとも、
OSのAPIレベルでデフォルトのエンコードなるものを取得する手段が無い場合ってこと?
Unixとかよく分からないので、そのへん分からない。
ターミナルのエンコードとか標準化された手段で取れないんだろうか?
54デフォルトの名無しさん:2007/10/20(土) 17:16:45
>>53
Guess
55デフォルトの名無しさん:2007/10/20(土) 19:11:30
Term::Encoding
56デフォルトの名無しさん:2007/10/20(土) 20:41:55
>>Term::Encoding
どうもありがとう。

何をやるにも標準モジュールだけで足りない言語だなあ。
Perlでそれを言っちゃ駄目ですか?
自分達のリリースしたアプリや、日々の作業で使うスクリプトが
依存してるモジュールの管理ってどうしてるの?
cpanで自分のマシンにインストールするだけなら簡単だけど、
必要なファイルをよりわけて、
アプリのソースと一緒にリポジトリに保存しとかないとやばいよね?
それって簡単にできるんだろうか。
Perlのディストリビューション以外に、
どれだけのファイルを保存する必要があるのか、
ワケわかんなくなると思うんだけど。
57デフォルトの名無しさん:2007/10/20(土) 21:03:05
皆が求める物は既に標準モジュールになっている
どんな言語でも不足分を補うのがライブラリなのに
それを否定されては最初から全部入りの言語を
使ってくださいとしか言い様が無い
単に自分がマイノリティな事に気付いてない
我侭言ってる子供にしか見えないけど
58デフォルトの名無しさん:2007/10/20(土) 21:07:02

            _,,..r'''""~~`''ー-.、
            ,,.r,:-‐'''"""~~`ヽ、:;:;:\
           r"r          ゝ、:;:ヽ
   r‐-、   ,...,, |;;;;|       ,,.-‐-:、 ヾ;:;ゝ
   :i!  i!  |: : i! ヾ| r'"~~` :;: ::;",,-‐‐-  `r'^!
    !  i!.  |  ;| l|  ''"~~   、      i' |
     i! ヽ |  | |    ,.:'"   、ヽ、   !,ノ イェ〜イ
    ゝ  `-!  :| i!  .:;: '~~ー~~'" ゙ヾ : : ::|   宮川達彦 見てる〜?
   r'"~`ヾ、   i! i!   ,,-ェェI二エフフ : : :::ノ~|`T
  ,.ゝ、  r'""`ヽ、i! `:、   ー - '" :: : :/ ,/
  !、  `ヽ、ー、   ヽ‐''"`ヾ、.....,,,,_,,,,.-‐'",..-'"
   | \ i:" )     |   ~`'''ー----''"~
   ヽ `'"     ノ
5956:2007/10/20(土) 21:19:33
>>57
Class::Accessorとか入って無いじゃん。
・・・いや、そういうことが言いたいんじゃなくて、
どうやって管理するの?ってのがレスの要点なんだけど。
60デフォルトの名無しさん:2007/10/20(土) 21:31:01
>>59
全部のマシンに入れる
61デフォルトの名無しさん:2007/10/20(土) 21:33:52
スクリプトで全部自動でインスコすればいいやん
62デフォルトの名無しさん:2007/10/20(土) 21:34:30
モジュールを管理統制する
モジュールがCPANにある。
6356:2007/10/20(土) 23:24:35
>>61
そのインスコされる全ファイルの把握と抽出の仕方がわからない。
ネットからじゃなくて、ローカルに保存したバージョンをインストールする方法も分からない。

>>62
なんてモジュールか教えて。ググっても分かんない。
そういうの、分厚いPerl本読んでも全然書いてないし。
64デフォルトの名無しさん:2007/10/21(日) 00:11:38

                | ̄``''- 、
                |      `゙''ー- 、  ________
                |    ,. -‐ ''´ ̄ ̄`ヽ、_        /
                |, - '´ ̄              `ヽ、     /
              /               `ヽ、ヽ   /
             _/                    ヽヽ/
           / / /   /  /  /            ヽハ
          く  / /!   |   〃 _/__ l|   | |   |  |  | | ||ヽ
           \l// / |  /|'´ ∧  ||   | |ー、||  |  | l | ヽ
            /ハ/ |  | ヽ/ ヽ | ヽ  | || /|ヽ/!  |/ | ヽ
            / |  ||ヽ { ,r===、   \| _!V |// //  .!   |
            | ||   |l |ヽ!'´ ̄`゙   ,  ==ミ、 /イ川  |─┘
            | ハ||  || | """ ┌---┐  `  / //  |
            V !ヽ ト! ヽ、    |     !    / //| /
               ヽ! \ハ` 、 ヽ、__ノ    ,.イ/ // | /
    ┌/)/)/)/)/)/)/)/)/)/)lー/ ` ー‐┬ '´ レ//l/ |/
    |(/(/(/(/(/(/(/(/(/(/│||      |\  〃
  r'´ ̄ヽ.              | | ト    /    \
  /  ̄`ア             | | |  ⌒/     入
  〉  ̄二) 知ってるが    | | |  /     // ヽ
 〈!   ,. -'                | | ヽ∠-----', '´    ',
  | \| |   .お前の態度が   | |<二Z二 ̄  /     ',
  |   | |               _r'---|  [ ``ヽ、      ',
  |   | |   気に入らない >-、__    [    ヽ      !
  \.| l.              ヽ、      [     ヽ    |
    ヽ|              \    r'     ヽ、    |
65デフォルトの名無しさん:2007/10/21(日) 10:16:47
SJISまじりの文字列を1バイトずつ先頭から整数として
取り出したいのですが、どうすればいいのでしょうか?

ActivePerl(漢字にちゃんと対応してない環境)です。

よろしくお願い致します。
66デフォルトの名無しさん:2007/10/21(日) 13:11:06
67デフォルトの名無しさん:2007/10/21(日) 13:38:26
>>66
ありがとうございます
68デフォルトの名無しさん:2007/10/21(日) 14:40:18
親子プロセス間のシグナルの送り方についての質問です
cygwin で動いたけどActivePerl 5.8.8だとだめでした
'a'をキーインするとプログラムそのものが終了します
これってActivePerlの仕様でしょうか?

$SIG{ALRM} = \&handler;
$ppid = $$;
##alarm(5);
if( $childpid = fork() ){
 #親プロセス
 #-- 受信
 print "親 $$ \n";
 while(1){
  sleep;
  print "AHAHA\n";
 }
} else {
 #子プロセス
 print "子 \n";
 print $$,"\n";
 while(<STDIN>){
  if( /a/ ){
   $x =kill('ALRM',$ppid);
#  exit;
  }
 }
}

sub handler{
 print @_[0], "\n";
}
69デフォルトの名無しさん:2007/10/21(日) 21:15:23
>>68
実装はそうなっているけど、仕様なのかな?
親から子へシグナルを送る場合には(killが)使えるけど、かなり不便。

子プロセス(forkエミュレーションで生成した別スレッド)には PostThreadMessage を使って
殆どのシグナルを送れるけど、それ以外の相手には INT,BREAK 程度しか送れない。
おまけに、それ以外は全てKILL扱い( TerminateProcess を使う)になっている。
(そして、5.6との互換性の為だと注釈が付いている)
Cが読めるなら、詳細は(Perlソースに含まれる)win32.c中の win32_kill 読んだ方が早いかと。
70デフォルトの名無しさん:2007/10/21(日) 21:39:16
foreach をつかって配列@xを(0..255)まで作り、
その要素として$x[0]にa1,$x[1]にa2,・・・$x[255]にa256を代入する文がわかりません。

どなたか教えてください。
71デフォルトの名無しさん:2007/10/21(日) 21:41:48
map { $x[$_] = "a" . ($_ + 1) } 0..255;
72デフォルトの名無しさん:2007/10/21(日) 21:45:31

>>71さん
foreach をつかって>>70のことを全部やる方法はわかりますか?


73デフォルトの名無しさん:2007/10/21(日) 21:48:02
戻り値を受け取らないケースではforを使えっていつも婆ちゃんが言ってるだろ
74デフォルトの名無しさん:2007/10/21(日) 21:49:05
$x[$_] = "a" . ($_ + 1) for 0..255;
75デフォルトの名無しさん:2007/10/21(日) 21:52:09
なんか大学の課題には

>foreach 文を実行する前に,@x = (); を実行して長さ0の配列 @x を作ってください.
>そしてforeach 文を実行することで,$x[0] から $x[255] までの要素(それぞれ "a1" から "a256" までの値をもつ)を配列 @x に追加していってください.

とか、書いてあるんですけどどうすればよいのでしょうか?
76デフォルトの名無しさん:2007/10/21(日) 21:53:22
お前ら、鬼のようなサンプルコードで返事するとは・・・
77デフォルトの名無しさん:2007/10/21(日) 21:56:35
push(@x, "a$_") foreach 1..256;
78デフォルトの名無しさん:2007/10/21(日) 21:56:55
>>75
友達に聞けよ。
ここで聞くのは、小学生がお習字の宿題を親にやらせるようなもん。
教員が暇なら呼び出しを食らうぞ。
79デフォルトの名無しさん:2007/10/21(日) 22:14:14
>>73
ばあちゃんの知識は古すぎるよ。
いまはvoidコンテキストのmapはリストを作らないようになってるから大丈夫だよ。
80デフォルトの名無しさん:2007/10/21(日) 22:56:56
いいなぁ
オレの実のばあちゃん以外にもう一人、そんなばあちゃんが欲しい
81デフォルトの名無しさん:2007/10/21(日) 23:05:34
for( px = x, pa = a+1; px != x+256;i++, *px++ = *pa++ );
82デフォルトの名無しさん:2007/10/21(日) 23:06:33
まちごーた
for( px = x, pa = a+1; px != x+256; *px++ = *pa++ );
83デフォルトの名無しさん:2007/10/21(日) 23:27:10
Can't modify constant item in scalar assignment at -e line 1, near "x,"
syntax error at -e line 1, near ");"
84デフォルトの名無しさん:2007/10/21(日) 23:31:11
>>79
それは foreach を使う方がしっくりくる場面でさえ map で粋がっちゃう
微笑ましい子らの尻拭いを perl がやってくれるようになっただけだと
認識してるんだが、どうか。
85デフォルトの名無しさん:2007/10/21(日) 23:32:27
じゃあ、俺はgrepつかってやんよ!
86デフォルトの名無しさん:2007/10/21(日) 23:51:18
@x = map { "a$_" } 1..256;
87デフォルトの名無しさん:2007/10/21(日) 23:53:39
@x = ("a001".."a256");
88デフォルトの名無しさん:2007/10/22(月) 03:35:11
@temp = map { "a$_" } 1..256;
push(@x, $temp[$_]) foreach 0..255;
89デフォルトの名無しさん:2007/10/22(月) 12:30:01
foreachごときで粋がる微笑ましい子が何か言ってるぞ
90デフォルトの名無しさん:2007/10/22(月) 16:53:34
map大好きっ子の的外れな反撃きたな
91デフォルトの名無しさん:2007/10/22(月) 17:20:32
>>89
涙拭けよ!
92デフォルトの名無しさん:2007/10/22(月) 17:20:33
PBP!PBP!
93デフォルトの名無しさん:2007/10/22(月) 17:25:17
foreach厨自尊心を傷付けられて必死wwwwwwwwwwwwwwwwwwwwwwwww
94デフォルトの名無しさん:2007/10/22(月) 17:42:00
いやいや、>>89>>93も根本的にハズしてるよ。
この件におけるmapとforeachの対称性は、「それを使って粋がるか否か」「その使用法に変な自尊心を持つか否か」
なのだから、mapを多用する子が反撃したかったら、自分の言われたことを返すのではなく、
逆のことを言わなくちゃいけないんだよ。「粋がる気が無いforeach厨」とかね。

現状では、黒人が肌の色を差別されて、白人に向かって「お前の肌真っ黒w」って返してるようなものだよ。
そこは属性が逆なのだから、逆のことを言わなくちゃ反撃にならないでしょ?w
95デフォルトの名無しさん:2007/10/22(月) 17:52:42
なにこのスレ……
96デフォルトの名無しさん:2007/10/22(月) 17:54:11
お前も相当根本的に的を外してる
そして例え話を慢心で語る奴も大抵的を外してる
97デフォルトの名無しさん:2007/10/22(月) 17:56:37
>>96
オウム返ししたかったら、なぜそうなのか、根拠を添えないとまるで説得力が無いよ。
どこがどういう風に的を外しているのか、ではどう書くべきだったのか。
そういうことを何も思いつかないまま、感情的にオウム返ししただけに見えちゃうよ。

あと、2行目のような怪しげな「統計」でやり返すことほど、自分を貶めるものもない。
「そういう傾向がこの世にあって欲しい」だけでは?
98デフォルトの名無しさん:2007/10/22(月) 17:59:09
もっとはっきり言ってやったら?

map で粋がる奴はいても foreach で粋がる奴はいない
そんなこともわからずオウム返しに終始する、やっぱりmap厨は馬鹿丸出し

ってw
99デフォルトの名無しさん:2007/10/22(月) 18:01:47
>>94
何故言い返すのに逆の事を言わなくてはならないの?
逆のことを言えば優位になるとでも思ってるのか?
そして例え話が逸れ過ぎてて話にならない。
ただの厨房同士の喧嘩にマジレスしようとして
訳の分からない妄言を吐いてる人間にしか見えん。
100デフォルトの名無しさん:2007/10/22(月) 18:03:43
そりゃ foreach は初心者が使う物だから、
そんなモノを使って粋がる奴は恥ずかしいさ。
101デフォルトの名無しさん:2007/10/22(月) 18:04:20
そもそも、「無理にmapを使う奴」を皮肉っただけで(map関数を皮肉っているわけではない)
反撃に乗り出すってのが、なんか薄ら寒いよね。普段どんなコード書いてるのか。
102デフォルトの名無しさん:2007/10/22(月) 18:07:03
>>99
ある性質xを持っていることを皮肉られた、ということは、
言っている相手は、その性質xを持っていないんだよ。

その性質xというのが、ここでは「粋がって(イケてる書き方だと思って)多用する」という行為。
でも、foreachっていうのは、そういう心理で選ぶものじゃないんだよね。
だから、「粋がる」という表現をオウム返ししても、まったく成立しないんだよ。
103デフォルトの名無しさん:2007/10/22(月) 18:08:44
どう見ても例え話が間違ってる。君の黒人と白人の例で行くと
『お前の肌真っ白(笑)』と黒人が言ってるとしっくり来る。
どちらにせよ肌の色程度で言い争いしてるのはレベルが
知れてるって事だから、foreach厨とmap厨はレベルが低いって事になる。
104デフォルトの名無しさん:2007/10/22(月) 18:10:36
>>103
急にレベルの話に移行する意味がわからない。
言っていることが、状況に即しているかどうかという話しかしていないのに。

map厨の読解力の無いオウム返しをうやむやにするための、両成敗ネタにしか見えない。
105デフォルトの名無しさん:2007/10/22(月) 18:11:35
>>103
なんでレベル?
106デフォルトの名無しさん:2007/10/22(月) 18:12:43
>>102
その粋がるってのが仮定だから話が違うよ。
107デフォルトの名無しさん:2007/10/22(月) 18:12:46
>>89の尻拭いも大変だな。

本人でもないのに尻拭いする意味がわからないけど。
108デフォルトの名無しさん:2007/10/22(月) 18:15:13
foreach厨の文章力の無さは異常
109デフォルトの名無しさん:2007/10/22(月) 18:15:22
>>106
すまん、日本語としてまるで意味がわからない。

もしかして、
「mapを使うのはクールなやり方とされていて、慣れない奴は意味もなく多用してしまう罠」
というPerl界隈の「定着した認識」に対して、今さら
「そうだという証拠はあるのかデータはいつ取ったんだ統計を提示しろさあ早く」
って詰め寄る所存?
110デフォルトの名無しさん:2007/10/22(月) 18:16:39
>>109
俺もお前の日本語の意味が分からない。
111デフォルトの名無しさん:2007/10/22(月) 18:18:30
しかしこのスレ伸びが早いな
112デフォルトの名無しさん:2007/10/22(月) 18:20:14
>>104 >>105
だってこれって『馬鹿って言った奴がバーカ』
と同レベルの喧嘩だろ。真面目に考察するだけ無駄。
このレベルでなら君の言う"反撃"も別に変ではないと思うが。
113デフォルトの名無しさん:2007/10/22(月) 18:20:15
話が途切れるような物言いをあえて選んできてるなmap厨
114デフォルトの名無しさん:2007/10/22(月) 18:22:03
>>112
ああ、>>89がそういうレベルで噛み付いてただけで、
それ以上のことを何も考えていなかったのなら、このまま説明や修正無しでもすべての筋は通るね。

じゃあ、そういうことで納得するか。
115デフォルトの名無しさん:2007/10/22(月) 18:27:48
つうか、普通for使うから、foreach使うのってテキストで勉強した初心者だけでじゃね?
116デフォルトの名無しさん:2007/10/22(月) 18:29:01
>>114
>>84 も含めて余計な煽りレスだろ。
根拠のない決め付けを始めたのはこいつで、
後に続くレスなんて容易に想像出来たはずだ。
117デフォルトの名無しさん:2007/10/22(月) 18:29:56
for厨うぜえwwwwww
118デフォルトの名無しさん:2007/10/22(月) 18:33:44
foreach厨うえぇ(嘔吐
119デフォルトの名無しさん:2007/10/22(月) 18:35:56
原点に戻って、$x[0]〜$x[255]まで"a1"〜"a256"を入れるという
命題について、foreach厨はどんな書き方すんの?
明らかに @x = map { "a$_" } 1..256; の方が単純明快だろ。
120 ◆TWARamEjuA :2007/10/22(月) 19:07:26
(´-`).。oO(WebProg板かとオモタ。。。)
121デフォルトの名無しさん:2007/10/22(月) 19:11:25
>>120
それマジでWebProgに対する宣戦布告?
本気ならすぐ謝れ。謝罪しないのなら
WebProg総力を挙げてお前を潰すが。
122デフォルトの名無しさん:2007/10/22(月) 19:14:38
やっぱ統合した方がいいな。WebProgの方に。
123デフォルトの名無しさん:2007/10/22(月) 20:24:42
forでもmapでもどっちでも良いじゃん。
お前らPerlの合言葉を忘れたのか。
124デフォルトの名無しさん:2007/10/22(月) 20:26:23
どっちでもいいとかどっちかにしろとか、どっちでもいいじゃん。
125デフォルトの名無しさん:2007/10/22(月) 20:39:39
大学の教授、もう帰っちゃったぞ
126デフォルトの名無しさん:2007/10/22(月) 20:41:37
>>119
>>75 の文章をそのまま Perl に翻訳すると
my @x = ();
foreach (1..256) { push @x, "a$_" }

foreach"文"ではなく修飾子を使っていいなら
my @x = ();
push @x, "a$_" for 1..256;

課題の要求仕様から外れていいなら
my @x = map "a$_", 1..256;
が最も素直なコード。

>>123
http://web.archive.org/web/20061011230734/www.jin.gr.jp/~nahi/d/990223-comp.html
文字コードは JIS (ISO-2022-JP)。
127デフォルトの名無しさん:2007/10/22(月) 22:14:54
for(0..255){
$i = $_+1;
print "a$iと入力して下さいm(_ _)m\n";
$x[$_]=<IN>;
}
128デフォルトの名無しさん:2007/10/23(火) 08:37:11
<IN> ?
129デフォルトの名無しさん:2007/10/23(火) 09:58:28
>>84が余計なことを言ったせいだろ。
たぶん、>>84もmapに一度は嵌っている。
perlerの思春期みたいなもんだ。
130デフォルトの名無しさん:2007/10/23(火) 12:12:39
>>129
ということにしておいてやるから、トイレでウンコ拭いてこい。
131デフォルトの名無しさん:2007/10/23(火) 14:24:08
perlstyleさえも守れないクソの溜まり場はここですか?
132デフォルトの名無しさん:2007/10/23(火) 14:28:41
まだやってんのかよw
133デフォルトの名無しさん:2007/10/23(火) 14:51:48
foreach厨涙目で冷静な振りをするもバレバレで脱糞wwwwwwwwwwwww
134デフォルトの名無しさん:2007/10/23(火) 14:52:43
婆ちゃんが草葉の陰で泣いてるよ
135デフォルトの名無しさん:2007/10/23(火) 15:17:34
で、foreach厨 ってなんやねん
136デフォルトの名無しさん:2007/10/23(火) 15:36:11
じゃあ名前を変えて foreach病 で
中二病みたいな感じでいいじゃん
137デフォルトの名無しさん:2007/10/23(火) 16:27:14
mapのほうが使うの難しいと思うけど
煽ってるのはmap厨だな
vipでやれ
138デフォルトの名無しさん:2007/10/23(火) 16:48:26
foreach厨こそVIPで死ね
139デフォルトの名無しさん:2007/10/23(火) 17:40:36
もうおまえら foreach も map も使うな。
140デフォルトの名無しさん:2007/10/23(火) 18:03:02
while厨必死wwwww
141デフォルトの名無しさん:2007/10/23(火) 19:27:23
goto厨死亡wwww
142デフォルトの名無しさん:2007/10/23(火) 22:27:35
レベル低過ぎワロタwwwww
143デフォルトの名無しさん:2007/10/23(火) 22:41:57
で、「前」ってどっち?
144デフォルトの名無しさん:2007/10/23(火) 23:44:10
ティムティムがいつも向いてる方向
145デフォルトの名無しさん:2007/10/23(火) 23:52:27
オレのはいつも左に向いているが。
146デフォルトの名無しさん:2007/10/24(水) 00:07:20
open(FILE, "> ".$file) || die;
foreach my $key ( keys %{$data} ){
    print FILE join("\t", $key, $data->{$key}, "\n");
}
close FILE;



foreach my $key ( keys %{$data} ){
    $temp .= join("\t", $key, $data->{$key}, "\n");
}
open(FILE, "> ".$file) || die;
print FILE $temp;
close FILE;

にするとHDDにかかる負荷が減ったりしますか?
それとも余分にメモリ食うだけでしょうか
147デフォルトの名無しさん:2007/10/24(水) 00:11:26
後者
148146:2007/10/24(水) 00:35:48
>>147
ありがとうございます
149デフォルトの名無しさん:2007/10/24(水) 00:43:30
$|=1 とかやってなければな。
150デフォルトの名無しさん:2007/10/24(水) 00:58:03
>>146
前者
151146:2007/10/24(水) 01:00:55
>>149
なるほど把握しました。
仕組みまで教えて頂いて感謝です。
そうなると、読み出しの場合はどうなるんでしょうか?

open(FILE, '< '.$file) || die;
while(<FILE>){
    (my $key,$_)=split(/\t/);
    $data->{$key} = $_;
}
close



open(FILE, '< '.$file) || die;
@temp = <FILE>;
close
while(@temp){
    (my $key,$_)=split(/\t/);
    $data->{$key} = $_;
}

では、まとめて読み込んでおいた方がHDDにかかる負荷が減ったりしますか?
それともメモリ食うだけでしょうか

>150
どちらが正しいのか判断が・・・
152デフォルトの名無しさん:2007/10/24(水) 01:23:48
>>151
おれは、入力ファイルが1GB越えないなら、
Slurpすることにしてる。
153デフォルトの名無しさん:2007/10/24(水) 01:29:29
while(<STDIN>){
  print qq{1:$_};
  while(<STDIN>){
    print qq{2:$_};
    last if $_ eq qq{\n};
  }
  print qq{3:$_\n};
}
をPerl 5.8.8で実行して内側のループを改行のみの入力で抜けた後の3:の値が
1:の時となぜか異なるのですが、$_のスコープみたいなものはどうなっちゃってるんでしょうか?
154デフォルトの名無しさん:2007/10/24(水) 01:38:25
>>153
異なって当然ですが
155146:2007/10/24(水) 01:40:51
>>152
ありがとうございます。
非常に参考になりました。
156153:2007/10/24(水) 01:48:59
自己解決しました。
157デフォルトの名無しさん:2007/10/24(水) 05:47:50
改行($val =~ \x0D\x0A\、x0D、\x0A)が二回以上連続した場合、
その改行を</p>\n<p>に置換したいのですが、
どのようなコードを書くのがもっとも軽い処理になるでしょうか?
158デフォルトの名無しさん:2007/10/24(水) 06:06:29
すみません。
>>157の</p>\n<p>というのは、
</p>
<p>
というつもりで書きました。
159デフォルトの名無しさん:2007/10/24(水) 09:21:47
>>157-158
> 改行($val =~ \x0D\x0A、\x0D、\x0A)
その表現だと \x0D\x0A を1つの改行と考えるのか
2つの改行 (\x0D と \x0A) と考えるのかで答が変わる。
http://www.din.or.jp/~ohzaki/perl.htm#CRLF_2BR
160デフォルトの名無しさん:2007/10/24(水) 09:25:28
\x0D\x0Aを一つの改行と考えています。
161デフォルトの名無しさん:2007/10/24(水) 09:40:28
>>159
そのサイトが非常に参考になりました。

$val =~ s/(\x0D\x0A){2,}/<\/p><p>/g;
$val =~ s/(\x0D){2,}/<\/p><p>/g;
$val =~ s/(\x0A){2,}/<\/p><p>/g;

とすることで、連続している改行を
</p><p>
へと置換することまでは完了しました。
しかし、
</p>
<p>
のように改行を含んだ文字列への置換方法がよく分かっていない状況です。
そのあたりについて教えてください。
よろしくお願いします。
(なお、連続した改行でなく、単一の改行の場合は、<br />へと置換する処理を上のコードの下に書いているので、
\nとして改行すると置換されてしまってうまくいきませんでした)
162デフォルトの名無しさん:2007/10/24(水) 14:13:12
16行目の++$n;で
Use of uninitialized value in stringというエラーがでるのですが、
$n = 0;やundef $n;を入れて初期化してもエラーが出ます。
なぜですか?
(CSVで同じ行を見るためのスクリプトです)


#!/usr/bin/perl -w

undef $n;

open (MEDIACSV,"media_perl.csv");
@mediacsv = <MEDIACSV>;

@sortedmediacsv = sort(@mediacsv);

while ($sortedmediacsv[$n] ne undef) {
if ($sortedmediacsv[$n] eq $sortedmediacsv[$n+1]) {
print "$sortedmediacsv[$n]";
print "$sortedmediacsv[$n+1]";
};
++$n;
};

close (MEDIACSV);
163デフォルトの名無しさん:2007/10/24(水) 14:14:12
難しく考えすぎ。

$val =~ s/(\x0D\x0A){2,}/うんこ<\/p>うんこ<p>うんこ/g;
$val =~ s/(\x0D){2,}/うんこ<\/p>うんこ<p>うんこ/g;
$val =~ s/(\x0A){2,}/うんこ<\/p>うんこ<p>うんこ/g;
$val =~ s/\n/<br \/>うんこ/g;
$val =~ s/うんこ/\n/g;

でいいんじゃないの?
164デフォルトの名無しさん:2007/10/24(水) 14:24:38
>>162
undef $n; してりゃエラー出るだろ。これは初期化とは言わない。

while ($sortedmediacsv[$n] ne undef) {
これも。undef と比較してどうする。
そもそもキミが何をしたいのか意図が伝わらない。

細かいことを言えば、if {} のうしろの ; もいらない。
基本を理解していない証拠だな。

で、↓これならどうかな。
#!/usr/bin/perl -w

open (MEDIACSV,"media_perl.csv");
@mediacsv = <MEDIACSV>;

@sortedmediacsv = sort(@mediacsv);

for ($n = 0; $n < $#sortedmediacsv; $n++) {
 if ($sortedmediacsv[$n] eq $sortedmediacsv[$n+1]) {
  print $sortedmediacsv[$n];
  print $sortedmediacsv[$n+1];
 }
}
165デフォルトの名無しさん:2007/10/24(水) 14:42:16
>>163
いや、それはあまりにもひどいだろ。
いや、うんこがひどいんじゃなく、無駄にうんこを付け足そうって言う考え方がさ。
いや、うんこもひどいが。
166デフォルトの名無しさん:2007/10/24(水) 14:46:41
あー、ついでだ。考え方も示しておくか。愚直にやるなら、こうだろ。
・まず、CRLFを\nに統一する
・段落を抽出する
・段落をpタグで挟む
・改行をbrタグに置換する
・段落末尾に\nをくっつけて結合する
167デフォルトの名無しさん:2007/10/24(水) 14:50:41
ついでに、上を馬鹿正直に書いてみた。動かなかったらスマソ
$val =~ s/\x0d\x0a|\x0d|\x0a/\n/g;
@lines = split /\n\n+/, $val;
@lines = map { '<p>' . $_ . '</p>' } @lines;
@lines = map { s/\n/<br \/>/g } @lines;
$result = join '', map { $_ . "\n" } @lines;

多分、これ一文で書けるよ
168デフォルトの名無しさん:2007/10/24(水) 15:13:15
>>164
助かりました。ありがとうございます。
169デフォルトの名無しさん:2007/10/24(水) 16:25:50
$x = $y if ! $x;

これってどう解釈すればいいんでしょうか・・・

$yが真だったら$yが代入される
$yが非だったら$xが代入される(値は変わらない)

ってことで大丈夫ですか?
170デフォルトの名無しさん:2007/10/24(水) 16:29:36
fedora7にperl5.005_03を入れたいのですがうまくいきません。
どなたか参考になるサイトもしくは手順等をお教えいただけないでしょうか。

宜しくお願いします。
171デフォルトの名無しさん:2007/10/24(水) 16:45:24
172デフォルトの名無しさん:2007/10/24(水) 16:47:18
>>169
$xが偽だったら$xに$yが代入される
$xが真だったらなにも行われない。
173デフォルトの名無しさん:2007/10/24(水) 16:50:23
174デフォルトの名無しさん:2007/10/24(水) 18:27:10
PerlってなんでPHPと比べて劣ってるの?
175デフォルトの名無しさん:2007/10/24(水) 18:33:25
またお前か
176デフォルトの名無しさん:2007/10/24(水) 19:24:18
またお前か
知ってるか、PHPって最初はperlで動いてたんだぜ
177デフォルトの名無しさん:2007/10/24(水) 19:38:35
でっていう
178デフォルトの名無しさん:2007/10/24(水) 20:31:44
>>163, >>166-167
そういう発想がありませんでした。
ありがとうございます。
無事に目的を果たすことができました。
179デフォルトの名無しさん:2007/10/24(水) 21:44:16
嫌韓厨死ね
180デフォルトの名無しさん:2007/10/25(木) 14:47:52
変数に固定のデータを読み込む方法として、
プログラム内で
$data = '1234567890...';
とやるのと、普通にファイルから読み込むのとではどちらが効率が良いでしょうか?

前者の場合はデータの分だけコードが長くなるからメモリの効率悪くなったりするんでしょうか?
181デフォルトの名無しさん:2007/10/25(木) 14:58:50
>>180
埋め込み
182デフォルトの名無しさん:2007/10/25(木) 15:11:29
>>181
プログラム内にデータを埋め込む方が効率が良いということですか。
ありがとうございます。
183デフォルトの名無しさん:2007/10/25(木) 16:34:45
ちょw
184デフォルトの名無しさん:2007/10/25(木) 16:54:01
失われた年金データ5000万件も、
プログラムの中に埋め込んでおけば
効率的に照合処理できるに決まってる。
185デフォルトの名無しさん:2007/10/25(木) 21:24:26
そのスクリプトでしか利用しない値ならどうでもいいが、
別のスクリプトでも利用する値なら置くべき場所に置いとく
186デフォルトの名無しさん:2007/10/25(木) 21:41:13
データ埋め込んだコードをモジュール化しておけばおk
187デフォルトの名無しさん:2007/10/25(木) 21:51:29
__DATA__
188デフォルトの名無しさん:2007/10/25(木) 22:25:09
つーかさ。データがいーかげんなデータベースを整理するのって、
どーんとプログラム作りました→動かしました
じゃなくて、perlでプログラム作りながら、データ見て、
またプログラムの手直し、データの改修を逐次的に処理していかないと。
戻り作業の繰り返しで話が前に進まないんだがな。
舛添の会見見ててこいつなんもわかっちゃねーなと思うのって俺だけか?
189デフォルトの名無しさん:2007/10/25(木) 22:40:34
>>188
つーかさ、まずは己を知ることだと思うんだよ。
データを代名詞的に多用してるその文章見ただけでも、おまえ人並み以下だよ。
190デフォルトの名無しさん:2007/10/25(木) 22:47:13
検収
191デフォルトの名無しさん:2007/10/25(木) 22:57:37
>>188
どこにでもいるお馬鹿な客の一人。今さら言うまでもない。
192 ◆TWARamEjuA :2007/10/25(木) 23:27:08
おヴァカな客であっても、客をその気にさせるのがプロとしての生業♪
193デフォルトの名無しさん:2007/10/25(木) 23:40:45
>>192
>客をその気にさせる

頭が悪いやつだな。
社会保険庁のトラブルは、客にいやなこと(「業務フロー上、将来禍根を残しますよ」)を
はっきり言わなかったのが原因だろ。現にトラブルがプログラマのせいにされている。
「その気にさせる」じゃまずい場合の典型事例だろうが。

社保庁システムのプログラマ(どうせコボラ)には、あまり親近感はないがね。
194デフォルトの名無しさん:2007/10/25(木) 23:55:54
年金とか社会保険庁の話題はもういい
Perlと全くかんけーねーし
195デフォルトの名無しさん:2007/10/26(金) 00:20:04
社保庁もCPAN使えばいいのにな
196デフォルトの名無しさん:2007/10/26(金) 00:56:24
ほんとは年金照合なんて正規表現つかえばイッパツで出来るんだが
それだと毎年800億円もの受注が受けられない。
だからわざわざ回りくどい方法でシステムつくって
人月稼ぎしているんだよ。
197デフォルトの名無しさん:2007/10/26(金) 01:16:50



198デフォルトの名無しさん:2007/10/28(日) 15:59:03
【CGI名】 Joyful2ch-Me (060604)
【配布元URL.】 http://www.supra.cx/joyful2chMe/index.html
【設置サーバ】 ロリポップ

変数を追加したくて※Aを追加したのですが、文字化けしてしまいます。
どういった原因がかんがえられるのでしょうか?

# ライブラリ取込
require './jcodeg.pl';
require './cgi-lib.pl';
require './bbs-lib.pl';
require './config.cgi';
            ←ここにrequire .'./.'./○○.cgi';を追加したいのですが。(※A.)

※Aを追加せずに、改行を1つだけ加えてアップしても、文字化けします。
ちなみに、PC用の方は問題ないのですが、ケータイ用だけが文字化けします。
配布者の掲示板も機能してないみたいなので、
原因分かる方居られましたら、ヨロシクお願いします。
199デフォルトの名無しさん:2007/10/28(日) 16:10:33
何故かずれてるorz

※Aは「require '../../○○.cgi';」の間違いです
200デフォルトの名無しさん:2007/10/28(日) 16:11:58
>>1
201デフォルトの名無しさん:2007/10/28(日) 16:16:24
すみません、他で聞いてきますorz
202デフォルトの名無しさん:2007/10/28(日) 16:22:35
プログラミングPerl第3版のp264にあるmygrepのコードについてなんですが
push(@result, $_) if &$coderef;
の&$coderefはどういう意味なんでしょうか?
配列の各要素に対して、真か偽を返す関数だと思うんですが、
引数が渡されずに関数が呼び出されているように見えるんですが・・・
203デフォルトの名無しさん:2007/10/28(日) 16:26:42
>>973
おつ〜

埋めていくか
204デフォルトの名無しさん:2007/10/28(日) 16:33:49
あああwみすw
205デフォルトの名無しさん:2007/10/28(日) 17:56:53
>>202
本物の grep でも $_ にリストの各要素が入ってくるじゃないか。
例えば my @result = mygrep { /foo/ } 'foo', 'bar', 'foobar'; なら

sub mygrep (&@) {
  my $coderef = shift; # sub { /foo/ }
  my @result;
  foreach $_ (@_) { # ('foo', 'bar', 'foobar')
    push(@result, $_) if &$coderef; # if $_ =~ /foo/
  }
  @result; # ('foo', 'foobar')
}
206202:2007/10/28(日) 18:57:49
うーん。
if &$coderef;
が、どうして
# if $_ =~ /foo/
と解釈されるのかがよくわからないですorz
括弧をつけずに関数を呼び出すと@_が引数としてわたされるとしても
その内容にアクセスするには$_[0]と書かないといけないですよね。
でも実際には$_とfooがチェックされてるわけで、この$_の値が
どっからきたのかがわからないんです。
207デフォルトの名無しさん:2007/10/28(日) 19:24:26
わからんなら無理して分かる必要は無いよ。
自分が分かるように書けばよろし。
誰か別人が書いたコードを無理やりメンテさせられるのなら仕方ないが。
そんときは、自分でわかるように書き換えるな。俺なら。
208デフォルトの名無しさん:2007/10/28(日) 20:06:50
>>206
> foreach $_ (@_) {

この $_ は foreach ブロック内に局所化 (local) されてはいるけど
グローバル変数なんだからそのまま &$coderef 内でも参照できる。

$_ = 'quux';
my $coderef = sub { print ucfirst };
$coderef->() for qw(foo bar baz); # FooBarBaz
$coderef->(); # Quux
209デフォルトの名無しさん:2007/10/30(火) 03:47:57
alarmの多重化ってできませんか?
use threadsを使って複数のスレッドを起動させているのですが、
そのスレッド毎にタイムアウト処理を作りたいのですが、うまくいきません。
210デフォルトの名無しさん:2007/10/30(火) 04:39:40
>>209
作りなおして全部POEにぶちこんだ方が良い悪寒
211至急:2007/10/31(水) 18:53:18
CGIを自宅出張でサポートしてくれる方募集します。
CGIに詳しく都内に来れる方であれば可能
詳しい人からすればそこまで難しくないと思われます。
一日日払い即金である程度払います。。
詳細はメール下さい。
212デフォルトの名無しさん:2007/10/31(水) 19:24:42
>>211
>>1
> CGIとPerlの区別がつかない人もWEBプログラミング板に行ってください。
> (WEBプログラミング板 http://pc11.2ch.net/php/ )
213デフォルトの名無しさん:2007/10/31(水) 19:35:23
WebProgにも書き込みしてある件
214デフォルトの名無しさん:2007/11/01(木) 02:14:40
>>210
情報ありがとうございます
POEを使う方向で考えてみます
215デフォルトの名無しさん:2007/11/01(木) 07:32:34
> 作りなおして全部POEにぶちこんだ方が良い悪寒

POE を作り直してくれないか。
216デフォルトの名無しさん:2007/11/01(木) 15:39:13
&foo;

sub foo{
my @l, %h;
print '"'.$h{'ex'}.'"=>';
$h{'ex'} = &bar(1,2,\%h);
print '"'.$h{'ex'}.'"=>';
$h{'ex'} .= &bar(1,2,\%article_replacements);
print '"'.$h{'ex'}.'"';
}

sub bar{
my $a = $_[0], $b = $_[1], %h = %{$_[2]};
return 'A';
}

というプログラムについてなのですが、fooの1行目が
my %h, @l;だと""=>"A"=>"AA"と表示され、
my @l, %h;だと""=>"A"=>""と表示されます。

変数の順番を入れ替えただけで結果が変わってしまうのは
なぜなのでしょうか?
Perlのバージョンはv5.8.8 built for MSWin32-x86-multi-threadです。
217216:2007/11/01(木) 15:42:38
動作に影響は及びませんが、fooの3行目と5行目は
$h{'ex'} = &bar(1,2,\%h2);です。すいません。
218216:2007/11/01(木) 15:43:42
sage忘れた上に$h{'ex'} .= &bar(1,2,\%h2);です。
本当にすみません…。
219デフォルトの名無しさん:2007/11/01(木) 15:54:17
>>216
> 変数の順番を入れ替えただけで結果が変わってしまうのは
> なぜなのでしょうか?

変数の順番を入れ替えただけだと決めつけてる時点で、君はすでに敗北しているのだ。
220デフォルトの名無しさん:2007/11/01(木) 15:54:32
>>216
my $foo, $bar; は my($foo), $bar; であって my($foo, $bar); ではない。
221デフォルトの名無しさん:2007/11/01(木) 15:56:39
()を取りすぎたな
222デフォルトの名無しさん:2007/11/01(木) 15:59:05
use strict;
use warnings;
をつけろ
話はそれからだ
223デフォルトの名無しさん:2007/11/01(木) 17:04:45
>>216
>my $a = $_[0], $b = $_[1], %h = %{$_[2]};
my ( $a = $_[0], $b = $_[1], %h = %{$_[2]} ) ;
と判断しても、
( my $a = $_[0], my $b = $_[1], my %h = %{$_[2]};
と判断しても、、、

この前もどっかのスレで見たが、こんなトンチンカンな書き方を何処で
覚えてくるんだろう?後者は strict, warnings が通ってしまうから
なおさら、、、
224デフォルトの名無しさん:2007/11/01(木) 17:23:01
この後インタプリタに文句を付けるに一票
225216:2007/11/01(木) 18:47:04
なるほど、そういう解釈を受けてたのですね。
C言語でいうint a, b;と同じ扱いだと思っていました。
お恥ずかしい限りです。ありがとうございました。
226デフォルトの名無しさん:2007/11/01(木) 22:11:56
>>223
他の言語から来た奴だと結構ありがちかと。
227デフォルトの名無しさん:2007/11/01(木) 22:21:15
ttp://www.traders.co.jp/investment/tool/futures/futures_top.asp

このページの先物取引情報っていう表の部分だけ取り出して、
エクセルに保存するスクリプトを書いているんですが、
「ページを解析して表だけHTMLごと取り出す処理」がなかなか上手くいきません。
TreeBuilder使ったのですが、
@このページのHTMLタグ内にはclassもidもないので、
特定のtableタグをとってくる事ができない。
A加えて、TreeBuilderを使うとHTMLタグが取り払われてしまう(?)
っていう問題で苦戦してます。
どなたかこの部分のやり方を教えていただけると助かります。
228デフォルトの名無しさん:2007/11/02(金) 00:10:19
>>227
無理に型に嵌めた作り方しなくても、
「TOPIX NET 」という文字が出てきたらフラグ立てて、
次の<tr>から</table>までを抜き出せばいいだけじゃないの?
229デフォルトの名無しさん:2007/11/02(金) 00:14:34
とりあえず強引に取り出せばいいんじゃないの?
あれこれ考えるより、とりあえず手を動かしてうまくいったら結果オーライってことで。
どうせスクレイピングなんてページの仕様が変わったらそれまでなんだし。

my $page = ここに目的のページコンテントを入れる
my $tree = HTML::TreeBuilder->new_from_content($page);
# とりあえず会社名に一番近いタグを目印に
my @companies = $tree->look_down(_tag=> "td", bgcolor => '#CCCCCC');
my $i = 1;
my @table;
for my $co (@companies) {
  #奇数番目に関係ない要素がはいりこんだのでオミット
  $i++ % 2 and next;
  my $co = $co->look_up(_tag=>"tr");
  my $co_text = $co->look_down(_tag=>"font")->as_text;
  my @data = map { $_->as_text } $co->look_down(_tag => "div");
  push @table, [ $co_text, @data ];
}
$tree->delete;
230デフォルトの名無しさん:2007/11/02(金) 03:38:10
miyagawa プロダクツでもつかってろ。
231デフォルトの名無しさん:2007/11/02(金) 09:47:06
KENTって人のサイトがとても役に立つのがわかった
232デフォルトの名無しさん:2007/11/02(金) 10:40:37
>>231 が変なコードを量産しませんように
233デフォルトの名無しさん:2007/11/02(金) 12:20:18
KENTのコードは間違ってはいないのだが、
Perlっぽくない気がする。
C臭さがプンプンしていて、どうも違和感が。
234デフォルトの名無しさん:2007/11/02(金) 22:12:17
だったら自分で「Perlっぽいコード」を書いて公開すればイイジャン!
文句言うだけなら子供でも言える。
235デフォルトの名無しさん:2007/11/02(金) 22:14:55
>>233-234
KENTの自作自演か?
言ってることがでたらめすぎるぞ。
236デフォルトの名無しさん:2007/11/02(金) 22:28:12
で?キミはいったい、どんな「Perlらしいコード」を書けると言いたいんだい?
おや、見せられないのかい?恥ずかしくて他人には見せられないの?
へぇ。そう。
だったら他人のコードを批判する資格はまったく無いね。
237デフォルトの名無しさん:2007/11/02(金) 22:49:56
Perl4時代ならいざ知らず現在kentが垂れ流してるコードがうんこなのは周知の事実
Perlらしいとかそんな次元の話じゃないだろ
238デフォルトの名無しさん:2007/11/02(金) 23:03:28
で?
早く「Perlらしいコード」とやらを見せてくれよ。
239デフォルトの名無しさん:2007/11/02(金) 23:07:38

       /ニYニヽ
   (ヽ   /( ゚ )( ゚ )ヽ   /)
  (((i ) /::::⌒`´⌒::::\  ( i)))  でっていうwwwwwwwww
 /∠_| ,-)___(-, |_ゝ \
( ___、  |-┬-|    ,__ )
    |    `ー'´   /´
    |         /
240デフォルトの名無しさん:2007/11/02(金) 23:15:27
自分じゃ鋭い追求してるつもりなんだろうが、
哀れなほど孤軍奮闘だなw
241デフォルトの名無しさん:2007/11/02(金) 23:36:41
久しぶりにKENTのコード見てみたら
&jcode'convert(*line, 'sjis') でなく &jcode::convert(\$line, 'sjis') な記述になってるし
flock(FH, 2) してるし、もうびっくりですよ。
242デフォルトの名無しさん:2007/11/02(金) 23:46:09
perlらしいコードってあれだろ?
カートゥーンのキャラクターがぼやいてるようなやつ
243デフォルトの名無しさん:2007/11/03(土) 00:14:12
マウスの付いたパソコンしか触ったことの無いヤツが必死でほざいてるよ〜
244デフォルトの名無しさん:2007/11/03(土) 00:24:24
KENTってハゲオヤジだよ
245デフォルトの名無しさん:2007/11/03(土) 00:51:44
>>244
へ〜〜〜知らなかった〜〜〜!
そうなの、初めて知ったよ。
よく知ってるね、キミって情報ツウ?。すごいよ物知り博士だよ。
ネ申!ホトケ!天神まさ!ダイバダッタ!尊氏さまだよ!
246デフォルトの名無しさん:2007/11/03(土) 01:09:40
なんか浮いてる奴がいるな
247デフォルトの名無しさん:2007/11/03(土) 01:22:25
>>244の名字は足利w
248デフォルトの名無しさん:2007/11/03(土) 01:27:35
KENT=ハゲオヤジのソースは日経ソフトウェア
誰かと対談してて顔写真が載ってた
249デフォルトの名無しさん:2007/11/03(土) 01:43:01
>>248
へ〜〜〜すご〜い!
何でも知ってるんだね、物知りだね。
日系ソフトウエア読んでるだけでも自慢できるよ。
こんなクソスレにネ申が現れようとは!
250デフォルトの名無しさん:2007/11/03(土) 03:12:45
何事かと思ったらまたお前か
251デフォルトの名無しさん:2007/11/03(土) 08:22:35
天神まさ
252デフォルトの名無しさん:2007/11/03(土) 12:19:16
社労士だから、本業ついでに営業できていいよね。
あたまいいねー。
253デフォルトの名無しさん:2007/11/03(土) 16:08:09
>>228

なるほど、とてもシンプルで分かりやすい方法ですね。
ぜひ試してみようと思います、ありがとうございます。

>>229

ソースまで書いていただいてありがとうございます。
とても参考になりました。
一つ質問なのですが

$co->look_down(_tag => "div");

この部分はtrタグの中の一つ目のdiv(225 BUY)しか抽出できないんですよね?

for my $attr ( $co->look_down("div") ){
@data = $attr->as_text."\n";
}

という感じで全てのデータ(225 BUY,225 SELL〜)を抽出しようと思ったのですが、
エラーになってしまいました。
良い方法があれば教えていただけると幸いです。
254デフォルトの名無しさん:2007/11/03(土) 16:11:15
C言語で言う #ifdef WINDOWS のようなものはあるでしょうか?

WindowsとLinuxで共通に動くプログラムを作ろうと思っています。
fork()周りがOS依存になってしまうので、Windows/Linuxで処理を分けたいです。
255 ◆TWARamEjuA :2007/11/03(土) 16:29:00 BE:4574276-2BP(6825)
$^Oみたいな?
256perl 修行中:2007/11/03(土) 20:14:38
2007-10-16 21:55:38 という日付のフォーマットを
Sat, 03 Nov 2007 18:40:13 +0900 というフォーマットに変換したいと
思っているのですが見つかりません。
便利なパッケージとかないのでしょうか
257デフォルトの名無しさん:2007/11/03(土) 20:20:06
標準パッケージ
258デフォルトの名無しさん:2007/11/03(土) 20:36:01 BE:889350375-2BP(7951)
use DateTime::Format::HTTP;
my $dt = DateTime::Format::HTTP->parse_datetime("2007-10-16 21:55:38");
print DateTime::Format::HTTP->format_datetime($dt);
259254:2007/11/03(土) 20:40:42
>>255
まさにこれです!
Linuxで実行:linux
WinXPで実行:MSWin32
となりました。ありがとうございました!
260デフォルトの名無しさん:2007/11/04(日) 02:16:21
\(^O^)/
261デフォルトの名無しさん:2007/11/05(月) 00:24:36
>>253
リストコンテキストなら同一ノード内の全div要素、スカラーコンテキストなら最初の要素のみ。
要素が見つからないなら、as_textメソッドを呼び出したときにエラーが出るだろうな。
262デフォルトの名無しさん:2007/11/05(月) 16:59:02
>>256
俺は日付の変換には Time::Piece を愛用している。
http://perldoc.jp/docs/modules/Time-Piece-1.08/Piece.pod

フォーマットを変えたいなら
Time::Piece->strptime(STRING, FORMAT)
でTime::Pieceのインスタンスを作って、

$t->strftime(FORMAT)
でフォーマットを指定して出力すればいい。

でもこのモジュール、2038年問題だったっけ?
未来の日付を拒絶するんで、使う場面には注意が必要。
263デフォルトの名無しさん:2007/11/05(月) 18:11:04
for文を回して連続した数字を表示するときに、
桁の数をそろえる方法ってありませんか?

具体的に言うと
0 1 2 … 10 … 100
ではなく、
000 001 002 … 010 … 100
のようにしたいのですが。
264デフォルトの名無しさん:2007/11/05(月) 18:15:15
>>263
sprintf
265デフォルトの名無しさん:2007/11/05(月) 18:16:46
266デフォルトの名無しさん:2007/11/05(月) 19:41:42
>>263
'001' .. '100'
とかできたような気がする。
267デフォルトの名無しさん:2007/11/05(月) 20:30:42
>>263
foreach (0 .. 100) {
printf qq(%0.3d\n), $_; # 数字を他の文字列等とコンカチしたいときはsprintfで
}
268デフォルトの名無しさん:2007/11/05(月) 21:19:20
すでに回答が出て解決してるのに、なんでダラダラ引っ張るんだ?
やっぱ Perl 使いはアホばっかだな。
269デフォルトの名無しさん:2007/11/05(月) 21:29:16
またお前・・・じゃないみたいだな
270デフォルトの名無しさん:2007/11/05(月) 22:26:51
sort {
$a->[3] cmp $b->[3]
or
$a->[5] <=> $b->[5]
or
$a->[8] cmp $b->[8]
} @array
こんな文があったとします。
これをユーザの入力によって
$a->[8] cmp $b->[8]を一番先に持ってきたり(
sort {
$a->[8] cmp $b->[8]
or
$a->[3] cmp $b->[3]
or
$a->[5] <=> $b->[5]
} @array
)、$a->[5] <=> $b->[5]を一番先に持ってきたりしたいのですが
どのようにすればいいでしょうか?
271デフォルトの名無しさん:2007/11/05(月) 22:28:22
すみません。PerlのVerは5.00503で、
モジュールは使えません。
272デフォルトの名無しさん:2007/11/05(月) 22:55:38
>>270
sort block はその名の通りblockなんだから、条件式埋め込めばいいだけじゃん?

手抜きの例を書くと
my $i = 1 ; # $i を他の数字にしてみる。
my @arr = sort {
if ( $i == 1 ){ $a->[0] <=> $b->[0] or $a->[1] <=> $b->[1] }
else { $a->[1] <=> $b->[1] or $a->[0] <=> $b->[0] }
} ( [1,2],[2,3],[2,1] ) ;
273デフォルトの名無しさん:2007/11/05(月) 22:58:53
>>270
各々の順序関数を @funcs に格納して、
評価する順序を変えたいときは @funcs を並び替えればいいんじゃね?

@funcs = (
  sub { $a = shift ; $b = shift ; $a->[3] cmp $b->[3] },
  sub { $a = shift ; $b = shift ; $a->[5] <=> $b->[5] },
  sub { $a = shift ; $b = shift ; $a->[8] cmp $b->[8] }
) ;

@array =
sort {

&{ $funcs[0] }($a, $b)
or
&{ $funcs[1] }($a, $b)
or
&{ $funcs[2] }($a, $b)

} @array ;
274 ◆TWARamEjuA :2007/11/05(月) 23:16:51
おいらの頭では、比較演算子がorで繋がっている趣旨がわかんない(´・ω・`)
入力によってsortを選択(択一)にするのなら判るけれども。。。
275デフォルトの名無しさん:2007/11/06(火) 00:14:53
>>274
a or b は aが偽のときにbを返す。
即ち、一個目のcmpが0を返したときに、次の評価が行われるようになる。
276デフォルトの名無しさん:2007/11/06(火) 00:32:11
#!/usr/bin/perl -w
use strict;
my @order = @ARGV;
my @data; chomp, push @data, [ split /\|/ ] while <DATA>;
my %cmp = (
  by_title => '$a->[0] cmp $b->[0]',
  by_author => '$a->[1] cmp $b->[1]',
  by_year_asc => '$a->[2] <=> $b->[2]',
  by_year_desc => '$b->[2] <=> $a->[2]',
  by_price_asc => '$a->[3] <=> $b->[3]',
  by_price_desc => '$b->[3] <=> $a->[3]',
);
my $code = join ' or ', @cmp{@order};
local $" = '|';
print map "@$_\n", eval "sort { $code } \@data";
__DATA__
Regular Expression Pocket Reference, Second Edition|Tony Stubblebine|2007|14.99
Mastering Perl|brian d foy|2007|39.99
SQL Injection Defenses|Martin Nystrom|2007|9.99
Mastering Regular Expressions, Third Edition|Jeffrey E. F. Friedl|2006|44.99
Building Tag Clouds in Perl and PHP|Jim Bumgardner|2006|9.99
Perl Hacks|chromatic, Damian Conway, Curtis Poe|2006|29.99
Intermediate Perl|Randal L. Schwartz, brian d foy, Tom Phoenix|2006|39.99
Wicked Cool Perl Scripts|Steve Oualline|2006|29.95
Perl Testing: A Developer's Notebook|Ian Langworth, chromatic|2005|29.95
Learning Perl, Fourth Edition|Randal L. Schwartz, brian d foy, Tom Phoenix|2005|39.95
277デフォルトの名無しさん:2007/11/06(火) 02:15:10
>>263です
>>264-268 ありがとうございます
sprintf を使うことにします
278デフォルトの名無しさん:2007/11/06(火) 07:16:04
なぜか>>263に礼言われてる>>265宛て。

お題は>>256のとおり JST(+0900) で吐きたい、みたいなのよね。
HTTP::Date::time2str() は GMT でしか吐いてくれなかった気がする。

最近は Date::Format 使ってる。
過去に書いたコードを発掘したら use POSIX qw(strftime); と書いてるのもあると思う。
279perler:2007/11/06(火) 12:15:22
DBIについての質問です。
perl + MySQLを使用しています。
MySQLにinsertする際にこれまではMyISAMを使用していましたが、
都合によりInnoDBを使用することになりました。

そうした場合、MyISAMでinsertできていたソースがInnoDBに変更したら使用できなくなってしまいました。
何か違いがあるのでしょうか。
以下ソース。

my $sth = $dbh->prepare("INSERT user SET USER_NAME='ドコモ', MAIL='docomo', PASS='1234567';");

$sth->execute();
280デフォルトの名無しさん:2007/11/06(火) 12:21:41
>>279
Perlの問題というよりも、MySQLの設定がマズイような気がしますが。
Perl-DBI以外のクライアントでMySQLに接続して、INSERTできてます?

それとexecuteの後に、エラーが発生するんだと思いますが、
エラーメッセージには何と書かれているのでしょうか?
281デフォルトの名無しさん:2007/11/06(火) 13:37:31
プレースホルダくらい使って欲しいなぁ。
282perler:2007/11/06(火) 13:46:07
申し訳ありません。
自己解決しました。

コネクションを取得時にオートコミットをオフにしていて、
コミットをしていなかった為でした。
皆様ありがとうございました。
283デフォルトの名無しさん:2007/11/06(火) 14:50:35
>>281
キチガイ?
284デフォルトの名無しさん:2007/11/06(火) 18:16:15
上げて書き込む奴は大抵馬鹿だからすぐ分かるな
285941:2007/11/06(火) 22:55:41
perlでバイナリーファイル→画像ってできますか?
指定したURLからjpgをbinmodeでファイルに書き込むまでは出来たんですが
それを.jpgになおせません・・・何を言ってるか自分でもわかりませんが
いい方法は無いでしょうか?
286デフォルトの名無しさん:2007/11/06(火) 22:56:33
941は関係ないです・・ごめんなさい
287デフォルトの名無しさん:2007/11/06(火) 23:05:24
>>285
私にも意味が分かりません。
288デフォルトの名無しさん:2007/11/06(火) 23:09:14
意味が分からんけどどうやってjpgのデータを取ってきてどうやって書き込んだのさ
ただ単にネット経由で画像とってきて保存したいだけなら
my $ua = LWP::UserAgent->new;
$ua->mirror($url, $filename)
だけでもできるよ
289デフォルトの名無しさん:2007/11/06(火) 23:22:32
ほんとに意味わからなくてごめんなさい
とりあえず自分で作ったソースの一部なんですがこんな感じで画像は
やはり取れないんでしょうか・・
print $client_socket "GET http://7art-screensavers.com/screenshots/animals/lion-and-the-lamb.jpg HTTP/1.0\r\n";
print $client_socket "Host: www.clinko.com\r\n";
print $client_socket "\r\n";

while (<$client_socket>){
print $_;
m/^\r\n$/ and last;
}


$file="sample.jpg";
while (<$client_socket>){
binmode(STDOUT);
$all=join("",<$client_socket>);
open(FILE, "> $file");
binmode(FILE);
syswrite(FILE,$all,length($all));
close(FILE);
}
290デフォルトの名無しさん:2007/11/06(火) 23:25:31
最終的にはイメージ検索のAPIでもってきたXMLからXML::Simpleモジュール
とかつかってjpg画像を指定した落としていきたいんです・・説明へたくそ
でごめんなさい
291デフォルトの名無しさん:2007/11/06(火) 23:28:09
>>289
バイナリデータをreadlineで読むなよ
292デフォルトの名無しさん:2007/11/06(火) 23:33:45
readlineってなんですか?無知でごめんなさい
293デフォルトの名無しさん:2007/11/06(火) 23:34:16
LWP::UserAgent使えよ
294デフォルトの名無しさん:2007/11/07(水) 01:05:19
デバッグくらいしろよ
295デフォルトの名無しさん:2007/11/07(水) 01:14:31
ActivePerlいれたら起動しなくなりました。
どうしたらいいんでしょうか
296デフォルトの名無しさん:2007/11/07(水) 01:17:40
何が?何が起動しないんだよ。人にものを話すときは、
主語述語きちんと言いなさい。学校で習わなかったかな?5W1Hって。
297デフォルトの名無しさん:2007/11/07(水) 01:23:34
ActivePerlをインストールしたら
OSが起動しなくなりました。
Windwosロゴまでは表示されますが
その後真っ暗です。
セーフモードでの起動は出来ます。
復元でActivePerlインストール前にもどれば起動は出来ましたが
ActivePerlを使いたいのです、
298デフォルトの名無しさん:2007/11/07(水) 01:24:48
use Encode;
use Encode::Guess qw/ gbk euc-jp shiftjis/;
opendir (DIR, '.');
@files = readdir DIR;
foreach $dir(@files)
{
print $dir;

open (IN, "<$dir");
open (OUT, ">$dir-2");
while (<IN>)
{
Encode::from_to($_, 'guess', 'Shiftjis');
print OUT;
}
close IN;
close OUT;
}
opendir (DIR, '.');
@files = readdir DIR;
foreach $_(@files)
{
$old = $_;
s/-2//;
rename ($old,$_);
}
初心者なもので無駄が多すぎてお恥ずかしいのですが。。。
フォルダ内にあるテキストファイルの文字コード(EUC・Shiftjis・BGなどバラバラ)を自動判別して全てshiftjisに変換したいのですが
shiftjis or euc-jp or cp936 at C:/Perl/lib/Encode.pm line 186 とエラーがでます。
'guess'の部分を''gbk'とかに指定すればちゃんと変換されるのですが、それだと他コードのファイルが文字化けします。
どうすればいいでしょうか・・・?
299デフォルトの名無しさん:2007/11/07(水) 03:37:57
300デフォルトの名無しさん:2007/11/07(水) 04:08:16
>>297
インストールオプションで、Perl 本体と PPM ”だけ” インストールしてみてはどうだろう。
ISAPI とか PerlEX とか PerlScript とか、(必要が無ければ) チェックをははずしてみる。
うまくいくかどうかわわからんが、成功を祈る。
301デフォルトの名無しさん:2007/11/07(水) 12:17:51
>>297
OSって Windows の何?XP?Vista?
サービスパックのバージョンは?
302デフォルトの名無しさん:2007/11/07(水) 13:09:44
>>300
だめでした。
なんとか復元3回やってまた戻しました。

OSはXPのSp2です。
一応復元する前にPerlのファイルを別途保存してみたので
それを使って目的のことが出来ないかやって見ます。
303デフォルトの名無しさん:2007/11/07(水) 22:48:10
Solaris10のsyslog(ログローテートしている)で
そのsyslogの作成日が本日だった場合にはsyslogに任意の文字列を記述し、
本日でなかった場合には何もしない、という処理をさせたいのですが
どうしたらよいでしょうか?
304デフォルトの名無しさん:2007/11/07(水) 23:40:27
>>302
基本的にさ、perl のファイルさえあればOKなんよ。
あとは環境変数 PATH に perl のディレクトリを加えたり、
拡張子 .pl を perl.exe に関連付けしてるだけだから、
もし Active Perl のインストーラでうまくいかないんだったら
これらを手動でやっちゃえばOK・・・なハズ。
PATH とか 拡張子の関連付けとか、具体的なやりかたが分からなかったら
また質問してね。
305デフォルトの名無しさん:2007/11/07(水) 23:44:24
>>303
ファイルの日付は stat 関数、
ファイル名変更は rename 関数を使う。
それぞれの使い方は google で調べてね。
306デフォルトの名無しさん:2007/11/08(木) 04:27:04
456,657,787,455,…

のように数字が横に並んだファイルがあるのですが
456−657,657-787,787-455,…というような前後の差分を
とったファイルを出力するにはどうしたらいいでしょうか?

ファイルを読み込んで、そのデータをfor文で差分をとっていけばいいと思うのですが
例えば456や657をどのように指定するかがわかりません。
指定する方法がわかればそれをひとつずつずらしていけばいいと思うのですが・・・
お手数ですが、どなたかヒントをお願いいたします。
307デフォルトの名無しさん:2007/11/08(木) 06:06:03
@nums = (456,657,787,455);

for $i (0..$#nums-1) {
print $nums[$i] - $nums[++$i];
}
308306:2007/11/08(木) 06:22:40
>>307さんわかりやすいプログラムをありがとうございます。

まずリスト変数にその数字をいれて指定できるようにして
そしてそのリスト値を最後のから一つ前まで代入して差分できるようにするということですね。
回答していただき感謝しております。

それと今回はその要素(456、657など)が一万個くらいあるのですが
その場合は直接リスト変数の要素として入れるわけには行きませんよね?

よろしければその場合もお教え願えませんか?
その一万個の数字のファイルを読み込んだあとにどのようにして
一万個の数字を指定して差分を求めればいいかがわからないのです・・・
309デフォルトの名無しさん:2007/11/08(木) 06:31:46
>>307も「そこから」だとは思ってなかったと思う。

my $data = '456,657,787,455';
my @nums = split(/,/, $data);
310デフォルトの名無しさん:2007/11/08(木) 06:32:39
ファイルからリストに読み込む方法が分からないってこと?
なんかメモリ上に1万個の要素を入れるのがマズいとも読み取れるけど・・・。

open my $in, "UNKO";
my @nums = split(/,/, do { local $/ ; <$in> });
close $in;

とでもすれば。
311デフォルトの名無しさん:2007/11/08(木) 06:34:43
do {local $/=","; <$in>}
これでいいか。
312306:2007/11/08(木) 06:46:29
>>309
丁寧にありがとうございます。

>>310
その通りです。一万個の数値を直接プログラムに入力するのはまずいかなと思いまして。
日本語に至らないところがあり申し訳ありませんでした。

ありがとうございます!
,に対応してそれぞれの値が区切られてリスト変数の要素としてとして
認識されていくというわけですね。
丁寧な指導ありがとうございます。おかげでリストに読み込む方法がわかりました。
313298:2007/11/09(金) 00:44:58
>>299
リンク先読んで試行錯誤しましたが、できませんでした・・・
どなたか直接手直ししていただけませんか
314デフォルトの名無しさん:2007/11/09(金) 00:49:28
>>313
条件とか謝礼とか書かないと。
315デフォルトの名無しさん:2007/11/09(金) 01:19:03
もしかしたら文字コードの自動認識って
「失敗」することがあるもんだって、
知らないで使っているのでは。
316306:2007/11/09(金) 03:58:26
質問ばかりで申し訳ないんですが

11,22,33,44,55,66 というリストを

11,33,55
22,44,66

というように二つのリストに分けるという作業はどうしたらいいのでしょうか・・・
substrとfor文で一つ置きに抽出しようとも思ったんですが++ではなく一個置きに
するというプログラムがわからなくて・・・
そもそもここでsubstrを使おうとすること自体間違っている可能性が高そうですが。
317デフォルトの名無しさん:2007/11/09(金) 04:31:20
substrじゃなくてsplitすれば?
1個置きはループカウンタが奇数か偶数で分岐すればおk
318デフォルトの名無しさん:2007/11/09(金) 04:37:04
http://www.aoky.net/articles/steve_yegge/tour_de_babel.htm
Perlもまた、間もなくなくなる。
319デフォルトの名無しさん:2007/11/09(金) 05:28:50
(・∀・)ニヤニヤ
320306:2007/11/09(金) 06:31:59
なるほど、また一つわかりました。ありがとうございます。
つまり

@data = (11,22,33,44,55,66);
for($i=0;$i<=$#data;$i++ ){
if ($i % 2 == 0){
push @kisuu,"$i";
}
elsif ($i % 2 == 1){
push @guusuu,"$i";
}
}
print @kisuu;
print @guusuu;
のようにすれば奇数グループと偶数グループを分けることができるというわけですね。
321306:2007/11/09(金) 06:32:38
すいません、>>317さんへです。
322デフォルトの名無しさん:2007/11/09(金) 06:43:34
>>316
リストの先頭から1個ずつ取り出して出力先のリストにかわりばんこに
プッシュすれば良い。
323306:2007/11/09(金) 08:08:19
>>322
ありがとうございます。おかげさまでデータを分けることができました!
あと
2,3,2,3,2,3,2,3,…と並んでいるdata.txtがありその差分を
出したいために以下のプログラムを作ったんですが
本来なら結果が
-1,1,-1,1,-1,1,-1,…という風に1番目から2番目を引いた結果、2番目から3番目を引いた結果を
出力するつもりだったのが
1,1,1,1,1,1,1,…という風に1番目から2番目を引いた結果、3番目から4番目を引いた結果と出力されてしまいます。
どこがおかしいのでしょうか?
open IN, "data.txt";
open OUT, ">sabun.txt";
while (<IN>) {
@all = split(/\,/,$_);

for($i=0;$i<=$#all-1;$i++ ){
$kekka = $all[$i] - $all[++$i];

print OUT $kekka,"\n";
}
}
close IN;

close OUT;

324306:2007/11/09(金) 08:24:44
すいません、自己解決しました!
for($i=0;$i<=$#all-1;$i++ ) を
for $i (0..$#all-1) にしたらうまくできました。

しかしこの二つの文は僕には同じようにしか見えないんですがどこが違うんでしょうか。。。
325デフォルトの名無しさん:2007/11/09(金) 08:30:34
同じです
326306:2007/11/09(金) 08:49:01
>>325
でもなぜか
for($i=0;$i<=$#all-1;$i++ ) だと
(2-3),(2-3),(2-3),(2-3),…となって一個飛ばしの差分にしまったんです。

for $i (0..$#all-1) だとちゃんと
(2-3),(3-2),(2-3),(3-2),(2-3),…となりできるんですが。
327デフォルトの名無しさん:2007/11/09(金) 08:54:08
>>326
だって、まず
$kekka = $all[$i] - $all[++$i];
のケツの部分で一回インクリメントされて、そのあと
for($i=0;$i<=$#all-1;$i++){
のケツの部分でもう一回インクリメントされてるわけだから。
328デフォルトの名無しさん:2007/11/09(金) 09:38:55
>>324
数をカウントアップしてるのと、数列を順に入れてる という違いだが
基本的に同じ。 ってかカウンター変数触んなよ。バグの元凶だ。
329306:2007/11/09(金) 10:17:35
>>327 二重にカウントされてるようなものってことですね。ありがとうございます。
>>328 for文の後ろの方いじるとまずいんですね、知りませんでした。
if文などでなんとかしたほうがいいということですか?

皆さんあと一つだけ知恵をお貸しください… suuji.txt というファイルがありまして中身が
1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,  ←ここで改行してある
21,22,23,24,25,26,27,28,29,30

というものなんですが、これを偶数と奇数に分けたくて、まず偶数を出力するために以下のプログラムを
作ったんですが、出力結果が
0,2,4,6,8,10,12,14,16,18,20,0,2,4,6,8,10,12,14,16,18,20,21,23,25,27,29,
となってしまい
「1行目が2重に含まれている」
「2行目からずれてしまっている」という二つのわからない点が出てしまいました。
何度もしつこいですが、どうか考え方をお教えください・・・
open IN, "suuji.txt";
open OUT, ">guusuu.txt";
while (<IN>) {
@all = split(/\,/,$_);
for $i (0..$#all){
if ($i % 2 == 0){
push @guusuu,"@all[$i]",",";
}
elsif ($i % 2 == 1){
push @kisuu,"@all[$i]",",";
}
}
print OUT @guusuu;
}
close IN;
close OUT;
330デフォルトの名無しさん:2007/11/09(金) 10:39:03
>>329
> 二重にカウントされてるようなものってことですね。
ようなもの、じゃなくて、二重にカウントされてるんだよ。
言葉尻を捉えた突っ込みに思うかもしれないけど、ここで曖昧さを排除することは凄く重要だよ。
君の目と意識が、ハッキリ「二重にカウントしてる」のを捉えるまで、わかった気になっちゃダメ。

> for文の後ろの方いじるとまずいんですね
よくわからないうちに相手の意見を「自分流に言い換える」のも危険だよ。
カウンター変数ってのはこの場合$iのことで、この$iの中身を「ループ内部で」書き換えるのは混乱の元だ、という話。
ループの内部でこの値を変更するというのは、「ループ内部から見ると、$iは毎回1ずつ増えて降ってくる
絶対的なものに感じられる」というある種の信頼を崩すということで、これは本当に混乱する。
事実、君はその信頼に囚われて、たった2行なのに原因を見つけられなかったでしょ?
だから、君の解釈であるところの「for文の後ろの方いじるとまずい」は正反対だ。for文の後ろでしかいじっちゃいけない。
これも、「よくわかんないけど、とにかくカウンター変数はfor分の最後でいじれということですね」とか
曖昧な解釈で終わっちゃダメだからね。何故そうすべきなのか、納得するまで考え込むように。
331デフォルトの名無しさん:2007/11/09(金) 11:04:37
> 出力結果が
> 0,2,4,6,8,10,12,14,16,18,20,0,2,4,6,8,10,12,14,16,18,20,21,23,25,27,29,
> となってしまい
いや、なってないから(*1)。

突っ込むところは複数あるんで、書くのが面倒だな・・・。とりあえず、
(1) suuji.txtの1行目の終わりに","が付いていて、且つ、末尾の改行を除去していないので、
  @allに最初に入るのは、1から20までと「空白+改行」の、全21要素である。
(2) だから2行目に入ると、奇数偶数が入れ替わる。
  *1 というか、$add[n]の中身がn + 1なので(ややこしい)、君の言うようには出力されない。
(3) push関数は「@allの後ろにどんどん要素を追加していく」だけでクリアなんかしないわけだから、
  1行目の処理の時に詰め込んだものが2行目の処理の時に残っているのは当然。
  前のカウンター変数の時もそうだけど、君自身は毎回のループ処理を独立させて捉えているのに、
  君の書くコードは「次のループに影響する何か」をいちいち残していってる。それが混乱を生んでる。
(4) @all[$i]という書き方は「配列スライス」といって、この場合たまたまスカラーを取り出してるような
  結果になってるだけ。$all[$i]と書くべき。「スライス」をキーワードにして調べるように。
あたりは絶対に直さないとダメ。他にも「よりよい方法に変えるべき」点はあるけど、書ききれない。
332デフォルトの名無しさん:2007/11/09(金) 14:09:53
教えてください
ある文字列内に含まれている [−] (半角スペース,半角[,全角マイナス,半角],半角スペース)
を削除したいため、置換演算子でコードを書いてみましたが、
]が残ったり、なぜか'|'に変換されます。

その1 $aaa =~ s/\s\[−\]\s//ig;
その2 $aaa =~ s/\s\[\−\]\s//g;
その3 $aaa =~ s/ \[\−\] //g;
その4 $aaa =~ s' \[−\] '';
など
(修飾子と区切り文字列の組み合わせは他に試していますが、
すべての組み合わせを実行していません)
よろしくお願いします。
333デフォルトの名無しさん:2007/11/09(金) 14:13:52
>>332
ソースファイルを保存するとき、文字コードは何にしてます?
334デフォルトの名無しさん:2007/11/09(金) 14:21:32
>>329
無駄が多い気もするけどこんな感じか?
use strict;use warnings;use IO::File;
my $IN_FILE = 'data.txt';
sub open_or_die {IO::File->new( $_[0] ) || die("$_[0]:$!")}
sub slurp {local $/;my $fh = open_or_die($_[0]);<$fh>}
my @all = (my $data = slurp($IN_FILE)) =~ /([-\d]+)/g;
my @R = ([],[]);
push(@{$R[$_%2]},$_) for @all;
printf "偶数:%s\n",join(',',@{$R[0]});
printf "奇数:%s\n",join(',',@{$R[1]});
335332:2007/11/09(金) 14:25:40
>333
SHIFT-JISです。
336デフォルトの名無しさん:2007/11/09(金) 14:34:53
>>335
だとしたら

ソースファイルの冒頭あたりに、
use encoding 'shiftjis' ;
あるいは
use encoding 'cp932' ;
って書いてみてください。

ほかにも引っ掛かりそうなことがあるんで
ttp://www.fl.reitaku-u.ac.jp/~schiba/perl/perlEncoding.html

↑まずこのへんを読んでみて。
337306:2007/11/09(金) 15:07:14
>>330
ご指摘ありがとうございます、そういうことだったんですか。ループ中の
[]の中に++を使うと確かに意味がわかっていませんでした。

>>331
アドバイスありがとうございます。
まず、以下のプログラムによって、改行+,を 改行にして「途中からずれる」という問題は解決できました。
open IN, "suuji.txt";
open OUT, ">suujikai.txt";
while (<IN>) {

s/,\n/\n/g ;

print OUT $_;
}
close IN;
close OUT;

>push関数は「@allの後ろにどんどん要素を追加していく」だけでクリアなんかしないわけだから
1行目の処理の時に詰め込んだものが2行目の処理の時に残っているのは当然。
>「次のループに影響する何か」をいちいち残している
この次のループに影響する何かというものを教えていただけませんか?
自分ではsuuji.txtの1行目の偶数を@guusuuに出力、その後2行目の偶数を@guusuuに出力しているつもりなのですが
どうしても1行目の偶数を出力、その後1行目と2行目の偶数を出力という風に2重に出力してしまいます・・・
338306:2007/11/09(金) 15:18:32
>>334
わざわざプログラムを作成していただきありがとうございます。
しかし申し訳ないのですがプログラム初心者の私には、少々高レベルで理解できません・・・

レベルの低い質問で申し訳ないのですが、よろしければ二重に出力される原因を教えていただけたら幸いです。
339デフォルトの名無しさん:2007/11/09(金) 15:29:35
334とは別の人間だが。

>>338
print OUT @guusuu;
がwhileの中にあるのがマズイんじゃね?

closeの後に@guusuuを出力するようにしてみ。
340デフォルトの名無しさん:2007/11/09(金) 15:51:00
改行なんかより、配列のインデックスの奇数偶数を評価してるところとか、
ループ中で作った配列をクリアしないで回してるところとか、
そういう本質的な間違いに気がつくべきだと思うな。
だいたい初心者なら、まずデータをコードに埋め込んでプログラムするもんだろ。

あと、chompつかえよ。
341デフォルトの名無しさん:2007/11/09(金) 16:23:30
>>337
> 自分ではsuuji.txtの1行目の偶数を@guusuuに出力、その後2行目の偶数を@guusuuに出力しているつもりなのですが

つもりとか言ってないで、調べろよ。想像していないで、どうなっているのかいちいち調べろ。
342デフォルトの名無しさん:2007/11/09(金) 16:25:32
>>337
君、この程度でつまづいてて大丈夫?
343デフォルトの名無しさん:2007/11/09(金) 16:28:26
課題を熟考するのはいいことだが、出てきた疑問点に
他の人から答えをもらおう って所が見込み無い。
課題をこなしてる意味もあんまない。
344デフォルトの名無しさん:2007/11/09(金) 16:47:00
最近はフローチャートとか学ばないんかね。
345デフォルトの名無しさん:2007/11/09(金) 16:49:31
俺はフローチャートを習った覚えはないな。
346デフォルトの名無しさん:2007/11/09(金) 16:49:34
しかも人の話を全然聞いてないし。
(なんでこの一連の流れでまだ「二重に出力される理由」がわからんのよ)
347デフォルトの名無しさん:2007/11/09(金) 16:54:09
>>334 ([-\d]+)は(-?\d+)のほうがいいね。

>>338
>しかし申し訳ないのですがプログラム初心者の私には、少々高レベルで理解できません・・・
人のソース読むのも勉強だし
自分で作ったコードと比較して何が悪かったのか調べるのも勉強だと思うぞ
348デフォルトの名無しさん:2007/11/09(金) 17:05:04
>>337
おまえもう工場のライン工やっとけ。
出来た製品二重に流すんじゃねーぞ。
349デフォルトの名無しさん:2007/11/09(金) 17:09:30
なんだかみんな手厳しいな。
「偶数奇数が‥‥」って言っている時点で
厨房か工房あたりだろうにw
350デフォルトの名無しさん:2007/11/09(金) 17:10:45
3日ぐらいひとりで考え込んだほうがいい
質問スレは便利だけど、もらえるのはヒントだけ
結局考えるのは自分自身なのだ
351デフォルトの名無しさん:2007/11/09(金) 17:15:45
ワロタ
352デフォルトの名無しさん:2007/11/09(金) 17:16:29
答えてやりてえけど、どこから答えたらいいのかさっぱりわからん。
353デフォルトの名無しさん:2007/11/09(金) 17:43:40
>>349
もし本人がいい大人だったら、一番手厳しい意見だw
354デフォルトの名無しさん:2007/11/09(金) 17:47:26
後の二重出力分野における創始者である
355306:2007/11/09(金) 17:49:45
皆さんお騒がせしてすいません。
昨日からperlというかプログラムを初めて勉強しはじめたので
ずいぶん低レベルなレスをしてしまったと思われます。。。
工場のラインを避けるべく、今日も徹夜でperlを勉強しようかとおもいます。

>>339さん、ありがとうございます。その通りでした。

>>341 修正するごとに実行してるんですがそれでもわからなかったので・・・

>>348
先生、ホワイトカラーの仕事がしたいです・・・

>>350
このスレの皆さんからとても貴重なアドバイスがいただけました。

>>352
ありがとうございます。次回の書き込みからはもっと明確な言葉を使うようにします。
356デフォルトの名無しさん:2007/11/09(金) 18:00:08
明確な言葉というよりも、むしろ自分自身で何を考えてるか分かってないんじゃないの。
357デフォルトの名無しさん:2007/11/09(金) 18:10:21
フローチャートを知らない世代がこれからの日本のIT界をしょって立つのか。
なんだか恐ろしいな。
こんなことだからシャホチョーの5000万件漏れが起きるんじゃないのか?
358デフォルトの名無しさん:2007/11/09(金) 18:31:23
フローチャート厨(笑)
359デフォルトの名無しさん:2007/11/09(金) 18:42:29
>>357
しらんがな。
しかもシャホチョのはフローチャート世代だろうに
360デフォルトの名無しさん:2007/11/09(金) 18:56:39
冷静な突っ込みに吹いた

でも仕様書用にフローチャートは書けたほうがいい
細かいプログラムにいちいち書いてらんねーけど。
361デフォルトの名無しさん:2007/11/09(金) 19:30:59
このくらい小学生でも書ける奴は書けるんだがなぁ…
362デフォルトの名無しさん:2007/11/09(金) 19:40:27
「貴様・・・自分が何をやっているか、わかっているのか!」
なんて台詞がよく漫画にあるけど、フローチャートはまさにそこんところの証明兼、説明手段。
ただ、書かないと自分のやっていることがわからない、ってわけではないし、
ある程度の経験者なら、自分が今「書こうと思えば書ける」状態なのか否かは、自己診断できる。
だから、書けることは大事だけど、古い人が口にするような重みは無いな。
363デフォルトの名無しさん:2007/11/09(金) 19:41:02
ラリー「フローチャートなど使うプログラマは池沼」
364デフォルトの名無しさん:2007/11/09(金) 19:53:43
実際に紙にフローチャートを書くか書かないかという問題ではなく
フローチャートさえ書けないのか?って事。
紙に書きたくないなら頭の中に書いてもいい。
でも、頭の中にでさえフローチャートが書けないようじゃヤバイだろ。
基本中の基本だろ?

>フローチャートなど使うプログラマは池沼

これは、フローチャートを卒業して、次のステップに進んだ者が言うセリフだよ。
>>328 のようなおかしなコードを書く初心者には
自分の考えを確認する意味でも、図に書いてみるのは大切な事。
365デフォルトの名無しさん:2007/11/09(金) 19:54:57
フローチャートの図形の意味を試験に出されたときには閉口しました
366デフォルトの名無しさん:2007/11/09(金) 20:03:10
今時フローチャートなんか中学校の情報の授業でさえ習うのに
367306:2007/11/09(金) 20:20:37
すいません、質問させてください。
x成分の速度データが入った「a.txt(中身は1,1,1,1,とする)」、
y成分の速度データが入った「b.txt(中身は2,2,2,2,とする)」があって
二つの成分を合わせた速度データを作成することは可能でしょうか?
仮にそれをc.txtとすると中身は{(1^2+2^2)^0.5},{(1^2+2^2)^0.5},{(1^2+2^2)^0.5},{(1^2+2^2)^0.5},
すなわち√5,√5,√5,√5,となるようにしたいのですが。
以下のようなプログラムを作ってみたのですが、失敗しました。
open IN, "a.txt";
while (<IN>) {

@nums = split(/\,/,$_);

}
close IN;
open IN, "b.txt";

while (<IN>) {

@suuji = split(/\,/,$_);
}
close IN;

for($i=0;$i<=3;$i++ ){
$goukei[$i] = $nums[$i] ** 2 + $suuji[$i] ** 2;
$sokudo = $goukei ** 0.5,",";
@sokudo = split(/\,/,$sokudo)
}
print @sokudo;
368デフォルトの名無しさん:2007/11/09(金) 20:25:02
で、さっきの疑問は解決できたのかい?
369306:2007/11/09(金) 20:25:32
二つの成分を合わせた速度データとは
(x方向の速度の成分の二乗+y方向の速度成分の二乗)の平方根のことです。。。
370306:2007/11/09(金) 20:30:33
>>368
おかげさまで解決することができました。
print OUT @guusuuを
print OUT $guusuuにしました。
371デフォルトの名無しさん:2007/11/09(金) 20:46:48
>>367
可能です
372デフォルトの名無しさん:2007/11/09(金) 20:46:53
未だに行末のカンマと改行を取り除こうとしないんだな。
373デフォルトの名無しさん:2007/11/09(金) 20:48:45
>>367
センスないよ。プログラムやめたほうがいい。
プログラミングなんてしなくてもいい仕事たくさんあるから。
374デフォルトの名無しさん:2007/11/09(金) 20:49:39
キーパンチャーとかいいんじゃね
375306:2007/11/09(金) 20:55:59
>>371
可能ですか!?まだ希望が持てます。

open IN, "a.txt";
while (<IN>) {
@nums = split(/\,/,$_);

}
close IN;

open IN, "aa.txt";

while (<IN>) {

@suuji = split(/\,/,$_);
}
close IN;

for($i=0;$i<=3;$i++ ){
$goukei[$i] = $nums[$i] ** 2 + $suuji[$i] ** 2;

$sokudo[$i] = $goukei[$i] ** 0.5;
push @sokudo,"$sokudo[$i]";
}
print @goukei;

このプログラムで何とか5,5,5,5 まで表示することができました。
376306:2007/11/09(金) 20:56:49
×aa.txt
○b.txt
377デフォルトの名無しさん:2007/11/09(金) 21:09:21
質問てか宿題に限りなく近いだろこれ
378デフォルトの名無しさん:2007/11/09(金) 21:28:20
Perlを使うことが目的なのか、計算結果を得ることが目的なのか。
後者なら、Excelでやった方が楽な気がする。
379306:2007/11/09(金) 21:32:57
無事できました!
open IN, "a.txt";
while (<IN>) {
@nums = split(/\,/,$_);
}
close IN;
open IN, "b.txt";
while (<IN>) {
@suuji = split(/\,/,$_);
}
close IN;
for($i=0;$i<=3;$i++ ){
$goukei[$i] = $nums[$i] ** 2 + $suuji[$i] ** 2;
$sokudo[$i] = $goukei[$i] ** 0.5,"\n";
push @sokudo,"$sokudo[$i]";
}
foreach $a (@sokudo) {
print $a,"\n";
}
実行結果
2.23606797749979
2.23606797749979
2.23606797749979
2.23606797749979
2.23606797749979

ところで実行結果が一つ余分に出てくるのは何故でしょうか?
380306:2007/11/09(金) 21:34:10
>>378
perlを使うことが目的なんです。
381デフォルトの名無しさん:2007/11/09(金) 21:36:04
>>379
お前、自分の書いてることの意味分かってないだろ
382デフォルトの名無しさん:2007/11/09(金) 21:41:47
物事の中間過程をまったくイメージしていないのがよくわかるな。

致命的な指摘ほど無視してるし。
383306:2007/11/09(金) 22:20:48
>>381
あまりよくわかってないですね。最後の値が2重に表示される意味がわからないですし。

>>382
無視してるんじゃなくて、意味がわかっていないのです。
384デフォルトの名無しさん:2007/11/09(金) 22:59:04
フローチャートって言うのは、知能も才能もない人間でも
プログラムを書けるようにするための補助輪のようなもの。
385デフォルトの名無しさん:2007/11/09(金) 23:11:39
せっかく指摘してくれてんのに、無視すんなら、このスレに書く意味無いジャン。
自分の言いたいことだけ書き込んで、問題を解決する前に問題を拡大させて。
386デフォルトの名無しさん:2007/11/09(金) 23:41:00
ときどき厚顔無恥な自称初心者があらわれるが、
初心者ってのはみんなこうなのか、同一人物による荒らしなのか?

いずれにせよ、初心者名乗るヤツはNGな
387デフォルトの名無しさん:2007/11/09(金) 23:47:43
フローチャートを書くことに意味を見出せませんww
388デフォルトの名無しさん:2007/11/09(金) 23:47:59
>>306
こんなとこで質問せずに、図書室でも図書館でも行って入門書でも読んでろ。
Perl本なんて今じゃ人気なくて不良資産化してるはずだから、
いくらでも見つかるはずだ。
389デフォルトの名無しさん:2007/11/09(金) 23:48:33
ま、図解ってとこだな
390306:2007/11/09(金) 23:49:35
厚かましいのは無駄に文句ばっか言ってくる建設的でない人たち(少数)でしょう。
正直「そんなのもできないの?」
とか書きこんでる馬鹿とかなんなの?
意味ないでしょう、そんな書き込み。まあそれこそ同一人物による荒らしだと思いますがね。



アドバイスやご指摘を下さった方々には感謝しております。
どうもありがとうございました。
391306:2007/11/09(金) 23:51:08
>>388
ありがとうございます。僕がいると荒れるのでこのスレから出て図書館にこもることにします。
それでは。
392デフォルトの名無しさん:2007/11/10(土) 00:03:06
この反応は…
厨房工房説は正しかったようだな。
393306:2007/11/10(土) 00:07:27
すみません、うちの近所で図書館ってどの辺にあるでしょうか?
394306 ◆9ytKL4.iPs :2007/11/10(土) 00:12:19
いや・・・
偽物が多すぎなんですがwww

僕はそんな暴言吐かないですよw

皆さんどうもありがとうございました。
395デフォルトの名無しさん:2007/11/10(土) 00:28:09
今更トリ付けて何になる
396デフォルトの名無しさん:2007/11/10(土) 01:01:23
net-snmpで
# snmpwalk -v 2 -c public localhost .1.3.6.1.2.1.1
SNMPv2-MIB::sysDescr.0 = STRING: Linux localhost.localdomain 2.4.19-0vl11
SNMPv2-MIB::sysObjectID.0 = OID: NET-SNMP-MIB::netSnmpAgentOIDs.10
SNMPv2-MIB::sysUpTime.0 = Timeticks: (4714464) 13:05:44.64
SNMPv2-MIB::sysContact.0 = STRING: ***@***.ne.jp

みたいにバージョン、コミュニティ名、ホスト、OIDを指定してエージェントからデータを取得するってのを
Net::SNMP使ってやりたいんだけど

($session, $error) = Net::SNMP->session(
  -hostname => 'localhost',
  -version => 'v1',
  -community => 'public'
);

@result = $session->get_next_request(-varbindlist => .1.3.6.1.2.1.1);

とやっても@resultにHASH(0x*****)
みたいな値しか取れない

指定したOID以下の情報をずらっと取得するようにしたいんだけど
どうすればいいの?
397デフォルトの名無しさん:2007/11/10(土) 01:16:42
Data::Dumper
398デフォルトの名無しさん:2007/11/10(土) 01:21:18
>>396
http://search.cpan.org/~dtown/Net-SNMP-5.2.0/lib/Net/SNMP.pm#get_next_request()_-_send_a_SNMP_get-next-request_to_the_remote_agent
OIDの指定方法がおかしいが、ドキュメントに書いてある通り
ハッシュリファレンスが返ってきてるのだから、
好きにデリファレンスすればいい。
http://www.kt.rim.or.jp/~kbk/perl5.005/perlref.html#Using_References
399デフォルトの名無しさん:2007/11/10(土) 01:37:20
>>397
>>398

できた!ありがとう!
400 ◆TWARamEjuA :2007/11/10(土) 07:30:41 BE:1633853-2BP(6825)
工場ラインの現場でも、設備の吐き出すデータをメーカ製の糞高くて融通の効かないうんこアプリで効率悪く管理するよりも、
cronで定時計測、perlでちょこまか好きなように集計解析管理している方が精神衛生上にも良かったりします♪
・・・おかげで夜中に携帯が鳴ったりするけれども(´・ω・`)@数値異常検出とか警報とか

♯シーケンサをどうにかして撲滅したい。。。@殊にξ菱
401デフォルトの名無しさん:2007/11/10(土) 08:53:36
ここはあなたの日記帳ではありません
402デフォルトの名無しさん:2007/11/10(土) 11:12:18
>>395
なんだかんだであと半年くらい
こういう居座り方をするつもりなのかも。
403デフォルトの名無しさん:2007/11/10(土) 13:36:17
>>297
> ActivePerlをインストールしたら
> OSが起動しなくなりました。
> Windwosロゴまでは表示されますが
> その後真っ暗です。
> セーフモードでの起動は出来ます。
> 復元でActivePerlインストール前にもどれば起動は出来ましたが
> ActivePerlを使いたいのです、

ずいぶん遅レスになってしまったが、おそらくレジストリが壊れている。
今後、ActivePerl に関係ないところでも障害が出てくる可能性が高い。
OSの修復インストール、再インストールなどをするしかあるまい。
404デフォルトの名無しさん:2007/11/10(土) 14:03:45
メインのスクリプト内である値をスカラで持ってるんだけど、
この値をモジュールから参照するにはどうすればいい?
our $hoge とかして、モジュールでは $::hoge とすれば
参照できるわけなんだけど、とっても美しくない気がしているの。
(ちなみに参照したいだけで書き換えはしない)
405デフォルトの名無しさん:2007/11/10(土) 14:12:57
$main::hoge

だが、そういう参照が必要になるってのは、
構造上の問題を孕んでいる可能性が高いと思う。
406デフォルトの名無しさん:2007/11/10(土) 14:56:51
その変数の値が色々と変わりしかも現時点での値を必要とする→むしろその変数ごとモジュールに切り出すべきじゃね?
ある時点の値が分かれば OK→new とかに渡す
407デフォルトの名無しさん:2007/11/10(土) 21:49:36
>>405-406
うん、多分今の構造が美しくないんだと思う。
誰かが作ったシステムに追加でモジュール書かなきゃいけなくなってねぇ。
最大の問題は俺がオブジェクト指向を知らないことなんだけどさw
プログラム書くのが本職ではないので知らなくても困らなかった。
ourのままやっちゃうかなぁ、う〜ん。
408デフォルトの名無しさん:2007/11/10(土) 23:10:58
他人の言うことを鵜呑みにするこたぁ無い。
趣味でプログラミングしてるんなら別だが
すでに出来上がって稼動しているシステムを
「ツーチャンネルで相談したら、こう言われたので」
というくだらない理由で
1から書き直すという愚考は会社にとって迷惑。
409デフォルトの名無しさん:2007/11/10(土) 23:48:49
>>408
「rewrite せよ」なんて誰も言ってないと思うが、、、
404氏がちょっとobjct指向覚えれば、最低限の修正で
済むんじゃないの?
410デフォルトの名無しさん:2007/11/11(日) 00:38:40
>>408
1から書き直しはさすがにしないぞ。
でも比較的楽に綺麗になるならある程度の修正は
やってみたいなぁとは思っている。

>>409
まぁなんというか簡単に「ちょっと」覚えられればいんだけどねw
411297:2007/11/11(日) 01:04:54
>>403
どうも、修復のためのSP2CD作ってました。

しかしなぜか再起動を繰り返していると起動するようになったので
Perlを別途保存しておいたやつを環境変数設定して再起動したら
問題なく起動した。そのごJcode.pm(Jcode.pl)をぶっこむと
起動しなくなった。どうやらこれが影響してるみたい。
フォトショの日本語フォントの表示が文字化けしてるのも関係あr・・・ないか

どちらにせよJcode使う必要があるので、修復が必要ぽいな
412デフォルトの名無しさん:2007/11/11(日) 17:42:23
>>411
Jcode モジュールは古いバージョンで必要なものだよ。
今のバージョン(5.8以降)では、標準で付いているEncode
モジュールを使うべき。
413デフォルトの名無しさん:2007/11/11(日) 23:20:58
文字コードの自動判別したい時ってEncodeだと役立たずだよね。
414デフォルトの名無しさん:2007/11/12(月) 01:48:13
でもJcodeの自動認識はかなり当てにならんかったような。
415デフォルトの名無しさん:2007/11/12(月) 02:10:20
やっぱり &jcode'getcode ですよね。と書いておけばいいのかな。

>>411は記述に謎が多いけど(Jcode.pm と jcode.pl の区別とか)
Jcode.pm使用の既存スクリプトをローカルでごにょごにょするんだろうとか
5.6でも動くものを書こうとしてるんだろうとか(たぶん違うけど)
思い込んで、ニヤニヤ眺めていればいいと思うんだ。
416デフォルトの名無しさん:2007/11/12(月) 05:26:17
レンタルサーバはPerl5.0が多いから・・・
417デフォルトの名無しさん:2007/11/12(月) 06:37:39
誰か俺とMSNメッセしようぜ 暇なんだよ
[email protected]
418デフォルトの名無しさん:2007/11/12(月) 14:29:03
fack you
419デフォルトの名無しさん:2007/11/12(月) 14:43:12
>>418
oh,,, miss spell
"Fuck you"
420デフォルトの名無しさん:2007/11/12(月) 19:14:12
>419
Fuck you
421デフォルトの名無しさん:2007/11/12(月) 20:49:51
pod2htmlについて一つ質問があるのですがここでよいでしょうか。

=item 日本語

とかかれたPODをHTMLに変換すると、<a name="___?_?_?__?_" class="item">のように文字化けしてしまいます。
PODファイルの文字コードはS-JISやUTF-8など、いろいろ試してみたのですがどれもだめでした。解決法はないでしょうか。
422デフォルトの名無しさん:2007/11/12(月) 23:44:05
> "=encoding encodingname"
> This command is used for declaring the encoding of a document. Most users won’t need this; but if your
> encoding isn’t US-ASCII or Latin-1, then put a "=encoding encodingname" command early in the document so
> that pod formatters will know how to decode the document. For encodingname, use a name recognized by the
> Encode::Supported module. Examples:
>
> =encoding utf8
>
> =encoding koi8-r
>
> =encoding ShiftJIS
>
> =encoding big5

perldoc perlpod より
423デフォルトの名無しさん:2007/11/13(火) 02:30:19
=encodingを指定したら正しく表示されるようになりました。
ありがとうございました。
424デフォルトの名無しさん:2007/11/13(火) 10:37:09
>>420
good!!
425デフォルトの名無しさん:2007/11/13(火) 11:54:45
雑誌に掲載されていた 192.168.0.0/24 のようなアドレス記述を
192.168.0.0
192.168.0.1
192.168.0.2
:
と変換するプログラムですが、
#!/usr/local/bin/perl
if( $#ARGV eq -1 ){
die();
}
($ADDR,$BITL) = split( /\//, $ARGV[0] );
($S1,$S2,$S3,$S4) = split( /\./, $ADDR );
$MASK=0;
if( $BITL >= 24 ){
$mbit=0x80;
for($CNT=0;$CNT<($BITL-24);$CNT++){
$MASK |= $mbit;
$mbit = $mbit>>1;
}
}
else{
die();
}
$LEN = ( $MASK^255 ) ;
for($CNT=$S4;$CNT<=($S4+$LEN);$CNT++){
print "$S1\.$S2\.$S3\.$CNT\n";
}
このままだと192.168.0.0/15のようなサブネットのアドレス変換は行うことが
できません。上のプログラムを192.168.0.0/15のようなアドレス変換にも対応
できるようにするにはどうすればいいでしょうか?
また、同じようなプログラムはないでしょうか?
426デフォルトの名無しさん:2007/11/13(火) 11:59:43
24を15にすりゃいいんじゃね?
427デフォルトの名無しさん:2007/11/13(火) 14:14:19
>>425 また宿題か?
428デフォルトの名無しさん:2007/11/13(火) 14:16:52
ポートスキャンの香り
429デフォルトの名無しさん:2007/11/13(火) 15:20:56
文字列内部の、正規表現にマッチした部分を「取得」(置換ではなく…)したいのですが
どのようにすれば良いでしょうか。

たとえば "apple++orange@@-pie" から /([a-z]+)[^a-z]/ にマッチするものを順次取得、
つまり "apple", "orange", "pie" を取得したい、という目的です。
430デフォルトの名無しさん:2007/11/13(火) 15:50:54
>>429
m///
431デフォルトの名無しさん:2007/11/13(火) 15:53:04
>>430はミス

>>429
m//gをループに入れて回す
432デフォルトの名無しさん:2007/11/13(火) 16:42:19
>>429
"apple+", "orange@" しかマッチしないだろ
433デフォルトの名無しさん:2007/11/13(火) 17:04:00
perl -le 'print q{apple++orange@@-pie} =~ /(\w+)/g ;'

後は自分で勉強しろ、配列に入れるトコとか正規表現とか、、、
434デフォルトの名無しさん:2007/11/13(火) 17:30:23
perlって匿名関数使えるんですか?
435デフォルトの名無しさん:2007/11/13(火) 17:31:14
はい
436デフォルトの名無しさん:2007/11/13(火) 20:16:59
まず、ド素人がperlイジってすみません。土下座します。生まれてきてすみません。

while (-e "$a$b")
{
print 〜
}

の"-e"の意味がわかりません。
$aと$bが同じでない間はprint〜を実行、って意味になるんですか?
ageですみませんが教えて下さい。
437デフォルトの名無しさん:2007/11/13(火) 20:29:36
変数$aと$bを連結した名前の
ファイルもしくはディレクトリがあれば真
438デフォルトの名無しさん:2007/11/13(火) 20:30:19
ありがとうございました!
439デフォルトの名無しさん:2007/11/13(火) 20:53:52
readline(*STDIN) でコンソールから文字列を入力させていたんですが
エコーが邪魔なので消したいです。どうしたらいいでしょうか。
440デフォルトの名無しさん:2007/11/13(火) 21:05:43
Term::Getch
441デフォルトの名無しさん:2007/11/13(火) 21:18:37
# 手抜き
system("stty -echo");
442デフォルトの名無しさん:2007/11/13(火) 21:44:36
>>441
なるほどw perlでどうこうする前に先ず試すべきでした。

>>440
こういうのがあるんですね。使ってみます。

ありがとうございました。
443デフォルトの名無しさん:2007/11/13(火) 23:00:02
perlインストールしたらHDの容量が4GBぐらい増えたんだが
これはなんでだ?
インストールするとき、えらい長かったんだが。
444デフォルトの名無しさん:2007/11/13(火) 23:42:44
>>443
それはperlとは関係なくね?
空き容量が4G増えたとしたらなんか消したってことだろ。常考。

インストール作業中にファイル整理してなかったか?
445429:2007/11/14(水) 11:51:21
>>430-433
ありがとうございます。これをヒントに勉強し直します。
446デフォルトの名無しさん:2007/11/14(水) 16:22:10
しかしKENTは本当に害悪だな
447デフォルトの名無しさん:2007/11/14(水) 18:27:52
俺は先人に敬意を払うが
448デフォルトの名無しさん:2007/11/14(水) 18:42:03
>>447
無差別に敬意を払うのは、だれにも敬意を払わないのと同じ。
449デフォルトの名無しさん:2007/11/14(水) 18:43:57
無差別に敬意を払うとは書いていない
450デフォルトの名無しさん:2007/11/14(水) 19:48:15
>>449
差別するわけか
451デフォルトの名無しさん:2007/11/14(水) 20:02:24
名前出すなよ。鬱陶しい。
452デフォルトの名無しさん:2007/11/14(水) 20:06:05
もはやKENTの売名としか思えなくなってきた。
453デフォルトの名無しさん:2007/11/14(水) 20:25:41
>>450

同和、解同乙
454デフォルトの名無しさん:2007/11/14(水) 23:58:18
>>449
>>448の論理に乗る必要なくね?
455デフォルトの名無しさん:2007/11/15(木) 00:07:37
>>454
449の鋭い論理の前にボロクソに言い負けて涙目な448乙。
456デフォルトの名無しさん:2007/11/15(木) 00:33:55
理由はどうあれ KENT に複雑な思いがあることは分かったよ
457デフォルトの名無しさん:2007/11/15(木) 00:46:14
うおw 俺>>448になっちまったのか?!
ってか>>449が鋭い論理って・・・。
ズレてるから補正してやろうと思ったが、とりあえずそのままズレてろw
458デフォルトの名無しさん:2007/11/15(木) 00:47:00
while ($perlDevelper s/KENT/who is next/) {}
459デフォルトの名無しさん:2007/11/15(木) 07:36:13
>>457
> うおw 俺>>448になっちまったのか?!
うん、昨日の18:42:03から、このスレでは君は448。
苦しい現実だから、綺麗サッパリ忘れたいんだろうけどね。
460デフォルトの名無しさん:2007/11/15(木) 08:33:48
お前のような気がする
461デフォルトの名無しさん:2007/11/15(木) 10:23:14
こういうときは上から目線の奴のほうがしねばいい
462デフォルトの名無しさん:2007/11/15(木) 10:25:18
まあ実際KENT WEBの影響力は馬鹿には出来ないよ。
WebPGの中でも特にKENTは匂いが違うしな。
何というか…“本質”みたいな物が見えているよね、KENTは…
463デフォルトの名無しさん:2007/11/15(木) 11:16:00
お世話になります。
ご存知の方いらっしゃいましたら、
教えていただけませんでしょうか。
以下の様にデータセットの参照を動的に行いたいのですが、
$tmpColumnNameのところで参照ができない状況です。
この様な動的参照をする際には、
どの様に対応すればよいか教えていただけませんでしょうか。

$tmp = ref(($RecordSet->{Fields}->{$tmpColumnName}->{Value}));
464デフォルトの名無しさん:2007/11/15(木) 11:20:10
エスパー待ちの質問に質問。
そのrefはなんのためにあるん?
465デフォルトの名無しさん:2007/11/15(木) 11:23:48
>>464
失礼しました。
ref()は無くしてください。
$tmp = ($RecordSet->{Fields}->{$tmpColumnName}->{Value});
print("$tmp");
の様になります。
466デフォルトの名無しさん:2007/11/15(木) 11:26:52
値を入れてる部分は?
467デフォルトの名無しさん:2007/11/15(木) 11:28:49
$tmpColumnNameにカラム名を順次入れて参照するループ内の一部になります。
468デフォルトの名無しさん:2007/11/15(木) 11:58:00
  /'           !   ━━┓┃┃
-‐'―ニ二二二二ニ>ヽ、    ┃   ━━━━━━━━
ァ   /,,ィ=-;;,,, , ,,_ ト-、 )    ┃               ┃┃┃
'   Y  ー==j 〈,,二,゙ !  )    。                  ┛
ゝ.  {、  - ,. ヾ "^ }  } ゚ 。
   )  ,. ‘-,,'   ≦ 三
ゞ, ∧ヾ  ゝ'゚       ≦ 三 ゚。 ゚
'=-/ ヽ゚ 。≧         三 ==-
/ |ヽ  \-ァ,          ≧=- 。
  ! \  イレ,、         >三  。゚ ・ ゚
  |   >≦`Vヾ        ヾ ≧
  〉 ,く 。゚ /。・イハ 、、     `ミ 。 ゚ 。 ・
469デフォルトの名無しさん:2007/11/15(木) 12:29:18
my $RecordSet = {
Field1 => 'Value1',
Field2 => 'Value2',
Field3 => 'Value3',
};

my $tmpColumnName = 'Field2';
my $tmp = $RecordSet->{$tmpColumnName};
print $tmp;

こうなんじゃないかと予想
470デフォルトの名無しさん:2007/11/15(木) 12:35:23
またエラー隠蔽者か
471デフォルトの名無しさん:2007/11/15(木) 13:14:00
未熟な質問者によくある過ちの一つに、
プログラムの動作結果を「自分の望み通り」と「それ以外」の2種類だけで捉える、
っていうのがあるな。

「思った通りになりません」というのは、やってしまい得る無数のことのうちの
特定の一つではなかった、と言ってるだけで、まともな情報になってない。
「あなたのお名前は?」と訊かれて「太郎ではありません」と答えるようなもんだ。全然足りねえよ。
「どうなったのか」を書け。エラー報告も含めて。
472デフォルトの名無しさん:2007/11/15(木) 13:26:17
失礼しました。
エラーですが、何も表示されないんです。。。
473デフォルトの名無しさん:2007/11/15(木) 13:28:00
第2段階エスパーの出現が求められています。
474デフォルトの名無しさん:2007/11/15(木) 13:33:30
コードを全て曝け出せ
475デフォルトの名無しさん:2007/11/15(木) 13:34:24
もう少し、書き加えさせていただきます。

$strSQL = "SELECT * TABLE_NAME";
$intArrayNumber = 0;
$RecordSet->Open($strSQL, $objDB);
while(!$RecordSet->EOF and $RecordSet->{RecordCount} != 0){
print($RecordSet->{Fields}->{$arrColumnName[$intArrayNumber]}->{Value});
$intArrayNumber = $intArrayNumber + 1;
}

ここで、$arrColumnName[$intArrayNumber]とありますが、
ループ内で該当変数を表示させようとするとすべて表示されます。
476デフォルトの名無しさん:2007/11/15(木) 13:41:00
while($intArrayNumber != $intArrayMax){
print($arrColumnName[$intArrayNumber]."\n"); ←ここは表示できます。
$tmp = ($RecordSet->{Fields}->{$arrColumnName[$intArrayNumber]}->{Value}); ←ここでカラムのデータを取りたいが、取り出しができない。(エラー表示はなし)
print($tmp);
$intArrayNumber = $intArrayNumber + 1;
}
477デフォルトの名無しさん:2007/11/15(木) 13:46:03
そのハッシュリファレンスの固まりみたいなコード、
ひとつひとつ分解して、中身を丁寧に調べるしかないんじゃねーの?

SQLが間違っていて、最初から結果が空だったっていう
オチのような気もするが。
478デフォルトの名無しさん:2007/11/15(木) 13:47:00
>>472
Perlのエラーはブラウザではなく、Webサーバーのログを見なければならない
apache/logs/error.logを参照のことと一応いっておく
479デフォルトの名無しさん:2007/11/15(木) 13:49:16
>>476
配列参照だから print(@$tmp[0]);  で出ないかい?
480デフォルトの名無しさん:2007/11/15(木) 13:56:17
Data::Dumper 使って$RecordSet が実際にどういうデータか確認するといいと思うよ

481デフォルトの名無しさん:2007/11/15(木) 13:58:16
皆様ありがとうございます!
ご指摘・アドバイス頂いた点を確認してみます。
482デフォルトの名無しさん:2007/11/16(金) 03:48:48
1から1000までの乱数の集合(@ransuu)があるとき
1から250までの数字をA、251から500までをB、501から750までをC
751から1000までをDとわけたいんですが、どのようにしたらよいかアドバイスを
いただけないでしょうか?

if ($ransuu){
s/$ransuu/A/;
}

elsif ($ransuu){
s/$ransuu/B/;
}

elsif ($ransuu){
s/$ransuu/C/;
}

elsif ($ransuu){
s/$ransuu/D/;
}

「ある数字が1から250だった場合」のように範囲の決め方がわかりません。
483デフォルトの名無しさん:2007/11/16(金) 04:46:16
if($ransu >= 1 && $ransu <= 250)
484デフォルトの名無しさん:2007/11/16(金) 05:09:09
ありがとうございます!
助かりました!
485デフォルトの名無しさん:2007/11/16(金) 05:23:02
それにしてもKENTは本当に害悪すぎる
486デフォルトの名無しさん:2007/11/16(金) 05:44:05
まあまあそんなにKENTに嫉妬すんなって(笑)
自分より上の立場の人間が憎いのは分かるよ(笑)
487デフォルトの名無しさん:2007/11/16(金) 06:56:28
             ____
           /      \
          / ─    ─ \
        /   (●)  (●)  \
        |      (__人__)     |    それはない
         \     ` ⌒´    ,/
 r、     r、/          ヘ
 ヽヾ 三 |:l1             ヽ
  \>ヽ/ |` }            | |
   ヘ lノ `'ソ             | |
    /´  /             |. |
    \. ィ                |  |
        |                |  |
488デフォルトの名無しさん:2007/11/16(金) 07:33:27
嫉妬とかどうしたらそういう発想が出てんだ
489デフォルトの名無しさん:2007/11/16(金) 07:35:38
どこかのサイトに載っていたインタビューかなんかで、KENT本人も
それ言ってたね。

―いろいろ非難もされてるようですが
「ああ、あれはぼくに嫉妬してるんです」

とか
490デフォルトの名無しさん:2007/11/16(金) 10:10:49
粘着も擁護もどっちもウザい
491デフォルトの名無しさん:2007/11/16(金) 10:21:52
>>488
>>486の論理に乗る必要なくね?
492デフォルトの名無しさん:2007/11/16(金) 10:27:13
スレ違い
こっちでやれ
http://pc11.2ch.net/test/read.cgi/php/1078991985/
493デフォルトの名無しさん:2007/11/16(金) 11:28:31
>>489
キャラ全然違うってw
494デフォルトの名無しさん:2007/11/17(土) 20:16:15
http://oshiete.new-akiba.com/archives/2007/01/webarchivedlwarrick.html
ここを見ながらコマンドプロンプトを操作しているのですが
ダウンロードされる段階まで行っても
Can't locate strict.pm in @INC (@INC contents: .) at C:\Program Files \warrick\warrick.pl line8.
BEGIN failed--compilairion aborted at C:\Program Files \warrick\warrick.pl line8.
と出ます。

意味もそもそも分からないのですが、解決方法教えてください
最新版入れてます。
495デフォルトの名無しさん:2007/11/17(土) 20:27:32
モジュールについての質問なんだけど

Net::SNMPとData::Dumper使ってMIBを取ると
$VAR1 = {
  '.1.3.6.1.2.1.1.1.0' => 'Linux localhost.localdomain 2.6.22.9-91.fc7
  '.1.3.6.1.2.1.1.2.0' => '.1.3.6.1.4.1.8072.3.2.10',
  '.1.3.6.1.2.1.1.4.0' => 'Root <root@localhost> (configure /etc/snmp/snmp.local.conf)'
};

って返ってくるけどこれをnet-snmp使ったときみたいに
SNMPv2-MIB::sysDescr.0 = STRING: Linux localhost.localdomain 2.6.22.9-91.fc7
SNMPv2-MIB::sysContact.0 = STRING: Root <root@localhost> (configure /etc/snmp/snmp.local.conf)
SNMPv2-MIB::sysName.0 = STRING: localhost.localdomain

みたいにOIDじゃなくて名前で返すようにって出来ない?
496デフォルトの名無しさん:2007/11/18(日) 18:19:41
Webの最終更新時刻を取得したいんですけど,どのようにすればよいのかわかりません.

例:
http://www.hogehoge.com/index.htmlの最終更新時刻を知る


LWPモジュールを使って出来そうなんですが...

ご存知の方,ご教授ください.

497 ◆TWARamEjuA :2007/11/18(日) 19:31:37 BE:1306962-2BP(6825)
Last-Modified: Tue, 10 Apr 2007 01:57:19 GMT
だそうです♪@404だけれどもね
498デフォルトの名無しさん:2007/11/18(日) 20:46:54
use HTTP::Lite;
use HTTP::Date;

my $url = 'http://www.unko.com/';
my $http = new HTTP::Lite;
$http->{'method'} = 'HEAD';

my $status = $http->request($url) or die 'web ページ取得に失敗しました: '.$!;
print $url,' ',$status,"\n";
if ($status eq '200') {
  my $Last_Modified = $http->{'resp-headers'}->{'Last-Modified'}[0];
  print $Last_Modified,"\n";
  my $mtime = str2time($Last_Modified);
  if ($mtime) {
    my ($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst) = localtime($mtime); # = gmtime($mtime);
    print sprintf("%04d/%02d/%02d %02d:%02d:%02d\n",
          $year + 1900, $mon +1, $mday, $hour, $min, $sec);
  }
}
499デフォルトの名無しさん:2007/11/18(日) 21:31:54
>>498
おおっ!
ありがとうございます.

LWPでもヘッダから更新時刻を取得できるようなので,こちらも同じことをしてみました.
が,ヘッダにLast Modifiedが付加されない場合もあるので,ムリっぽいです.

必ず,更新時刻を取得できるみたいな方法ないですかねぇ.
500デフォルトの名無しさん:2007/11/18(日) 21:38:28
>>499
無いよ
501デフォルトの名無しさん:2007/11/18(日) 23:42:25
perlってopenでプログラム実行できるっけ?つーかやり方教えてください
catコマンド引数つけて実行したりできる?
502デフォルトの名無しさん:2007/11/18(日) 23:49:48
>>501

$programResult = `ls -a /usr`;
print "$programResult¥n";
503デフォルトの名無しさん:2007/11/18(日) 23:53:43
パールだけじゃなくプログラミング初心者なんだけど
自動的にブラウザを起動し任意のところに書き込むみたいなこともできますか?
ブログを複数やってるんですが、同じ作業をどうにかしたいと思いあちこちみてまわってます。

メールの本文から指定のURL抽出するみたいなこともできればとおもってますが。
504デフォルトの名無しさん:2007/11/19(月) 00:03:50
実行時に年と月を与えるとそのカレンダーを表示するperlプログラム
作ってもらえませんか?
UNIXのcal?とかを使うらしいんですが
505デフォルトの名無しさん:2007/11/19(月) 00:08:21
>>503
直接POSTでも投げたら?
多分微妙に板違いだからWebProg板に逝くといいよ

>>504
今日一番ワロタw
506デフォルトの名無しさん:2007/11/19(月) 00:16:32
>>504
それくらい自分でできるだろwww
507デフォルトの名無しさん:2007/11/19(月) 00:31:10
cal使っていいのかよw
508デフォルトの名無しさん:2007/11/19(月) 00:33:45
open使えばいいだけじゃね?
509デフォルトの名無しさん:2007/11/19(月) 00:39:24
もったいぶらないでソースください_ト ̄|○
510デフォルトの名無しさん:2007/11/19(月) 00:50:50
>>509

心配するな
もったいぶってるんじゃなくて、俺達には出来ないんだ

な、みんな?そうだろ?
511デフォルトの名無しさん:2007/11/19(月) 00:52:31
学生時代の宿題にCGIとして作ったやつなら
512デフォルトの名無しさん:2007/11/19(月) 00:56:37
やべぇww教えてあげようと思ったら俺の環境calがうまく動かない・・・
引数2個指定すれば普通は年、月で指定できるのに年までしか指定できねぇ

とりあえずヒントやるから自分でがんばれ
#!/usr/bin/perl
open(EXE, "cal 2008|");
while($buf=<EXE>){
print $buf;
}

513デフォルトの名無しさん:2007/11/19(月) 01:02:38
もう誰も教えてくれないからこれでいいや
514デフォルトの名無しさん:2007/11/19(月) 01:12:00
#!/usr/bin/perl

use Disp::Cal;

$cal = new Disp::Cal;
$cal->setYear(2007);
$cal->setMonth(12);
$cal->output(\*STDIN);

後は任せた
515デフォルトの名無しさん:2007/11/19(月) 01:13:20
system 'cal 2008';
516デフォルトの名無しさん:2007/11/19(月) 03:42:14
#!/usr/bin/perl

{
package Disp::Cal;

my $VERSION = "0.01";

sub new {
my $self = shift;
my @t = localtime;
bless {"YEAR" => ($t[5] + 1900),
"MONTH" => ++$t[4]}, $self;
}
sub setYear {
my $self = shift;
my $year = abs(int(shift));
if($year < 1970 or $year > 2037){ die "bad year" }
$self{"YEAR"} = $year;
}
sub setMonth {
my $self = shift;
my $month = abs(int(shift));
if($month < 1 or $month > 12){ die "bad month" }
$self{"MONTH"} = $month;
}
sub output {
my $self = shift;
my $handle = shift;
syswrite($handle, `cal $self{MONTH} $self{YEAR}`);
}
}
517デフォルトの名無しさん:2007/11/19(月) 03:44:47

$cal = new Disp::Cal;
$cal->setYear(2007);
$cal->setMonth(12);
$cal->output(\*STDIN);

__END__
518デフォルトの名無しさん:2007/11/19(月) 09:59:48
$cal = new Disp::Cal;
$cal->setYear(2007);
$cal->setMonth(12);
$cal->output(\*STDIN);
$cal->output(\*STDIN);

なぜか二重出力される様に改良しました
519デフォルトの名無しさん:2007/11/19(月) 11:01:30
>>516
$VERSIONはourのほうがよくね?
520デフォルトの名無しさん:2007/11/19(月) 12:12:14
>>516-518
無視すりゃいいのに。
ここの住人ってお人好しなのか、ただのマゾなのか。
521デフォルトの名無しさん:2007/11/19(月) 12:52:28
>>520
罵倒していないで、なぜ無視するべきなのかを説明して説得に勤めること。
522デフォルトの名無しさん:2007/11/19(月) 16:33:24
system 'cal 2008'; たった1行でできるのに、わざわざ”車輪のナントカ”する必要は無いだろ。
523デフォルトの名無しさん:2007/11/19(月) 16:39:48
chrootされた環境にcalがあるとは限らない。
524デフォルトの名無しさん:2007/11/19(月) 16:54:47
calを使っていいっていう条件なんだから、
ファイルシステムから全体からcalを探索すればいいんじゃなかろうか。
525デフォルトの名無しさん:2007/11/19(月) 17:24:47
>>522
車輪の交換?
526デフォルトの名無しさん:2007/11/19(月) 23:35:17
四角くない車輪ならまぁいんじゃね?
527デフォルトの名無しさん:2007/11/20(火) 00:07:11
Audio::Beep のサンプルを鳴らしたいのですが
(<>) ここにファイル名入れても鳴らないのですが。。。

#!/usr/bin/perl -w

# use this program to play the examples in this directory
# use: ./beep_player.pl music_file

use strict;
use Audio::Beep;

undef $/;

my $beeper = Audio::Beep->new();
$beeper->play(<today>);

528デフォルトの名無しさん:2007/11/20(火) 01:36:53
>>527
デバッグしろ
529デフォルトの名無しさん:2007/11/20(火) 06:42:40
だれか>>494について教えてくれ
ずっと昔の過去スレに似たような質問があって、答えに

見つからんって言われてるんだから、入れればいいじゃん。
http://search.cpan.org/author/SBECK/DateManip-5.42a/

って書かれてたんだけど、リンク切れで分からん。
530デフォルトの名無しさん:2007/11/20(火) 08:23:13
>>529
> って書かれてたんだけど、リンク切れで分からん。

バージョンが変わったのかと推測する

検索してみる


531デフォルトの名無しさん:2007/11/20(火) 17:19:25
>>529
DateManip って warrick と無関係じゃん、、、
ttp://warrick.cs.odu.edu/warrick.html
斜め読みしても出て来ないし、、、

そもそも494はstrict.pmがねえってエラーで、それって@INCが上手く
設定されてないだけじゃねえの?
532デフォルトの名無しさん:2007/11/20(火) 19:20:58
>>498 POSIX::mktime
533デフォルトの名無しさん:2007/11/21(水) 01:19:33
vista使いですけど、OS規定のプログラムでファイルを実行させるにはどうしたらいいですか?
534デフォルトの名無しさん:2007/11/21(水) 01:24:36
system($file);
535デフォルトの名無しさん:2007/11/21(水) 01:25:47
mkdir -pを行える標準モジュールってありますか?
536デフォルトの名無しさん:2007/11/21(水) 01:38:01
system 'mkdir -p';
537デフォルトの名無しさん:2007/11/21(水) 02:04:41
自分のHDDの内容を2chで人に尋ねるのって哀しいよね
538デフォルトの名無しさん:2007/11/21(水) 16:34:11
>>535
File::Pathのmkpath
539デフォルトの名無しさん:2007/11/21(水) 20:55:05
perlでバックグラウンドで処理を動かすにはどうしたらいいでしょうか?
shellで言うと、
hoge1.sh &
hoge2.sh &
hoge3.sh &
みたいな感じです。

そして、それぞれのバックグラウンド処理の終了を監視できるといいのですが。
540デフォルトの名無しさん:2007/11/21(水) 21:25:05
>>539
fork()
541539:2007/11/21(水) 21:57:59
>>540
ありがとうございます。
検索したところ以下のページを発見しました。
ttp://www.stackasterisk.jp/tech/program/perl04_02.jsp
この例だとバックグラウンドで動かしているのはひとつですが、
複数の処理を同時にバックグランドで動かしたい場合はどうしたらいいでしょうか。
542デフォルトの名無しさん:2007/11/21(水) 22:03:57
増やしたいだけ親プロセスからfork()を繰り返す。
543デフォルトの名無しさん:2007/11/21(水) 22:07:12
このエラーの解決方法を教えてください
-----
C:\work>pp -o a.exe a.pl
Can't load 'C:/Perl/lib/auto/IO/IO.dll' for module IO: load_file:指定されたプロ
シージャが見つかりません。 at C:/Perl/lib/XSLoader.pm line 64.
at C:/Perl/lib/IO.pm line 11
Compilation failed in require at C:/Perl/lib/IO/Handle.pm line 263.
BEGIN failed--compilation aborted at C:/Perl/lib/IO/Handle.pm line 263.
Compilation failed in require at C:/Perl/lib/IO/Seekable.pm line 101.
BEGIN failed--compilation aborted at C:/Perl/lib/IO/Seekable.pm line 101.
Compilation failed in require at C:/Perl/lib/IO/File.pm line 133.
BEGIN failed--compilation aborted at C:/Perl/lib/IO/File.pm line 133.
Compilation failed in require at -e line 405.
C:\Perl\site\bin/pp: Failed to extract a parl from 'PAR::StrippedPARL::Static' t
o file 'parl3qS37ar.exe' at C:/Perl/site/lib/PAR/Packer.pm line 1149, <DATA> lin
e 1.
544539:2007/11/21(水) 22:15:32
>>542
すいません、今perlの環境がないので試せませんが、こんな感じでしょうか。
それとバックグラウンド処理の結果を受け取るにはどうしたらいいでしょうか。
テンポラリファイルに書き出し→読み込みは思いつきましたが、なるべくファイルを作りたくないので。

if( $pid = fork ) {
 # なにもしない
} elsif (defined $pid) {
 # バックグラウンド処理1
 exit;
}
if( $pid = fork ) {
 # なにもしない
} elsif (defined $pid) {
 # バックグラウンド処理2
 exit;
}
if( $pid = fork ) {
 # なにもしない
} elsif (defined $pid) {
 # バックグラウンド処理3
 exit;
}
545デフォルトの名無しさん:2007/11/21(水) 22:21:23
>>544
> それとバックグラウンド処理の結果を受け取るにはどうしたらいいでしょうか。

perlipcを読んで、プロセス間通信のモデルと枠組みを理解しろ。
546デフォルトの名無しさん:2007/11/21(水) 22:43:19
う〜ん、IPC::Open3してselectしてSIGCHDをキャッチしてwaitpidするのが
今でもベストなのか?
547デフォルトの名無しさん:2007/11/21(水) 22:48:36
Parallel-ForkManagerとかProc-Forkとかいうのがあるようだな。
548539:2007/11/21(水) 23:13:09
>>545-547
ありがとうございます。
調べてみます。
549デフォルトの名無しさん:2007/11/22(木) 00:38:52
>>539のシェルの場合、結果はどのように受け取るつもりなんだ?

まあそれはともかく>>539にはファイルでやりとりすることをお勧めする。
550539:2007/11/22(木) 01:14:57
>>549
シェルは説明の為に例えで書いたことですが、やるとしたらファイルしか思いつきません。
perlだったら他の方法でやり取りできるのかと思って質問させてもらいました。
perlipcをちらっと見ましたが理解するのに時間がかかりそうなので、とりあえずファイルで対応します。
551デフォルトの名無しさん:2007/11/22(木) 01:52:14
>>538
ありがとうございます!
自力で作ろうとFile::Basenameまでは触れてました…。
552デフォルトの名無しさん:2007/11/22(木) 02:49:51
添付ドキュメントのperlmodlibに一覧があるんだがな。
553デフォルトの名無しさん:2007/11/22(木) 15:47:20
Web::Scraperを入れようとしたらテストに通らず困っています。

# prel -MCPAN -e shell
cpan> install Web::Scraper
...
t/12_html.................ok  
t/13_textnode.............1/4
#   Failed test 'RAW HTML'
#   at t/13_textnode.t line 20.
#          got: ' bar &#38; baz'
#     expected: ' bar & baz'
# Looks like you failed 1 test of 4.
t/13_textnode............. Dubious, test returned 1 (wstat 256, 0x100)
 Failed 1/4 subtests
t/14_absolute_nested......ok  
t/15_absolute_hash........ok  
...

make testまでは特にエラーもなく進むのですが、13_textnodeの
RAW HTMLのテストのみ失敗してしまいます。

Result: FAIL
Failed 1/18 test programs. 1/39 subtests failed.
make: *** [test_dynamic] エラー 255

事前に入れておくべきモジュールなどはありますでしょうか。Bundle::CPANは入れました。
考えられる要因などありましたら、お教えください。原因解決に提示すべき情報があれば
提示します(他にどのようなものを提示すればよいのか分かっていません…)
554 ◆TWARamEjuA :2007/11/22(木) 20:59:24 BE:1961429-2BP(6825)
555デフォルトの名無しさん:2007/11/23(金) 07:41:21
>>553
ttp://rt.cpan.org/Public/Bug/Display.html?id=29733
にて作者本人が同様(554)のケースの人に
「HTML::TreeBuilderをアップグレードしてみ?」
つってるぞ。上記の人はそれで解決。
今回のが解決するかどうかは知らんが、
cpan の当該モジュールの項=> View/Report Bugs
のリンク辺りを踏んで内容を斜め読む事をお勧めする。
556デフォルトの名無しさん:2007/11/23(金) 16:15:47
失礼します。
変数を動的に呼び出したいのですがどうしたらできますか?

例えば、変数$hoge1,$hoge2,$hoge3という変数が3つあるとして
$callという変数に上記3つうち扱いたい変数の変数名を代入します。
$call = 'hoge2';
この後で、$callを使って$hoge2に代入したり読込んだりしたいです。

教えてください、お願いします。
557デフォルトの名無しさん:2007/11/23(金) 16:38:22
>>556
変数の「参照」になります。

$hoge1=10; $hoge2=20; $hoge3=30;
print "$hoge1,$hoge2,$hoge3\n";

$call = *hoge2;
${$call}++;

print "$hoge1,$hoge2,$hoge3\n";

>10,20,30
>10,21,30
558デフォルトの名無しさん:2007/11/23(金) 16:42:08
>>556
普通リファレンスを使うと思うのだが、どうしてもどうしてもどうしても
どうしてもどうしてもどうしてもどうしても変数名じゃないとダメなのか?
559デフォルトの名無しさん:2007/11/23(金) 17:16:04
>>556
お勧めできない(俺が思うに)最悪の方法であるが、シンボリックリファレンスを
用いることにより可能である。

最悪な点
・読みにくい
・判りにくい
・遅い
・時代遅れ

やりかた
$call = 'hoge2'
print ${"$call"};

ハードリファレンスを用いるか、あるいは
%hash = ('hoge1' => 10,'hoge2' => 20,'hoge3' => 30);
$call = 'hoge2;
print $hash{$hoge2};
560556:2007/11/23(金) 17:40:15
皆さんレスありがとうございました。
>>557
ありがとうございました。やりたい事ができました。
>>558
すいません。リファレンスの存在自体知らなかった者ですので・・・

あの・・・僕は今までずっとuse strictとmyの変数宣言を使っていたのですが
>>557さんの例だと結果が
>10,20,30
>10,20,30
と変わってきました。
あと、スカラー変数ではなくハッシュの場合で
変数名を動的に呼び出せれるかテストしてみたんですが
use strictを使わない場合はうまくいきましたが
use strictを使うとエラーが出てしまいました。
ちなみにこんなエラー(renhogeはハッシュの名前)
Can't use string ("renhoge") as a symbol ref while "strict refs" in use at testRef line 30.

普通use strict とかは使わないほうがいいんですかね?
561デフォルトの名無しさん:2007/11/23(金) 18:10:31
>>560
use strict;は、使ったほうがよい。この「use strict;」は、「strictプラグマ」などと呼ばれる。

>>559のようなシンボリックリファンレンスという方法(${"$hoge"}というような方法)は、
今は使わないほうが良いとされているので、strictプラグマが使われているとエラーになる。

多分・・・
$hoge = "renhoge";
${"$hoge"}{"key"}
とかやったんじゃないのか?シンボリックリファレンスは使わないほうがいいと思う。
562デフォルトの名無しさん:2007/11/24(土) 01:54:54
ポインタを使いたいのですが良い方法あるでしょうか?
563デフォルトの名無しさん:2007/11/24(土) 03:22:31
use Pointer
564553:2007/11/24(土) 14:58:47
遅くなってすみません。

>>554
ありがとうございます。
現象としては、ほぼ同じだと思います

>>555
ありがとうございます。
HTML::TreeBuilderのアップグレードを試してみましたが、インストール
済みの3.23が最新のもののようでした。お教えいただいたView/Report Bugsを
読んでみましたが、まだ解決策は分かりません。


細かいことなのですが、インストールが成功する環境では
テスト進行中の表示で、スキップした際に
t/07-live...............skipped
        all skipped: LIVE_TEST not enabled
t/08-leak...............skipped
        all skipped: LEAK_TEST is not defined
と表示され、失敗する環境では
t/07-live.................skipped: LIVE_TEST not enabled
t/08-leak.................skipped: LEAK_TEST is not defined
というように、微妙にメッセージが異なります。
調べてみたら、Test::Harnessのバージョンが、成功する環境では2.64、
失敗する環境では3.03でした。これが関係あるかは分かりませんが、古い
バージョンに戻すのは他に影響が出そうだし、現在インストール可能な環境を
インストール不可になる危険を冒して検証するのも怖いので、どうしよう
かと思っています…。
565デフォルトの名無しさん:2007/11/25(日) 07:44:20
>>564
そっか、力になれなくてスマン。

source からインストールも試してみれば?(他の必要モジュールはCPAN経由で入れてさ)
- Web::Scraper の必要モジュールは .pm に書いてある。
- README を読めば source からのインストール方法も書いてある。
package Web::Scraper;
use strict;
use warnings;
use Carp;
use Scalar::Util qw(blessed);
use List::Util qw(first);
use HTML::Entities;
use HTML::Tagset;
use HTML::TreeBuilder::XPath;
use HTML::Selector::XPath;
use UNIVERSAL::require;

今回のと関係ないけど、CPANインストールにコケる時に
terminalの言語環境が英語じゃないとダメってのもあったなあ。
566デフォルトの名無しさん:2007/11/25(日) 09:32:11
不特定のファイルの種類を調べようとしています。
fileコマンドだと、画像ファイル(PCX)の場合に解像度まで表示されてしまう場合があります。画像フォーマットの種類だけわかれば十分なのです。
fileのmanによると、通常text,executable,dataのいずれかがつくとのことだったので、以下のような正規表現で種類だけ抜き出せないかなと思っています。

if($file =~ /^(.+?(?:text|executable|data))(?: .+|, .+|)$/){
$format = $1;
}
else{
$format = $file;
}

でも、ざっと /usr/share/file/magic を見ると、MP3形式の時に以下のような結果となり、ビットレートなどを除いた情報がとれません。

MPEG ADTS, layer III, v1, 128 kBits, 44.1 kHz, JntStereo

それようのモジュールがあるような気はするのですが、見つかりませんでした。
何か良い方法はありませんか。
567デフォルトの名無しさん:2007/11/25(日) 10:40:03
>>566
それがどうして問題になるのかわからん。分ければ良いだけのこと。

とまれ、File::MMagicでも読めばなにかわかるんじゃないか?
568デフォルトの名無しさん:2007/11/25(日) 10:46:21
>>566
file -i
569デフォルトの名無しさん:2007/11/25(日) 10:56:47
ちょっとここでいいかわからないけど、とりあえず質問です。

DynaLoderとかXSLoderについてなんですが、
例えば、use DBD::mysqlとかした時に、@INCにある、auto/DBD/mysql.so(.dll)をLoadしに行って、
さらにそこから、mysqlの例だと、例えば/usr/lib/mysql/libmysqlclient.so(Winだと、C:/MySQL/bin/libmysql.dll)
とかを探しに行ってLoadしてるんだと思いますが、

例えばMySQLを標準以外のprefixでインストールした時(/usr/local/mysql/)に、DBD::mysqlをmakeするときは
perl Makefile.PL --libs="-L/usr/local/mysql/lib -llibmysqlclient ・・・"とかを指定してコンパイルしますが、
これをインストールしてから、perl -e ’use DBD::mysql’とかしてみると、
Can't load '・・・DBD/mysql.so' for module mysql: libmysqlclient.so.15: 共有オブジェクトファイルを開けません:
そのようなファイルやディレクトリはありません at ・・DynaLoder.pm line 230
みたいな出力になります。

ここで、そのlibmysqlclient.so.15を/usr/lib/mysql/にコピー(またはsymlink)すると、エラーなしで上のコードが実行できます。
もちろん、mysqlの場合だと、コンパイル時に--staticとかつけてstatic linkでmysql.soを作成するとか、
Winの場合だと、C:/otherdir/mysql/bin/を環境変数PATHに突っ込んでやったりすると問題なくLoadできます。
570つづき:2007/11/25(日) 10:57:56
で、なにがしたいのかとゆうと、
staticにしたくない(またはできない)場合のmoduleの、DLLの検索Dirの制御を動的にできないか?
とゆうことです。

PerldocやCPANのDynaLoaderやXSLoaderのDocumentや、Linuxの環境変数についてとか調べた結果、
システム環境変数(?)の$LD_LIBRARY_PATHや、perl -V した時の libpath、DynaLoader.pmの@dl_library_pathなんかに
DLL(.so)を探しに行くときのDefaultのPATHが格納されているようなんですが、これって外側から制御することは可能ですか?

例えばとあるModuleをコンパイルする時に、perl Makefile.PL OPTIMIZE="-O3・・・"とかしたら、デフォルトの設定から
OPTIMIZE変数を上書きしてコンパイルしてくれます。
でも、上のmysqlの例だと、LIBPATH=/usr/local/mysql/lib とか、LD_LIBRARY_PATH=/usr/local/mysql/lib とかつけて、
perl Makefile.PLしても、make test ブロックなんかでやっぱり上記のエラーが出て止まってしまいます。
この時も、/usr/lib/以下に/usr/local/mysql/lib/の内容をコピーしてやったりしたらmake testが通るようになるんですが、
そうじゃなくて、LIBPATH=/usr/local/mysql/lib make test みたいなコマンドで、適宜LoadDirectoryを追加とかできないですか?

mysqlの場合だと、異なるいくつかのVersionを同じシステム上で動かして(当然default-unix-socketやportが違う)
動作テストをしたいときや、
mod_perlがらみのscriptとかの動作テストをする時も、/usr/local/apache2/libなんかをLibrary検索pathに含めたいんです。
(これも、perl -e 'use APR'とかすると、Can't load ・・・libaprutil-1.so がありません とか言われてしまう。)
571デフォルトの名無しさん:2007/11/25(日) 13:15:06
>564
Web::Scraper 0.23がでてて、ChangelogによるとテストがこけるのはHTML::TreeBuider::XPathのバグみたい。
572デフォルトの名無しさん:2007/11/25(日) 14:44:47
>570
"LD_LIBRARY_PATH=/usr/local/mysql/lib:$LD_LIBRARY_PATH" make test
で通らないの?
573570:2007/11/25(日) 15:25:58
>>572
それが、今やってる環境がCent4 & Cent5 なんですけど、mysql
sshターミナルでLoginして、printenvしたり、setしても、LD_LIBRARY_PATHが定義されてないんです。

で、例えば、LD_LIBRARY_PATH=/usr/local/mysql/lib perl -e 'use DBD::mysql'だとなにも言わない(エラー無し)なんですが、
LD_LIBRARY_PATH=/usr/local/mysql/lib make test だと、やっぱり ’Can't load ・・・’なエラーを吐きます。
574566:2007/11/25(日) 15:31:21
>>567
ファイル一覧の付加情報としようと思うので、あまり長いと都合が悪いのです。
File::MMagicを試してみましたが、fileで扱うデータを食わせると同じ結果にしかなりません。当たり前でしょうけど。
あと、Debianでは、File::MMagicで読み込めるmagicファイルのフォーマットが古く、search型の部分でエラーになりました。

>>568
mimeにしちゃうと、情報が減りすぎて。
575デフォルトの名無しさん:2007/11/25(日) 22:07:08
あるファイルがCGIとして呼び出されたか、
requireで実行されたかそのうファイル内で判断したいのですが、
どのようにしたら良いでしょうか?
# CGIとして呼び出されたときはページを表示し、
# requireで実行されたときはページを表示しないということをやりたいのですが。
576デフォルトの名無しさん:2007/11/25(日) 22:11:15
>>575
環境変数で判断できない?
REMOTE_ADDRが設定されていれば、CGIとか。

別のCGIからrequireされたかどうかの判断なら、自分のコマンド名で判断できるかな。
$0をチェック。
577デフォルトの名無しさん:2007/11/25(日) 23:05:46
こっちのスレやる話題じゃないけどGATEWAY_INTERFACEがCGI/1.1かどうかってモロなのがあるぞ?
578575:2007/11/26(月) 02:29:50
>>576-577
ありがとうございます。
requireで呼び出しを行ったプログラムがCGIだったせいで、
環境変数系は全滅でしたが、$0で判別することが出来ました _ _
579デフォルトの名無しさん:2007/11/26(月) 13:25:00
>>570
長くてちゃんと読んでないので見当はずれだったらごめん

rootで
/etc/ld.so.confにディレクトリ書くか
/etc/ld.so.conf.d/にディレクトリ書いたファイル作って
ldconfig実行する
580570:2007/11/26(月) 14:33:06
>>580
やっぱりそれしかないでしょうか?
ごめんなさい、またちょっと長くなりますが、
うちで一晩やってみて、ますますわけが分からなくなった。いったんmysqlからは離れますが、

/*--- dl.pl ---*/
#!/usr/bin/perl
use DynaLoader;
print "Content-type: text/plain\n\n";
print map("$_<br>\n",@DynaLoader::@dl_library_path);

/*--- apr_t.pl ---*/
#!/usr/bin/perl
use ARR;
use ARR::Pool;
use APR::Request; #これはlibapreq2用なのでなくてもいいです。
print "Content-type: text/plain\n\n"
print "APR OK!"

と簡単なファイルを二つ作って、コンソールからと、Apache(CGI,mod_perl両方)からテストしてみたんですが、

# perl dl.pl -->出力 /usr/lib /lib /usr/local/lib (実際は改行されます)
# perl apr_t.pl --> Can't load ・・・ libaprutil-1.so が開けません。そんなファイルありません。
http://localhost/cgi-bin/dl.pl -->コンソールと出力同じ
http://localhost/cgi-bin/apr_t.pl -->500 Internal Server Error (エラー内容はコンソールと同じ)
http://localhost/mod_perl/dl.pl -->コンソールと出力同じ
http://localhost/mod_perl/apr_t.pl --> APR OK!

ここまでは予想通りなんです。でも・・・
581570:2007/11/26(月) 14:33:39
export LD_LIBRARY_PATH=/usr/local/apache2/lib ; perl dl.pl --> /usr/lib /lib /usr/local/lib "/usr/local/apache2/lib" <-増えた!
export LD_LIBRARY_PATH=/usr/local/apache2/lib ; perl apr_t.pl --> APR OK! (よし、ちゃんと読んでるようだ)
では、cp /usr/local/apache2/lib/* /usr/local/lib/ してから、
http://localhost/cgi-bin/dl.pl --> /usr/lib /lib /usr/local/lib ( <-ちゃんと、/usr/local/lib あるよな?)
http://localhost/cgi-bin/apr_t.pl --> 500 Internal Server Error! (なんで〜?)

そこで、# unset LD_LIBRARY_PATH して、/usr/local/lib/〜には、libapr-*.soがある状態で、
# perl dl.pl --> /usr/lib /lib /usr/local/lib (最初といっしょ)
# perl apr_t.pl --> Can't load ・・・ libaprutil-1.so ・・・ /usr/local/libを読んでくれない...orz ってな状況です。

う〜ん、@DynaLoader::dl_library_path って、DynaLoaderが、.soファイルを探し出すための検索Dirじゃないの?

うちでの環境は、/usr/local/apache2/にApache2.2を手動でインストール、mod_perlもこのApacheめがけてmakeしてあり、
/usr/lib/以下には、これらのLibrary(.so)が一つも入ってない状態です。(rpm系からインストールすると、/usr/libにsoが入ります)
似たような環境の人で、お手すきの方いましたら試してもらえませんか。(そんな人いない?
582580:2007/11/26(月) 14:40:53
ごめんなさい。
>>580の、>>580>>579の間違いです。
それから、apr_t.plの下二行、’;’の付け忘れです。
583デフォルトの名無しさん:2007/11/26(月) 15:16:44
読まずに当てずっぽうを言うが、-Lじゃなくて-Rの話と違うのか?
584デフォルトの名無しさん:2007/11/26(月) 16:05:32
>>583
??? すいません。わかりません。
多分 -Lとは、gccとかのコンパイル時のオプションで、linkまたはlink(lib)pathのことだと思いますが、
-Rってのがわかりません。
gccのオプション一覧で探しましたが見つからず、perlにも、そのようなオプションはないようですが・・・。
585デフォルトの名無しさん:2007/11/26(月) 16:16:17
>>581
> cp /usr/local/apache2/lib/* /usr/local/lib/ してから
この辺りちょっと気になる。

linuxはかじった程度だからあってるかどうかあやしいけど、
LD_LIBRARY_PATHをセットしたとしても、.soファイルに静的にリンクしている場合、
コピーしただけじゃリンク先が変わらないから、その辺りが原因じゃないかなぁと思う。

586デフォルトの名無しさん:2007/11/26(月) 16:23:49
LD_RUN_PATHの話じゃないのか
587デフォルトの名無しさん:2007/11/26(月) 16:29:39
長くて読んでないが、runtime library search pathの話なら、
LD_RUN_PATHかLD_LIBRARY_PATHかDT_RUNPATHかDT_RPATHの話か?
588570:2007/11/26(月) 17:30:10
>>585
そうなんですか。でも多分APR.soとかAPR::Pool.soは動的リンクだと思います。
現に上の状態から、cp /usr/local/apache2/lib/* /usr/lib/ で、
# perl apr_t.pl も http://localhost/cgi-bin/apr_t.pl も APR OK! となります。
(コピーしただけ、/sbin/ldso とか LD_LIBRARY_PATHは何も操作してない。)

つまり、DynaLoader.pmは、/usr/lib にあるライブラリはちゃんと探し出して、読み出しに行ってくれてるみたいです。

>>586,587
LD_RUN_PATH DT_RUN_PATH DT_RPATH
これらの環境変数は知りませんでした。今ちらっとmanpage読んだんところ、
コンパイル時に、指定のライブラリパスをバイナリに埋め込むようなんですが、
目的のことと、ちょっと違うような気がしますが、とりあえずもう少し詳しく調べてみます。
589デフォルトの名無しさん:2007/11/26(月) 18:44:22
httpd.confにSetEnv LD_LIBRARY_PATHが無い
>>580のtestコードは構文エラー
素直にrpm使えば?
590570,580:2007/11/27(火) 10:49:20
自宅のプロバからは、書き込み規制中で、昨日は書き込めませんでした。

>>589
すいません。>>580の、dl.plの4行目は正しくは print map("$_<br>\n",@DynaLoader::dl_library_path); です。
後ろの”@”は不要でした。apr_t.plの方は、>>582の通りです。

> httpd.confにSetEnv LD_LIBRARY_PATHが無い
> 素直にrpm使えば?

Apacheの環境変数LD_LIBRARY_PATHをCGIに渡せることは確認しました。
でも、せっかく提示してもらって恐縮ですが、そうゆうことではなく、また、別にRPMが使いたくないとかでもなく、
>>570みたいなことが目的です。>>580,>>581は、今の自分の環境で、すぐに試せそうなテストを書いてみたわけです。
ワンライナー風にするなら、export LD_LIBRARY_PATH=/path/to/lib; perl script.pl のような感じで出来るのは
確認しましたが、Makefileの中とかで、shやperlを多重に(?)呼び出す(子プロセスから子プロセスみたいな感じの)時は
上のようなコマンドでは無理なようです。(子プロセスや、suidには、LD_LIBRAY_PATHを渡せないような記述を見かけました。)
そこで、DynaLoader.pmの@dl_library_pathに注目してみたわけです。
591570,580:2007/11/27(火) 10:49:52
連投すいません。
>>レス頂いたみなさま
あれから昨夜、LD_〜環境変数や、/lib/ld.so、/sbin/ldsoconfig等をもう少し詳しく調べてみたんですが、
自分は、DynaLoaderや@dl_library_pathについて、重大な思い違いをしていたみたいです。

http://search.cpan.org/~nwclark/perl-5.8.8/ext/DynaLoader/DynaLoader_pm.PL
こことかを参照して、@DynaLoader::dl_library_pathは、DynaLoader(perl)が.soファイルを検索するためのPATHだと
思っていたんですが、その(perlが)検索する.soファイルは、あくまで{perl-module-name}.soであり、
そこから先のDLLについては、一切感知してないようです。

例えば、上のapr_t.plの例で言うと、
1: use APR; --> perlが@INCから、APR.pmを探し出してLoadする。
2: APR.pm内のuse DynaLoader; --> DynaLoaderが、@dl_ibrary_pathから、APR.soを探してLoad
3: APR.soはlibaprutil-1.soに動的リンクしているので、こいつを探し出してからLoad(AP2.0.Xならlibaprutil-0.so)
4: perlがscriptをコンパイル and 実行

自分は今まで、この’3’の段階まで、DynaLoaderの仕事とばっかり思ってたんですが、実際は’2’までで、
’3’については、システムのld.so(ld-linux.so)の仕事のようです。
上のURLの内容や、export LD_LIBRARY_PATH=/path/to/lib; perl dl.pl の出力結果などにより、勘違いをしてました。

perlからLoadされる.soだから、当然perlプロセスの管理下だろうし、そのライブラリを検出したりするために、
@dl_library_pathがDynaLoaderには組み込まれてるんだろうと思ってました。実際はほとんどのperl-modlueが、
@INC内で完結するか、ld.soのデフォルトpathである、/lib,/usr/lib内で見つかってしまうのと、さらに、
export LD〜=〜/lib で、@dl_library_pathに 〜/lib が追加されてしまうため、
@dl_library_pathとゆうのは、perl内部でのみ有効なLD_LIBRARY_PATHだと混同しておりました。

実際には、@dl_library_pathにある /usr/local/libは、ld.soの検索対象PATHには含まれていない為、
>>581のような結果になるのは当然でした。

今まで色々とアドバイス等、ありがとうございました。
592デフォルトの名無しさん:2007/11/28(水) 02:43:19
Perlのモジュールか何かでsnmptranslateと同じようなことって出来ない?
.1.3.6.1.2.1.1.1.0 <--> SNMPv2-MIB::sysDescr.0
みたいにOIDの表示形式を変換したいんだけど
593デフォルトの名無しさん:2007/11/28(水) 10:51:32
調べてないんだけど、Net::SNMPあたりにないん?
594デフォルトの名無しさん:2007/11/28(水) 11:06:34
質問です。

自分でfirstというディレクトリを作成し
その中にsecondというディレクトリを作成するにはどうしたらいいですか?

chdirで作業ディレクトリをfirstにうつせば出来るんですが
その後、またもとのディレクトリに戻る方法が分からないため挫折。
595デフォルトの名無しさん:2007/11/28(水) 11:24:20
( ゚д゚)
596デフォルトの名無しさん:2007/11/28(水) 11:45:37
597デフォルトの名無しさん:2007/11/28(水) 12:03:30
>>596
Thx 解決しました。
598デフォルトの名無しさん:2007/11/28(水) 18:13:55
>>594
ディレクトリ作るだけなら>>596でもいいが
これからもプログラミング続けるなら
相対パスでググって出てきたページを100回ほど音読しとけ
599デフォルトの名無しさん:2007/11/28(水) 18:30:03
でもchdir 'hoge'したあとchdir '..'で戻れるとは限らなかったりする。(hogeがsymbolic linkの場合)
自分で今作ったディレクトリなら大丈夫だとは思うがね。

fchdirがあるシステムなら、カレントディレクトリを開いてファイルハンドルを保存、戻りたくなったら
とっといたファイルハンドル指定でchdirするのが楽ですな。(5.8.8以降)

600デフォルトの名無しさん:2007/11/28(水) 22:55:12
質問なのですが、特定のキーが押されているかどうかって、
どうやってチェックするのでしょうか?

<STDIN>とかTerm::Readkeyだと、入力待ちになってしまいますよね。
動作を止めずに、特定キーが押されている時だけ分岐したいのですが。
601デフォルトの名無しさん:2007/11/28(水) 23:06:57
>>593
調べてみてNet::SNMPにtranslateってものがあったけどOIDの変換はなさそうだった

Net::SNMPのリクエストで使うOIDを.1.3.6.*みたいな数字形式じゃなくて
SNMPv2-MIB::sysDescr.0みたいな形で指定したかったんだけど何か無いんだろうか
602デフォルトの名無しさん:2007/11/28(水) 23:50:07
多分アホらし過ぎる質問だろうけど誰か助けて
orz
ActivePerl5.8インストールしようとしたら
Indalid Drive:G
とか出てくる

ちなみに外付けを必要によって接続したりしなかったりで使ってるのが原因ぽいです
対処法をだれか・・・
603デフォルトの名無しさん:2007/11/29(木) 01:02:00
>>602
subst g: c:\

とでもやってみたら?
それで回避できるのか分からんが。
604デフォルトの名無しさん:2007/11/29(木) 10:05:08
>>601
CPANのSNMPかSNMP::MIB::Compilerあたりが使えそうだが
605デフォルトの名無しさん:2007/11/29(木) 17:56:30
Excelで書き出したCSVを読み込もうとしています
Excelで一つのセル内に改行が入っていた場合、CSVに書き出すと

abcd,efgh,"ij
kl"
ABCD,"EF
GH",IJKL

このようにダブルクォーテーションで囲まれた中に改行がそのまま入ります。
全体を配列等に格納するまえに、こういった改行を別な文字(例えば<br>)に置き換えておこうと思い
正規表現でどうにかしようと考えました。
セル中の改行が一つなら
s/"(.*?)¥n(.*?)"/$1<br>$2/g
これでどうにかなるのですが、改行が複数の場合どうすれば良いのでしょうか。
606デフォルトの名無しさん:2007/11/29(木) 18:06:37
そんなこと自前でやらずにText::CSVでも使えばいいと思うよ。
607デフォルトの名無しさん:2007/11/29(木) 18:20:09
エクセルで改行置換しろ
検索する文字列にCtrl+Jな
608デフォルトの名無しさん:2007/11/29(木) 18:31:49
>>605
たしか Windows の改行コードは \r\n の2バイトで
セル内の折り返しは \r の1バイトだったと思います。
この違いを利用して \r を <br> に置換するだけ

chomp;
s/\r/<br>/g;

というチョ〜手抜きでも実用上はOKじゃないかな。
神経質な人にはオススメできませんけど。
609デフォルトの名無しさん:2007/11/29(木) 19:05:16
>>605
そんなこと考えるよりText::CSV_XSインストールしてgetline使え。
610605:2007/11/29(木) 19:32:31
回答ありがとうございます。

>>606>>609
まさにうってつけのモジュールがあるんですね。
調べてみます。

>>608
そんな構造になっていたとは。試してみたいと思います。

>>607
なるべくエクセル側では手間のかからないようにしたかったのです。
611デフォルトの名無しさん:2007/11/29(木) 23:43:42
関数の引数として、第一引数に配列、第2引数に文字列を渡したいのですが、
下のようにしても受け取るのができませんでした。
配列と文字列の関係を維持したまま引き渡すことは可能でしょうか?

&array_test(@arr,$str);
sub array_test {
@arr=@_[1];
$str=$_[2];
}
612デフォルトの名無しさん:2007/11/29(木) 23:49:47
ActivePerlつかっているんですが、
ppmでYAML::Syckをインストールして使おうと思ったら
Syck parser (line 3, column 0): syntax error at C:/Perl/site/lib/YAML/Syck.pm line 53, <FH> line 1.
とエラーが出てしまいます。

YAML-Syckのバージョンは0.91
同じ症状のひといますか?
613デフォルトの名無しさん:2007/11/29(木) 23:51:02
&array_test(\@arr,$str);
sub array_test {
@arr=@$_[0];
$str=$_[1];
}
614デフォルトの名無しさん:2007/11/30(金) 00:00:29
>>600
Windows環境?
615デフォルトの名無しさん:2007/11/30(金) 01:28:47
すみません、動詞を三人称単数現在にするモジュールってありますか?
616デフォルトの名無しさん:2007/11/30(金) 01:43:48
$a の行頭に、$n 個の全角スペースを挿入したいんですが、
どうすればいいでしょうか?
617デフォルトの名無しさん:2007/11/30(金) 01:48:29
>616
for文で回しながら1個ずつくっつける。
618616:2007/11/30(金) 01:53:55
>>617
なるほど

でも、できればいっぺんに挿入したいんですけど、
そういうやり方はないでしょうか?
619デフォルトの名無しさん:2007/11/30(金) 02:09:34
>>616

$a = 'AAA'
$n = 10;
$a = ’ ’ x $n . $a;
620616:2007/11/30(金) 02:32:31
>>619
ありがとうございます
うまくいきました
621617:2007/11/30(金) 02:37:32
>619
そんなのあったのか。勉強になった、ありがとう。
622デフォルトの名無しさん:2007/11/30(金) 02:51:31
substr($a, 0, 0, " " x $n);
substr($a, 0, 0) = " " x $n;
623デフォルトの名無しさん:2007/11/30(金) 02:58:03
>>615
> すみません、動詞を三人称単数現在にするモジュールってありますか?

lingua stemあたりでCPANを検索しる
624612:2007/11/30(金) 03:58:40
自己解決しました。
yamlファイルのデータのコロン(:)の後に半角スペースがなかっただけでした。
625デフォルトの名無しさん:2007/11/30(金) 08:34:59
>>616
$a ~= s/^/ /gm;
626625:2007/11/30(金) 08:36:41
リロードしてなかった上に読み間違えだったわすまそ
627デフォルトの名無しさん:2007/11/30(金) 11:30:31
「->」演算子について質問です

「->」演算子は、配列/ハッシュリファレンスにデリファレンスを
行う際に使用する演算子と理解しています。

しかし、パッケージ名に対して使用すると、
対象パッケージに含まれる関数を呼び出すこともできます…。

これは、
 「->」演算子は、
  ・配列/ハッシュリファレンスに対して使用するとデリファレンスを行う
  ・パッケージ名に対して使用すると関数の呼び出しを行う
と、理解すればいいのでしょうか?
※「->」演算子は、"配列/ハッシュリファレンス"に使用する場合と
  "パッケージ名"に対して使用する場合では、全く別ものということでしょうか?

以上、何かレス頂けたらありがたいです。
628デフォルトの名無しさん:2007/11/30(金) 11:41:21
>>627
デリファレンスは「配列/ハッシュ」に限らない
関数呼び出しは「パッケージ名」に限らない
629デフォルトの名無しさん:2007/11/30(金) 11:50:06
>>627
左側の形で決まる。詳しくはマニュアル読め。

デリファレンス
...->[...]
...->{...}
...->(...)

メソッド呼び出し
...->method_name
...->$scalar_variable
630627:2007/11/30(金) 11:50:38
>>628
早々のレスありがとうございます。

>>デリファレンスは「配列/ハッシュ」に限らない
そのようですね。
関数へのリファレンスをデリファレンスすることもできるようですね。

>>関数呼び出しは「パッケージ名」に限らない
これは、
 Perlにおけるクラスインスタンス(リファレンス)に対しても使用することができ、
 関数の呼び出すことができる
ということをおっしゃっているのでしょうか?

そもそもなのですが、「->」演算子って、なんなのでしょうか?
…続く
631627:2007/11/30(金) 11:54:15
>>629
レスありがとうございます。
続きを書こうとしたところで、解答をいただけたので
やめておきます。

左辺のきまるのですね^^
と、いうことは、「->」演算子は、
 「->」の左辺によってまったく異なる動きをする
と解釈してよろしいのですよね・・・

マニュアル・・・
Perlの言語仕様が日本語で書かれているサイト・・・
探してみたのですが・・・
もう少しさがしてみます。

ありがとうございました。m(_ _)m
632629:2007/11/30(金) 12:07:36
すまん、左側じゃなくて右側
633デフォルトの名無しさん:2007/11/30(金) 15:56:51
関数じゃなくてメソッドでしょ。
左辺がパッケージ名ならクラスメソッド。インスタンス変数ならインスタンスメソッド。
634デフォルトの名無しさん:2007/11/30(金) 17:22:22
すみません。どなたかご教授願えたらと思います。Perl初心者です。

あるバイナリファイル(test1)をLinuxのコマンド上で
# od -a test1 > test2
そして
# od -f test1 > test3
としてtest2,test3のファイルが生成されるのを同じようにPerlでプログラム
するにはどのようにしたらよろしいのでしょうか。

unpackなどを使ったらよろしいのでしょうか。
ご存知の方がいらしたらよろしくお願いしたいと思います。
635デフォルトの名無しさん:2007/12/01(土) 04:58:30
system "od -a test1 > test2";
system "od -f test1 > test3";
636636:2007/12/01(土) 09:57:23
すみませんが、どなたかご教授をお願いいたします。

目的:
Perl から形態素解析エンジン Mecab を呼び出したいとおもいます。

操作:
WindowsXP Professional SP2環境に
Mecab ( http://mecab.sourceforge.net/ )自己解凍インストーラ (mecab-X.X.exe) を実行して
インストールしたのち、
Perl のスクリプト言語バインディングをダウンロードして動作させようとしましたが、

>perl makefile.PL

のときに mecab-config が無いとか言われ、Perl から Mecab を呼び出す環境が構築できません。

備考:
Yahoo! の形態素解析呼び出しは簡単なのですが、

  「 Yahoo!に文書ログを取られ放題の可能性あり。 」

という状態はまずいので、Mecab を使いたいと思っています。
637デフォルトの名無しさん:2007/12/01(土) 11:02:19
ここに限らないけど、ご教授というよりご教示が適切な場合が多いね。

>>636
pythonだけど参考になるかも。
http://www.atransia.co.jp/home/fukamachi/Diary/2006/01/15/
638デフォルトの名無しさん:2007/12/01(土) 14:20:09
>>636
Mecabのバージョンは?

WindowsでMecab使ったことあるけれど、
インストールで躓いた記憶なし。
639636:2007/12/01(土) 16:17:21
>>638 さま
Mecab のバージョンは 0.96 (最新)です。
640デフォルトの名無しさん:2007/12/01(土) 16:35:11
->[ EXPR ] で一つの後置演算子
->{ EXPR } で一つの後置演算子
->IDENTIFIER で一つの後置演算子

とでも捉えればいいんじゃない?

>「->」演算子は、配列/ハッシュリファレンスにデリファレンスを
>行う
$a = ['unko'];
print(($a->)[0]);

こう出来るのであればともかく、その捉え方は違う気がする。
641デフォルトの名無しさん:2007/12/01(土) 16:36:20
ちょwwww更新してなかったwwwおのれJaneめ。朕を辱めおって。ゆるさん!
642デフォルトの名無しさん:2007/12/01(土) 17:01:54
あるモジュール(Aとする)があって、ロード先の名前空間に
別の特定モジュール(これをBとする)がロードされていなければ、
そこにBをロードする、というコードを書きたいのですが、

ロード先にBがロードされているかどうか、Aで調べるには
どういうふうに書けばいいですか?

Bのメソッドをcanで調べるぐらいしか思いつかないんですが・・・
643636:2007/12/01(土) 18:05:00
すいません、自己解決しました。
「ppm を公開されている神々」がおられましたので、インストールしたら問題なく動作しました。
http://namazu.asablo.jp/blog/2007/06/28/1611341

C:\> ppm uninstall MeCab
C:\> ppm install http://www.akaneiro.jp/PPMPackages/800/MeCab.ppd

備考:
mecab-config は、ソースファイルの中にあったけど、shell script でした。
cygwin を入れて、\cygwin\bin\sh.exe mecab-config で呼び出して、
makefile でCコンパイラ読んだらエラーの山で・・・と、いい加減嫌になっていました。
「Windows版のPPMを公開されている神」に感謝です。
644デフォルトの名無しさん:2007/12/01(土) 22:14:31
>>642
${A::}{B::}
でいけると思うけど、今perlの環境がないので未確認。
645デフォルトの名無しさん:2007/12/02(日) 01:15:49
use Encode;
print encode('utf8', 'う');

としても う と表示されエンコードしてくれません。
Encodeのバージョンは2.23です。
何か原因が考えられますか?
646645:2007/12/02(日) 01:20:04
すいません。変換されてしまいました。
>>645は↓が正しいです。

use Encode;
print encode('utf8', '&#x3046;');

としても &#x3046; と表示されエンコードしてくれません。
Encodeのバージョンは2.23です。
何か原因が考えられますか?
647デフォルトの名無しさん:2007/12/02(日) 01:23:39
はぁ?Encodeって何するモジュールかわかってんの?
648デフォルトの名無しさん:2007/12/02(日) 02:20:54
>646
use Encode;
print encode('utf8', "\x{3046}");

>何か原因が考えられますか?
>645 の脳が足りない、……とまでは言わないが色々と理解が足りないと思う。
649デフォルトの名無しさん:2007/12/02(日) 09:19:41
>>645
何がやりたいかを書いた方が、適切な返事がもらえると思われ。
650デフォルトの名無しさん:2007/12/02(日) 17:07:52
エンコードしたいって書いてあるだろ
651デフォルトの名無しさん:2007/12/02(日) 17:11:03
sub url_encode($) {
  my $str = shift;
  $str =~ s/([^\w ])/'%'.unpack('H2', $1)/eg;
  $str =~ tr/ /+/;
  return $str;
}
652デフォルトの名無しさん:2007/12/02(日) 17:12:56
use CGI::Lite;
print url_encode('うんこ');

653デフォルトの名無しさん:2007/12/02(日) 17:40:09
ここでいいのかわかりませんが、質問失礼します。

PerlでImageMagickを使って、画像の拡大や縮小を試しているのですが、
Resize()やScale()など、拡大縮小にも様々な方法があり、どれを使うべきか迷っています。
なるべくきれいに、画像のサイズ変更のみをしたい場合はどれを使うべきなのでしょうか?
654デフォルトの名無しさん:2007/12/02(日) 17:49:14
全部試してみて仕上がりが好みのやつが
いいんじゃないかな
655デフォルトの名無しさん:2007/12/02(日) 17:57:25
「 PerlMagic CGI 」でググれ。

縦横比を変化させずに、横幅を 120 にするには、

my $ImageMagick = Image::Magick->new;
$ImageMagick->Read("unko.jpg");
$ImageMagick = $ImageMagick->Transform(geometry=>120);
$ImageMagick->Write("gif:unko.gif");
656デフォルトの名無しさん:2007/12/02(日) 18:03:09
おっと訂正。k が抜けてました。

「 PerlMagick CGI 」でググれ。

「きれいに」 って言うのは、縦横比が歪まないようにって事でOK?
画質はどうやっても変わらんと思うよ。
657デフォルトの名無しさん:2007/12/02(日) 18:27:42
単なる画像のリサイズにもいくつかアルゴリズムがあって
最も単純なのはジャギーが出て、画質が悪いように見える。
658653:2007/12/02(日) 19:07:18
>>654-657
レスありがとうございます。
縦横比はそのままでジャギーなどがあまり出ない方法が良いのですが、
色々試してみたところ、Resize()でも比率そのままできれいに出来ましたので、
とりあえずResize()を使っていこうと思います。
659デフォルトの名無しさん:2007/12/02(日) 23:57:59
>>657
ImageMagick(PerlMagick)でリサイズするときに、アルゴリズムって選べたっけ。
660デフォルトの名無しさん:2007/12/03(月) 00:27:39
>659
SampleとScaleとResizeだと画質が違ったはず
661デフォルトの名無しさん:2007/12/03(月) 02:51:05
>>665
別人だが、そんな方法があったのね。
自前でサイズ測って拡縮してた。
662659:2007/12/03(月) 19:43:08
>>660
そいや、Sampleだと細かい指定ができずに画質も汚かった気がする。
昔作ったリサイズスクリプトでは、Resize()を使ってた。
663661:2007/12/03(月) 19:51:10
あ、いや、自己レスで申し訳ないが、>661は勘違いだった。
縦横ともに上限があって、その中に収まるように縮小だから自前で計算してたんだった。
664デフォルトの名無しさん:2007/12/04(火) 11:36:39
結局どれが一番きれいだったんだろう…
665デフォルトの名無しさん:2007/12/04(火) 12:19:03
どれもきれいで、一番いいよ
666デフォルトの名無しさん:2007/12/04(火) 12:28:29
お前が一番きれいだよ
667デフォルトの名無しさん:2007/12/04(火) 23:40:46
ありがとう(*´д`*)
668デフォルトの名無しさん:2007/12/06(木) 18:08:53
CPANにあるPoCo::YahooMessengerって
今のyahoo chatで使えるんでしょうか?
使った経験のある方います?
CPANに上げたのが02 Dec 2002になってるんですけども…。
669デフォルトの名無しさん:2007/12/06(木) 18:30:32
>>668
使ってみればいいじゃん。
670デフォルトの名無しさん:2007/12/07(金) 03:21:48
もの凄く下らない質問なんですが

open (FH,$file);
binmode FH;
read (FD,$hoge,-s $file);



open (FH,$file);
binmode FH;
undef $/;
$hoge = <FH>;

って何か差はあります?
671デフォルトの名無しさん:2007/12/07(金) 08:53:32
$/ の説明で以下の部分があるので、違うんじゃないかな。

>Perl5.005-では、未定義にすると空のファイルからの最初の読み込み時には空文字列が得られ、次回からは未定義値が得られる
672デフォルトの名無しさん:2007/12/07(金) 13:03:28
>>670
-s は stat してるので、stat でサイズを返さないファイルだと動かない。
undef $/ は read() で eof になるまで読むからdeviceとかも動きそう。
673デフォルトの名無しさん:2007/12/07(金) 19:15:27
$word に 連続したシフトjisのひらがな・カタカナ・漢字が3文字入っているか
チェックするにはどうすればいいでしょうか?

3文字連続した日本語が入っていなければ、スパムとみなしたいのです。

if ( $word !~ [シフトjisのコード][シフトjisのコード][シフトjisのコード]) {
print "これはスパム";
}

みたいな感じでしょうか?
674デフォルトの名無しさん:2007/12/07(金) 22:33:43
おおむね合ってるけど、細かく言えば

if ($word !~ m/[シフトjisのコード]{3}/) {
 print "スパム";
}

{3} を使えば3回連続という意味になるよ。
675デフォルトの名無しさん:2007/12/07(金) 23:46:29
>>672
ありがとう。参考になりました
内部的にはread()なんだね
676デフォルトの名無しさん:2007/12/08(土) 01:14:41
>>673
こうするとSJIS以外も対応できそう
@mb_strings = split /[ -~]+/, $word;
unless(grep { length $_ > 6 } @mb_strings){
print "これはスパム";
}
677676:2007/12/08(土) 01:17:30
逆にSJISの下位バイトで切っちゃってまずいな。
もう一ひねり入れると気持ち悪くなるし…。
678デフォルトの名無しさん:2007/12/09(日) 23:02:26
連想配列は呼び出すたびに呼び出す順番が
変わると聞いたのですが、実際やってみても
毎回同じ順番になってしまいます。
同じ順番になる条件や環境ってあるのでしょうか?
679デフォルトの名無しさん:2007/12/09(日) 23:13:20
>>678
perldoc -f each
> Entries are returned in an apparently random order. The actual
> random order is subject to change in future versions of perl,
> but it is guaranteed to be in the same order as either the
> "keys" or "values" function would produce on the same
> (unmodified) hash. Since Perl 5.8.1 the ordering is different
> even between different runs of Perl for security reasons (see
> "Algorithmic Complexity Attacks" in perlsec).
680デフォルトの名無しさん:2007/12/09(日) 23:27:45
>>679
ランダムになるはずですよね…

%LIST=(
"2"=>"0,0,0,,,","3"=>"0,0,0,,,","4"=>"0,0,0,,,",
"5"=>"0,0,0,,,","6"=>"0,0,0,,,","7"=>"0,0,0,,,",
"8"=>"0,0,0,,,","9"=>"0,0,0,,,","10"=>"0,0,0,,,",
);

while (($Key,$Value) = each %LIST){
print "$Key,$Value\n";
}

をコマンドプロンプトから実行しても
同じ結果しか表示されないですorz
681デフォルトの名無しさん:2007/12/09(日) 23:35:53
>>680
> ランダムになるはずですよね…

毎回異なるわけではない
682デフォルトの名無しさん:2007/12/09(日) 23:39:00
>>681
なるほど。

しかし、10回やっても、20回やっても
すべて同じになってしまいます。
683デフォルトの名無しさん:2007/12/09(日) 23:50:48
>>682
>>679を10回も20回も読め
684デフォルトの名無しさん:2007/12/09(日) 23:53:15
「ランダム」っつうか「適当」じゃないか?
均一なランダムになるものとは思えん。
685デフォルトの名無しさん:2007/12/10(月) 00:12:26
ていうか>>678は、ランダムという言葉に何か別のイメージを持っているんだろう。
686デフォルトの名無しさん:2007/12/10(月) 00:13:28
680の%LISTを呼び出すと
適当な順番で呼び出されるけど
%LISTの内容が同じだったら、
呼び出される順番は常に同じ?
687デフォルトの名無しさん:2007/12/10(月) 00:31:32
>>686
>>679

文盲ばかりのスレはここですか。
688デフォルトの名無しさん:2007/12/10(月) 00:33:55
ハッシュを「魔法の小箱」みたいに思ってるレスが痛い。
実装することを考えれば、何がrandom orderで、何が固定されるかくらいわかるだろうに。
689デフォルトの名無しさん:2007/12/10(月) 00:43:20
>>685
ララアは賢いな
690デフォルトの名無しさん:2007/12/10(月) 00:50:50
?? 妙な空間になってるな
691デフォルトの名無しさん:2007/12/10(月) 11:47:06
燃え上がーれーランダムー
692デフォルトの名無しさん:2007/12/10(月) 20:08:49
簡単に説明してやると、順番が保証されないだけだろ。
だから仕様上、同じになっても違っていてもおかしくはない。
ほんとにどうなっているのか知りたければ、ソースでも嫁。
693デフォルトの名無しさん:2007/12/10(月) 20:39:01
”ハッシュ” という言葉の意味を理解してないだろ。
694デフォルトの名無しさん:2007/12/10(月) 20:42:18
一般論を語る前にドキュメント読めよ……
695デフォルトの名無しさん:2007/12/10(月) 23:11:27
perl のサブルーチンって、C の関数って解釈でいいんでしょうか?

それと、サブルーチンの宣言と内容は使用するプログラム内で、
サブルーチン使用箇所より上の行なら構わないんですか?
696デフォルトの名無しさん:2007/12/10(月) 23:36:47
697デフォルトの名無しさん:2007/12/11(火) 00:42:26
>>696
ありがとうございました

知りたい範囲のことはわかりました
698デフォルトの名無しさん:2007/12/11(火) 15:03:34
どうやって調べていいかわからないんで教えてください

コマンドラインで
test.pl
なら標準出力、「-o ファイル名」を付けたらファイルに出力というプログラムを作ろうと思ってます

で、この場合の書き方ってどうするのがいいものですかね?
オプションにありなしをGetopt::Longで拾って
if (オプションあり) {
  open my $wfh, '>', ファイル名;
  print {$wfh} '出力';
  close $wfh;
}
else {
  print '出力';
}
ってやろうとしたのだけど、一般的にもっといい方法あるのかな?と。

あと、こういうことを調べたい時に何で調べると良いか誰か知ってたらヒントください。
699デフォルトの名無しさん:2007/12/11(火) 15:57:51
>>698
> あと、こういうことを調べたい時に何で調べると良いか誰か知ってたらヒントください。

同じようなことをやっているプログラムを読む
700デフォルトの名無しさん:2007/12/11(火) 16:03:05
>>698
$wfh = *STDOUT;
print $wfh '出力';
701デフォルトの名無しさん:2007/12/11(火) 16:09:57
>>698
my $file = '-';
if (オプションあり) {
$file = 'ファイル名';
}
open my $wfh, ">$file";
print '出力';
close $wfh;
702698:2007/12/11(火) 16:26:57
ありがとう、ありがとう

>>699
おぉ。CPANを漁ったりして中身を見る?
>>700
分岐はどこですれば良いですか?
openしちゃうとファイル名のファイルが出来ちゃうかファイルハンドラの前でやる?
>>701
いけた!3つの引数のopenでもいけました。
print {$wfh} "出力"
ですよね?
703デフォルトの名無しさん:2007/12/11(火) 20:14:01
質問の回答とは違うけど、そういうときのために > があるんだが、それは選択肢に入れないの?
つまり
test.pl -o ファイル名
とするかわりに
test.pl > ファイル名
とすればいいだけ。中身はただの print 文だけでいいんだけど。
704698:2007/12/11(火) 20:26:15
>>703
cronで自動的にアクセスログを処理しようとしたのでファイル名も自動で作りたかったんですよね
で、スクリプトを1つで完結させたいなと思い、perlの中に書いてしまおうかなと。
ただ、標準出力で試す時もあるだろうから、そのための道も用意しておきたかったんです。
705デフォルトの名無しさん:2007/12/11(火) 20:53:09
>>702
print {$wfh} "出力"
このブレースは何のためにつけてるの?
というか、どこで覚えたの?
706デフォルトの名無しさん:2007/12/11(火) 21:51:52
707デフォルトの名無しさん:2007/12/11(火) 22:20:42
>>706
それはしってるにょ。
>>702が盲目的に{}をつけてることを指摘したかっただけ。
708デフォルトの名無しさん:2007/12/12(水) 14:47:39
すみません。Perl初心者です。
どなたかご教示願えたらと思います。

1行目 no no no no no no no no A B C D no no no
2行目 no no no no no no no no A B C D E F G
3行目 H I J K no no no no A B C D E F no
4行目 no no no no no no no no A B C D E F G
5行目 H I J K L M N O P Q R no no no no
6行目 no no no no no no no no A B C no no no no

上記の様にそれぞれの行がスペースで区切られた16のフィールドを持つ
ファイルから
ABCD,ABCDEFGHIJK,ABCDEF,ABCDEFGHIJKLMNOPQR,ABCという配列を抜き出
すにはどのようにしたらよろしいのでしょうか?
1. 名前の始まるフィールド(Aの位置)は決まっています。
2. 4~6行目の様に名前が長く次の行のAのフィールドまで達すると、次の
名前は更に次の行から始まってしまいます。

1行ずつ読み込む方法ではループがクロスしてしまい、nextやlastを使って
も私の能力不足で上手いようにはいきません。
申し訳ございませんが、どなたかお教え頂けたらと存じます。
709デフォルトの名無しさん:2007/12/12(水) 15:08:59
ずらしちまえ
0行目 no no no no no no no no
1行目 A B C D no no no no no no no no no no no
2行目 A B C D E F G H I J K no no no no
3行目 A B C D E F no no no no no no no no no
4行目 A B C D E F G H I J K L M N O P Q R
5行目 no no no no no no no no no no no no
6行目 A B C no no no no
710デフォルトの名無しさん:2007/12/12(水) 15:28:26
腐った入力データフォーマットの方を何とかした方がいいとは思うが:

my @a;
while (<>) {
chomp;
for my $x (split) {
if ($x eq 'no') {
# do nothing
} elsif ( $x eq 'A') {
push @a, $x;
} else {
$a[-1] .= $x;
}
}
}

Aじゃないものではじまる名前があったときはどうなっても知らん。
711デフォルトの名無しさん:2007/12/12(水) 15:57:01
undef $/ で読んで
/(?<=no )(?!no )(.+?)(?=no )/g
とマッチ
712デフォルトの名無しさん:2007/12/12(水) 16:01:27
こうかな

open(IN,"hoge.txt");
undef $/;
$_ = <IN>;
s/\n/ /g;
@list = /(?<=no )(?!no )(.+?)(?=no )/g;
713デフォルトの名無しさん:2007/12/12(水) 16:35:06
noは必ずnoか?
A〜Rは?
714デフォルトの名無しさん:2007/12/12(水) 16:36:00
HEXダンプの臭いがする
715デフォルトの名無しさん:2007/12/12(水) 17:40:27
すみません708です。
みなさま、いろいろご教示ありがとうございます。
説明不足で大変申し訳ございません。

すべてを配列として読み込んでjoinした後、(no)+で区切って配列化すると、
実際の名前の部分(上記の大文字の部分)にn oという文字が入っていた場合、
名前のその部分が削られてしまって、正しく名前が抽出出来なくなる問題が
あります。(必ずしもA B C D . . .ではないです。すみません)
noは必ず1フィールドにnoですが名前は1フィールドに1文字で任意です。

説明不足またはご指摘とは違っていたら申し訳ございません。
716デフォルトの名無しさん:2007/12/12(水) 17:45:32
:Dn
717デフォルトの名無しさん:2007/12/12(水) 18:11:41
つまり>>712で上手く行くんだろ?
718デフォルトの名無しさん:2007/12/12(水) 21:28:49
>>708
何かのログだと思うけど、
普通に行くならこんな方法。
1行ずつ読んでって先頭がnoじゃなければ前のレコードにくっつける
くっつけた状態で1行の処理を始める

もしそれがCSVならもっとまともな方法がある
719デフォルトの名無しさん:2007/12/12(水) 23:41:32
Aから、次のAかファイル終端までの文字列取り出して
英字以外を外せば完成じゃん
720デフォルトの名無しさん:2007/12/13(木) 11:58:19
#!/usr/bin/perl
use strict;
use warnings;
use Data::Dumper;
open(my $fh , '<' , '708.txt') || die($!);
(my $data = do {local $/;<$fh>}) =~ s/\r?\n//g;
my @data = split /\s+/,$data;
my @R = ();
my $i = 0;
for(@data){
if($_ eq 'no'){
$i++ if defined $R[$i];
next;
}
push(@{$R[$i]},$_);
}
my @R2 = map join('',@{$_}),@R;
print Dumper(@R2);
721デフォルトの名無しさん:2007/12/13(木) 12:26:41
エレガントじゃないな
722デフォルトの名無しさん:2007/12/13(木) 13:49:08
>>708が理解できてなさそうだったから
分かりやすいようにifとかnextとか使って書いてみたんだが
723698:2007/12/13(木) 13:53:25
>>705
> print {$wfh} "出力"
> このブレースは何のためにつけてるの?

亀レスでごめん。Perlベストプラクティスで見たような気がする。
普通の変数を出力しようとしてるのか判断がすぐつくようにとか。
今手元にないからもしかしたら勘違いしてるかもだけど。
724デフォルトの名無しさん:2007/12/13(木) 14:33:37
>1. 名前の始まるフィールド(Aの位置)は決まっています。
open my $fh , "dump.txt";
my @data;
while(<$fh>){
push(@data,split(/\s/));
}
print join("-",@data),"\n";
print join("",grep(!/no/,@data[8..22]));
725デフォルトの名無しさん:2007/12/13(木) 17:26:48
区切り文字にはスペースはカンマはあんまり使わんなあ俺。
ものぐさなもんでタブばっかだ…orz
726デフォルトの名無しさん:2007/12/13(木) 18:02:13
すみません、
任意の時間ID(年月日時分秒の14桁で、例えば20071213123401)を、
UTC(unixtime)に変換する方法を教えてくださいませ。

Time::Localは使えません。
どうぞ、よろしくお願いしますm(__)m
727デフォルトの名無しさん:2007/12/13(木) 18:41:17
use POSIX; して mktime 使えばいいよ。
728デフォルトの名無しさん:2007/12/13(木) 19:10:09
ありがとうございます!
use POSIX; でチャレンジしてみます
729デフォルトの名無しさん:2007/12/13(木) 23:09:08
ちょっと質問です。
ActivePerl 5.8.x を知る上でのお勧め書籍を教えてください。

C/C++ 上がりなんで、差分について詳細に記載があるものが希望です。

730デフォルトの名無しさん:2007/12/14(金) 00:43:07
ActivePerlは、Perlを動かすためのソフトであって、
Perlの文法とか、そーゆーのとは違うぜ。
731デフォルトの名無しさん:2007/12/14(金) 00:51:19
C/C++とPerlの差分について扱っている書籍はしらんなぁ・・・
732デフォルトの名無しさん:2007/12/14(金) 02:52:26
俺もC++からだったけど、continue はどうやるんだみたいなのも、
とほほとか見てなんとかなったっよ。
733デフォルトの名無しさん:2007/12/14(金) 05:20:38
あー、でもC経験者は数が多いからか、
last next if elsif とかに、「C経験者は間違えないように!」って書いてる本はあるな。
734デフォルトの名無しさん:2007/12/14(金) 08:29:27
735デフォルトの名無しさん:2007/12/14(金) 10:10:37
ActivePerl関係あるの?
736デフォルトの名無しさん:2007/12/14(金) 20:47:19
いちいちActivePerlにツッキミ入れるなよ。しつこいなぁ。
737729:2007/12/14(金) 23:20:23
>>734さん
ありがとうございました。
Perl は、いまいち把握していないところが多いので、C風にクドクドと

  printf("%s%s",$foo,$bar);

なーんてことをしてしまったりしますが、このサイトがあればなんとかなりそうです。

ところで、最近はピリオドで繋ぐ技を身に付けました。

  print $foo.$bar;

さいきんは関数呼び出しに悩む日々です。
ポインター無しに関数への配列渡しをどうすればよいか、とか
構造体はどうやって実現すべきか、などと悩みます。
たぶん Perl 風のエレガントな表記法があるのでしょう。
738デフォルトの名無しさん:2007/12/15(土) 00:05:52
>>737
配列渡しは、以下のようにやる。適当に書いたから、エラーになるかもしれんけど。

my @hoge1 = (1,2,3);
my %hoge2 = (a=>1,b=>2);
&fuga(\@hoge1, \%hoge2);
sub fuga($$)
{
my($hoge1,$hoge2) = @_;
print $hoge1->[0];
print $hoge2->{'a'};
}

構造体の変わりは、連想配列かな。
バイナリーレベルで必要なら、packでできるけど、結構めんどくさい。
739デフォルトの名無しさん:2007/12/15(土) 18:23:03
000135 って格納されている数字を
135 とプリント文で出力したいんですけど、
どうすればいいか教えてもらえませんか?
740デフォルトの名無しさん:2007/12/15(土) 18:41:35
$num = "000135";
print $num-0;
741739:2007/12/15(土) 18:58:09
>>740
ありがとうございます
上手く表示できました
742デフォルトの名無しさん:2007/12/17(月) 19:43:15
Math::Random::MTを使ってマルセンヌ・ツイスタな
良い感じの擬似乱数を出したいのですけども、
srandに渡す種はtimeで良いのでしょうか?
743デフォルトの名無しさん:2007/12/17(月) 21:11:09
744デフォルトの名無しさん:2007/12/18(火) 12:41:51
>>743
ありがとうございます。

頻繁に呼び出す予定ので
srand(time ^ $$)
はやめておいて、かと言って
srand (time ^ $$ ^ unpack "%L*", `ps axww | gzip`)
では時間がかかり過ぎるので、
結局、
srand(time ^ ($$ + ($$ << 15)))
にするとこで落ち着きました。
745デフォルトの名無しさん:2007/12/19(水) 00:27:34
>>744
乱数の種にPIDを入れてるから毎回違う値がほしいんだろうけど、わざわざ種を指定するメリットは必ず同じパターンのランダムになるってだけだと思う。>>743のリンク先を読んだなら、普通はsrand()はいらないって理解できると思うんだけど。
それとも、Perlのバージョンが古いから自分で種を与えないといけないってこと?
746742:2007/12/19(水) 00:40:52
>>745
Math::Random::MTを使ってメルセンヌ・ツイスタで擬似乱数を作る場合は、
乱数種の設定が必須だからこういう風にしてみました。
線形合同法を使っているcore perlのrand関数は使いたくなかったのです。
下位ビットを捨てたりなんだり工夫すればcore perlのrand関数でもある程度きちんとした乱数も作れるんでしょうけども、
今回はメルセンヌ・ツイスタで作ってみたかったのです。
747デフォルトの名無しさん:2007/12/19(水) 02:49:33
種無しでMath::Random::MTのsrand呼ぶだけでいいんじゃないの?
あとはよきにはからってくれたとおもうんだけど。
748デフォルトの名無しさん:2007/12/19(水) 03:25:46
749デフォルトの名無しさん:2007/12/19(水) 18:37:16
すみません。大変初歩的なことですが、どなたか教えて頂けたらと思います。
@a=();
for($i=0;$i<2;$i++){
if($i == $a[0]){
print "BAD\n";
}elsif($i != $a[0]){
print "OK\n";
}
}
とすると、
BAD
OK
と出力されるのですが、空の配列の要素0は数値0と同等と考えて宜しいのでしょうか。
又、あくまで数値$l=0, 1と空であることを比較演算して、
OK
OK
と出力されるにはどのような記述があるのでしょうか?

恐縮ですが、どなたかご指導願えたらと思います。
750デフォルトの名無しさん:2007/12/19(水) 19:08:10
perlop
751デフォルトの名無しさん:2007/12/19(水) 19:11:45
defined
752デフォルトの名無しさん:2007/12/19(水) 19:43:02
== != は数値に変換してから比較する。("0" == "" ⇒真)
eq ne は文字列で比較する。("0" eq "" ⇒偽)

@a=();
for($i=0;$i<2;$i++){
 if($i eq $a[0]){
  print "BAD\n";
 }elsif($i ne $a[0]){
  print "OK\n";
 }
}
753デフォルトの名無しさん:2007/12/19(水) 19:48:09
Perl 5.10.0 がリリースされましたが一言どうぞ
754デフォルトの名無しさん:2007/12/19(水) 19:58:15
でっていう
755デフォルトの名無しさん:2007/12/19(水) 20:28:53
俺の使用言語からPerlはほぼ消えたからどうでもいい。
756デフォルトの名無しさん:2007/12/19(水) 20:31:46
じゃあこのスレからも消えてください
757デフォルトの名無しさん:2007/12/20(木) 00:33:12
Perl::Tkで、書き込み終えたテキストファイルを自動で開きたいのですが、コマンドラインに
パスを渡してしまうと、その時点でperlが終了してしまいます。

$target_text = shift @ARGV; #結果ファイルの指定先パスを格納(*.txt)
.....#処理、書き込み、FHクローズ
eval exec ($target_result." &"); #ファイルは開くが、スクリプトも終了してしまう

eval で囲ってあげても終了してしまいます。Windows環境で上のコマンドを実行するのはムリでしょうか。

よろしくお願いいたします。
758デフォルトの名無しさん:2007/12/20(木) 00:52:59
>>757
perldoc -f exec
759デフォルトの名無しさん:2007/12/20(木) 00:54:53
それが exec の正しい動作だからです。
普通は spawn してから exec します。

もっと簡単なので system を使うという手もあります。
760デフォルトの名無しさん:2007/12/20(木) 01:03:13
>> 759
ありがとうございました。初めは system でやってたのですが、対象ファイルを開いていると
エディタの「現在開いています...」アラートメッセージ (とか秀丸のアレとか) と、ファイルハンドルの取り合いになって
TKがフリーズしてしまうのです。spawn 試してみます。

>>758 「perldoc -f exec」はもう一度読ませていただきました。ありがとうございました。
761デフォルトの名無しさん:2007/12/20(木) 08:55:36
>>753
> Perl 5.10.0 がリリースされましたが一言どうぞ

もう安楽死させてあげたらと思った。
762デフォルトの名無しさん:2007/12/20(木) 11:10:25
>>757
Win32で&とか付けても意味なくね?
"start " . $target_result
のほうがいいかもよ。
763デフォルトの名無しさん:2007/12/20(木) 17:34:07
>>753
sayとかswitchとか//演算子とか、、、
こんなの5.6あたりで実装しとくか、perl6まで実装しないかの二択だろ?

@+,@-,(?{})を捨てちゃうのも個人的には×だな。
過去スクリプトの見直しをせにゃならんかもしれん、、、
764デフォルトの名無しさん:2007/12/20(木) 23:47:38
>>763
後半はあんたの読み間違いじゃないんかい?

readdirやglobを使ってるWinユーザは大騒ぎになりそうな仕様に読めるが、
大丈夫なんだろうか?
765デフォルトの名無しさん:2007/12/21(金) 01:48:43
ますますわけの分からんブキミなカタマリになったんだな。
766デフォルトの名無しさん:2007/12/21(金) 01:50:15
な、なに?! switch付いたのか! Perlも進化したなw
767デフォルトの名無しさん:2007/12/21(金) 02:10:27
Statistics::Clutoをインストールしたいのですが、make testでエラーがでてしまいます。
どなたか正しいインストールの手順を教えていただけないでしょうか?

以下に私が行った手順を書いておきます。以下の記事を参考にしました。
ttp://blog.livedoor.jp/techblog/archives/64598859.html

Clutoのパスは
/home/hogehoge/cluto-2.1.2/Linux-i686/libcluto.a
Statistics::Clutoをダウンロードし解凍した場所のパスは
/home/hogehoge/Statistics-Cluto-0.01
です。
Statistics-Cluto-0.01ディレクトリに移り
$ perl Makefile.PL LIBS='-L/home/hogehoge/cluto-2.1.2/Linux-i686/libcluto.a -lcluto'
PREFIX=/home/hogehoge/local/perl LIB=/home/hogehoge/local/perl/lib
INSTALLMAN1DIR=/home/hogehoge/local/perl/man/man1 INSTALLMAN3DIR=/home/hogehoge/local/perl/man/man3
$ make && make test

としたのですが、エラーがでてしまいます。
768デフォルトの名無しさん:2007/12/21(金) 02:15:40
エラー内容を貼り付けるのを忘れていました。
t/Statistics-Cluto......1/51
# Failed test 'use Statistics::Cluto;'
# at t/Statistics-Cluto.t line 9.
# Tried to use 'Statistics::Cluto'.
# Error: Can't load '/home/hogehoge/Statistics-Cluto-0.01/blib/arch/auto/Statistics/Cluto/Cluto.so'
for module Statistics::Cluto: /home/hogehoge/Statistics-Cluto-0.01/blib/arch/auto/Statistics/Cluto/Cluto.so:
undefined symbol: CLUTO_S_BuildTree at /usr/lib/perl5/5.8.8/i386-linux-thread-multi/DynaLoader.pm line 230.
# at (eval 3) line 2
# Compilation failed in require at (eval 3) line 2.
# BEGIN failed--compilation aborted at t/Statistics-Cluto.t line 9.
&Statistics::Cluto::constant not defined at t/Statistics-Cluto.t line 62
# Looks like you planned 51 tests but only ran 2.
# Looks like you failed 1 test of 2 run.
# Looks like your test died just after 2.
t/Statistics-Cluto...... Dubious, test returned 255 (wstat 65280, 0xff00)
Failed 50/51 subtests
769デフォルトの名無しさん:2007/12/21(金) 10:12:23
>>767
> undefined symbol: CLUTO_S_BuildTree at /usr/lib/perl5/5.8.8/i386-linux-thread-multi/DynaLoader.pm line 230.
770デフォルトの名無しさん:2007/12/21(金) 20:15:21
おじいちゃんスイッチなどいらん
771デフォルトの名無しさん:2007/12/21(金) 20:31:43
またPerlが危篤状態なのか。
今度こそ絶命してくれよ。

しかし、過去の法則からして、そろそろ誰かが爆発的に流行する何かを作るだろうねw
無理矢理蘇生させてしまって、人類の負の遺産がいつまで経っても廃棄処分できないw
772デフォルトの名無しさん:2007/12/21(金) 20:35:06
お前は本当にPerlが大好きなんだな
773デフォルトの名無しさん:2007/12/22(土) 08:52:56
Perlのプログラムのコンパイル時間が長いので、perlcc -Bでバイトコードを
生成したのですが、実行すると
"Don't know how to handle magic of type \156 at ./a.out line 2."
とエラーが出ます。
ぐぐってもperldiagのページくらいしかひっかからないのですが、どのように
調べて直していけばいいでしょうか?エロいひと教えて!
774デフォルトの名無しさん:2007/12/22(土) 19:28:14
カッとなってやった特に使い道はない
http://estructura.la.coocan.jp/calculator.cgi
775デフォルトの名無しさん:2007/12/22(土) 19:40:01
そういう一見無駄なことをして成長していく
776デフォルトの名無しさん:2007/12/22(土) 19:49:33
Perl扱い始めて5年以上経つんだけどね…OTL
電卓は簡単なものだとばかり思っていたが、半日もかかって鬱だった。

つことで、ちょっと現実逃避しかけてたマジモンの制作に取り掛かる。
777デフォルトの名無しさん:2007/12/22(土) 20:45:14
PHPでサーバがオンラインかどうかを判定するには、どうすればよい?
778デフォルトの名無しさん:2007/12/22(土) 20:59:14
アクセスして応答があるかみればいいんじゃね
779デフォルトの名無しさん:2007/12/22(土) 23:56:07
sayや//はまさに待望の機能だと思うけどな。switchは…、どうでもいいかな。
780デフォルトの名無しさん:2007/12/23(日) 12:07:07
正規表現の仕様追加はありがたいものが多い。

正規表現のおまけに言語がついているような言語なのに、
MS .netに仕様面で負けてるとこがあっちゃかっこ悪いもんね。
781デフォルトの名無しさん:2007/12/23(日) 15:52:23
>>777
fsockopen
782デフォルトの名無しさん:2007/12/23(日) 19:04:56
そりゃ後出しじゃんけんされたら負けてもしょうがないだろ
783デフォルトの名無しさん:2007/12/23(日) 21:03:10
> 正規表現のおまけに言語がついているような言語

それはないわww
784デフォルトの名無しさん:2007/12/24(月) 00:11:53
CPANのおまけに言語がついてきてるんだよな
785デフォルトの名無しさん:2007/12/24(月) 01:43:37
元はテキストエディタの ed
786デフォルトの名無しさん:2007/12/24(月) 10:31:48
>>785
それ、viじゃないん?
787デフォルトの名無しさん:2007/12/24(月) 12:21:45
>>786
ed -> ex <-> vi
788デフォルトの名無しさん:2007/12/24(月) 17:12:28
>>787
ed→vi

ex→vedit
じゃなかったっけ?それってSunOSだけ?
789デフォルトの名無しさん:2007/12/24(月) 17:41:27
viとexは同じもの。
790 ◆TWARamEjuA :2007/12/24(月) 18:48:23 BE:2178645-2BP(6825)
X68000でもedだったよなぁ。。。@ed.x
791デフォルトの名無しさん:2007/12/24(月) 18:50:29
edを元にラインエディタexを作ってた奴が
作ったスクリーンエディタがvi、じゃねーの?
exはviの一部にはなっちまったが元々ex自体はあったはず
792デフォルトの名無しさん:2007/12/24(月) 19:36:12
>>791
> edを元にラインエディタexを作ってた奴が

× edを元
○ emを元
793デフォルトの名無しさん:2007/12/24(月) 20:00:23
本当5.10に興味ないんだなw
794デフォルトの名無しさん:2007/12/24(月) 20:06:24
5になったときには、たしかに目をランランと輝かせながら
かぶりつきました。
795デフォルトの名無しさん:2007/12/24(月) 21:34:04
>>794
あの時のおまえは少女の様な目をしていたよ。
796デフォルトの名無しさん:2007/12/24(月) 21:48:45
あの時は確かに少女だったんだよ
797デフォルトの名無しさん:2007/12/25(火) 01:01:12
幼女の方がいい。
798デフォルトの名無しさん:2007/12/25(火) 07:44:20
>>797
799デフォルトの名無しさん:2007/12/25(火) 10:24:49
変質者だろ。ほっとけ。
800デフォルトの名無しさん:2007/12/25(火) 11:00:05
ネタならまだしもそっちはほっといちゃいかんだろ
801デフォルトの名無しさん:2007/12/25(火) 22:12:46
排他制御について質問です。
バージョンはPerl 5.005。また、DBは使えないとします。

以下の2つのプログラムが並行して走っています。
プログラムが走る頻度は、Prog1 >>> Prog2 とします。

 Prog1:hoge.txtを読み込み、何らかの処理を行った上で新たなデータを書き込む。(上書きまたは追記)
 Prog2:hoge.txtを読み込み、処理を行った上でhoge.txtそのものを削除する。(中身を空にするのではない)

個人向けウェブサイトによくあるCGIアクセスカウンタのようなものだと思ってください。
具体的には、Prog1がカウンタで、Prog2でカウンタの「現在の値」を利用した処理を行うというものです。
Prog2でファイルを削除したあとにProg1が実行された時は、hoge.txtが新規作成されるものとします。

Prog1だけ動いている分には、いくらでも排他制御のしようがあるのですが、
Prog2でファイルを削除する部分をどのように実装すればよいか分かりません。
ファイルの中身を空にするだけならflockによる排他制御でいいのですが。

 open(FH,"+>>$filename");
 flock(FH,LOCK_EX);
 #何らかの処理
 close(FH);      #ここでロック解除
 unlink($filename); #ロック解除後にファイル削除するのでマズそう
802デフォルトの名無しさん:2007/12/25(火) 22:14:34
言い忘れました。
>801の最後にあるソースは、Prog2のイメージです。
803デフォルトの名無しさん:2007/12/25(火) 22:50:33
>>801
ロック用のファイルを別に用意すればいい。
804デフォルトの名無しさん:2007/12/25(火) 23:07:52
>803
具体的にはどういうことでしょうか?
昔懐かしロックファイル方式とか、そういう話?
805デフォルトの名無しさん:2007/12/25(火) 23:21:00
そういうこと。
消してしまうからにはロックのしようがない
806デフォルトの名無しさん:2007/12/25(火) 23:30:31
ありがとうございました、検討してみます。
807デフォルトの名無しさん:2007/12/26(水) 02:25:14
>>801
prog2のcloseとunlinkの順を逆にすればうまくいきそうだけどな。
まぁ、ロックファイル作るのが確実だが。
808デフォルトの名無しさん:2007/12/26(水) 11:57:07
「昔懐かし」になんかムッとした

何故だっ!?
809デフォルトの名無しさん:2007/12/26(水) 12:06:38
>>807
UNIX系ならそれでいいけどWindowsだとだめだったきがす
元の質問者がどの環境を対象にしてるのかわからんけんど
810デフォルトの名無しさん:2007/12/26(水) 13:44:22
5.10いいよ5.10。
811デフォルトの名無しさん:2007/12/26(水) 14:20:00
特定の場合にしか使えない奇天烈なやり方を考えるのはパズルのようで
おもしろいのは否定しないが、実用にするなら手堅くロックファイルに
しとけ。

flockを使った排他制御でflock対象のファイルを削除するとだいたい
以下のようなパターンにはまって終わる。

Prog2 open
Prog1 open
Prog2 flock
Prog2 処理
Prog2 unlink
Prog2 close
Prog1 flock ← 既に開いたファイルはunlinkされてもアクセスできる
Prog1 処理 ← 他の誰もアクセスできないファイルにむなしく書き込むのみ

これでめでたくデータ消失w
812デフォルトの名無しさん:2007/12/26(水) 19:47:31
つっこみどころがありまくりと思ったら同一テキストを扱う場合だったのか…なるほど
813デフォルトの名無しさん:2007/12/27(木) 01:23:38
同一じゃなかったら、そもそもロックの話にすらならないような(笑)
814デフォルトの名無しさん:2007/12/29(土) 16:24:53
5.10と、5.8の違いについて日本語で解説しているところは無いでしょうか?
Unicodeに対応したのと、新しい正規表現が追加された
((?-n)、(?+n)、(?(-n)、(?(+n)、\k{name}、\g{name}、\K、(?|、\h、\H、\v、\V)
という事は判りましたが、この表現がどういう効果があるのかよく解りません。
815デフォルトの名無しさん:2007/12/29(土) 17:27:08
>>814
google
816デフォルトの名無しさん:2007/12/29(土) 19:30:27
perlのfinance quoteを使っている人はいますか?
どんなことができるのでしょうか?
817デフォルトの名無しさん:2007/12/31(月) 02:09:29
perl初心者です。
必要に迫られて(仕事ではありませんが…)学習しています。
sjisのデータファイルを読んで、全角カタカナを全角ひらかなに変換しなければなりません。
y、trを試しても駄目でsplitして1文字づつ変換しようとしましたがこれも駄目でした。
やり方をご教示ください。
818デフォルトの名無しさん:2007/12/31(月) 02:21:41
use utf8;
open my $fi, "<:encoding(Shift_JIS)", "in.txt";
open my $fo, ">:encoding(Shift_JIS)", "out.txt";
while(<$fi>) {
tr/ァ-ン/ぁ-ん/;
print $fo $_;
}
close $fo;
close $fi;


ソースはUTF8で保存。
819デフォルトの名無しさん:2007/12/31(月) 02:26:38
>>818
有難うございます。
今からやってみます。
820デフォルトの名無しさん:2007/12/31(月) 03:03:37
>>819
できました。有難うございます。
これで用は足りるのですが、後学のために教えていただけると助かります。
つまり、ソースはUTF8で書くのをdefaultにするのがよいのかということと
もう一つ、この例の場合標準出力に出す場合はどのようにすればよいのかと言うことです。
後者は、わからなくても良いのですがなんとなく欲求不満な状態に陥りそうなもので…。
821デフォルトの名無しさん:2007/12/31(月) 03:51:32
Shift_JISとかの問題点はよくご存知だと思います。

>817の問題もそうですけど、文字列を扱う時はShift_JISよりUTF8の方が都合が良いことが多いです。
仕様上、Shift_JISで入力してShift_JISで返さないとならない場合もありますが、
そういう場合は、内部でUTF8に変換して、最後にまた戻す、なんてことをよくやります。

で。
扱う文字列がUTF8ならソースもUTF8の方が便利よね、と。
822デフォルトの名無しさん:2007/12/31(月) 09:15:58
初心者用テンプレがいつのまにかいなくなってるじゃないか。
823デフォルトの名無しさん:2007/12/31(月) 13:33:47
>>820
ソースをUnicodeで書いて入出力もレイヤをかましてUnicodeで行うのが最近の流行りやね
別にUTF8でなくてもいいんだけど、<U+7F範囲の文字を多用するから都合がいいだけ。

で、既に開かれているストリームにレイヤを適用するならbinmode関数を使えばいい。
binmode STDIN, ":encoding(Shift_JIS)";
binmode STDOUT, ":encoding(Shift_JIS)";

これから開くストリームに対してデフォルトのレイヤを指定したいなら、openプラグマ。
詳しい仕様とかは適当にぐぐっといて。
824デフォルトの名無しさん:2007/12/31(月) 14:35:56
>>823
820です。
有難うございます。
825デフォルトの名無しさん:2007/12/31(月) 15:00:21
820です。
既存のソースファイルを utf8 にコンバートすべく次のようにやってみましたが、
出力されるのは Shift_JIS のようです。
何が悪いのでしょうか? ご教示くだされば幸です。

use utf8;
binmode STDIN, ":encoding(Shift_JIS)";
open OUT, ">utf_$ARGV[0]";
print OUT <>;
826デフォルトの名無しさん:2007/12/31(月) 16:54:18
それは open 文の古い書き方だよね。
>>818 のようにパラメータ3つの open 文を使うといい。
open OUT, ">", "utf_$ARGV[0]";

あと、余計なおせっかいかもしれないが Windows 環境で動かすなら
":encoding(Shift_JIS)" じゃなく
":encoding(CP932)" が適切だよ。
827デフォルトの名無しさん:2007/12/31(月) 17:19:30
binmode でうまくいかないなら

use utf8;
open IN, "<:encoding(CP932)", $ARGV[0];
open OUT, ">:utf8", "utf_$ARGV[0]";
print OUT <IN> while not eof IN;
828デフォルトの名無しさん:2007/12/31(月) 18:13:15
<> と <STDIN> は等価じゃない。
この場合は
print OUT <STDIN>;

あと、shiftjis と cp932 も、変換出来無い文字があったりするから、
Windows環境ならいつも cp932 でおk、って訳でもない。
829820:2007/12/31(月) 22:00:42
>>826
>>827
>>828
いろいろなノウハウ有難うございます。
このあたり勉強します。
830デフォルトの名無しさん:2008/01/01(火) 19:01:54
>>828
> あと、shiftjis と cp932 も、変換出来無い文字があったりするから、
> Windows環境ならいつも cp932 でおk、って訳でもない。
何気なく見過ごしていましたが、このような場合、どの時点でどのように対処するのが
効率的か、お教えいただければありがたいです。
831デフォルトの名無しさん:2008/01/01(火) 20:11:22
シフトJIS は Windows だけのものでは無いってこと。
ケータイもシフトJIS。
マッキントッシュもシフトJIS。
古いPC-9801のMS-DOSもシフトJIS。
どのマシンがどのシフトJISを使っているか調べて
それに応じて使い分けよう。

で、Windows は cp932 というシフトJISなわけ。
>>828 はそこらへんを混乱している。
832デフォルトの名無しさん:2008/01/01(火) 20:16:13
ActivePerl v5.8.6 built for MSWin32-x86-multi-thread
Archive::Zipで空の(or不正な)ファイルを読み込ませると、エラー文がだらだらと表示されてしまいます。
これを表示させない方法(or read前に正常なzipか判定する方法)があれば教えてください。

---------- ソースの一部 ここから ----------
$zip = Archive::Zip->new();
die "error\n" unless $zip->read($zipfile) == AZ_OK;
---------- ソースの一部 ここまで ----------

---------- 出力(パス書き換え済) ここから ----------
format error: file is too short
at 〜/site/lib/Archive/Zip.pm line 1015
Archive::Zip::Archive::_findEndOfCentralDirectory('Archive::Zip::Archive=HASH(0x275188)', 'IO::File=GLOB(0x182f7ec)') called at 〜/site/lib/Archive/Zip.pm line 923
Archive::Zip::Archive::readFromFileHandle('Archive::Zip::Archive=HASH(0x275188)', 'IO::File=GLOB(0x182f7ec)', 'test.zip') called at 〜/site/lib/Archive/Zip.pm line 904
Archive::Zip::Archive::read('Archive::Zip::Archive=HASH(0x275188)', 'test.zip') called at 〜/test.pl line 28
error
---------- 出力 ここまで ----------
833デフォルトの名無しさん:2008/01/01(火) 20:37:04
>>832
ドキュメントのsetErrorHandler()を参照。

$oldErrorHandler = Archive::Zip::setErrorHandler(\&myErrorHandler);
という感じでエラーハンドラを設定できる。デフォルトのエラーハンドラは\&Carp::carp。

my $old = Achive::Zip::setErrorHandler(sub{ });
$zip->read($zipfile);
Archive::Zip::setErrorHandler($old);

とするなりsetErrorHandler(\&Carp::croak)とでもしてアボートさせるなりすればいい。
834832:2008/01/01(火) 20:58:16
>>833
レスありがとうございました。
エラーハンドラというのは知らなかったので、いろいろと調べてみます。
835デフォルトの名無しさん:2008/01/01(火) 21:01:47
>>831
> で、Windows は cp932 というシフトJISなわけ。
とすると、 cp932 は shiftjis を完全に内包している筈だけど、そうではない場合がある。
例えば、 "\x{301c}" は、 shiftjis だと正常に変換できるけど、 cp932 だとエラーになる。

cp932 を shiftjis に機種依存文字などを追加したもの、と理解していると、ハマる事がある。
836デフォルトの名無しさん:2008/01/01(火) 21:17:30
>>835
まだ理解してないね。
>Windows は cp932 というシフトJIS
これのどこが「cp932 は shiftjis を完全に内包している」と読めるわけ?
shiftjis など一言も書いてないんだが。
いろ考える前にさ、ネットで検索でもしてコード表とか眺めてご覧よ。
そのほうが早いって。
837デフォルトの名無しさん:2008/01/01(火) 21:35:57
ころしあえー
838デフォルトの名無しさん:2008/01/01(火) 21:46:23
shiftjisはシフトJISと同義だろ。
839デフォルトの名無しさん:2008/01/01(火) 21:59:50
掲示板の荒らし対策で、
プロキシ経由の書き込みは、はじこうとして以下のような記述をしたんだけど、
うんちゃらかんちゃら処理を行う前に、白いエラー画面になってしまう。
うんちゃらかんちゃら処理を行わせるにはどうしたらいい。
ネット調べたが、分からん。
ちなみに俺COBOLER。コボプロをせっせと書いて生活費稼いでる。

if ( HTTP_VIA =~ "") {うんちゃらかんちゃら処理}

840デフォルトの名無しさん:2008/01/01(火) 22:02:09
^^;
841デフォルトの名無しさん:2008/01/01(火) 22:04:18
>>840
いや、そう笑うなって。
馬鹿な質問してるのは、なんとなく分かるんだけど。
842デフォルトの名無しさん:2008/01/01(火) 22:07:19
if($ENV{'HTTP_VIA'}){}
843デフォルトの名無しさん:2008/01/01(火) 22:21:02
>>842
その記述でも、やっぱ駄目だな。

エラー
リクエストされた URL は取得できませんでした

--------------------------------------------------------------------------------

以下の URL を取得した際に: http://123cgi.plala.or.jp/oreatamawarui/dousiyoumonaibbs/mousinitai.cgi

次のエラーが発生しました:

アクセスできません.
現在設定されているアクセス制御の設定のため,あなたからのリクエストは受けつけられません.この設定が正しくないと思われる場合には,このサービスの管理者へ連絡してください.




--------------------------------------------------------------------------------

Generated Tue, 01 Jan 2008 13:14:44 GMT by Casper (squid)

ってメーッセージが出た。
プロバイダの設定なのかな。ちなみにぷらら。
844デフォルトの名無しさん:2008/01/01(火) 22:30:45
つwebprog板
845デフォルトの名無しさん:2008/01/02(水) 01:56:58
よりによって「ぷらら」とは・・・
そこね、ネットサーフィン専用プロパイダと割り切った方がいいよ。
努力しても時間の無駄だと思うな。
846デフォルトの名無しさん:2008/01/02(水) 17:30:28
>>830
perlのcp932はWindows3.1Jのcp932(から外字を除いたもの)で、今のWindowsのcp932とは
微妙に異なっているからじゃ?
特にJIS X 0213(Shift_JIS-2004)への対応の差で問題が表面化しやすい。
Perlのcp932はShift_JIS-2004に対応していないが、Windows(Vista)のcp932は対応している違い。
Perlは標準のEncodeモジュール自体がJIS X 0213へ対応していないけどね。

やりたい事が Shift_JIS/JIS/EUC-jp 間の相互変換ならば(意外にも)jcode.plが使えるけど、
ちゃんとしたユニコード化が必要なら諦めた方がはやい。
847828, 835:2008/01/04(金) 19:48:21
蛇足になりますが。

私自身、shiftjis と共通する部分の文字は全て cp932 でも同じように変換される、と思いこんでいた時期がありました。
しかし実際は、 shiftjis と cp932 、どちらを指定するかで結果が変わってしまう文字が存在します。

あのレスでは、こういう副作用があるので shiftjis の代わりに cp932 を使う時は注意した方がいい、という事を言いたかったのです。

今回の事は、私も勉強になりました。
848デフォルトの名無しさん:2008/01/05(土) 22:43:37
もしスレ違いならごめんなさい。PERL(正規表現?)教えてください。
「6〜15文字の英数字の文字列チェック」をしたくて、以下の3行プログラムを作りました。
(パスワードの妥当性チェックみたいなイメージです。)

#!C:/Perl/bin/perl
$pass = "\%pass12"; # \記号無しの"%pass12"でも結果は一緒
print (($pass=~ /[a-zA-Z0-9]{6,15}/) ? "$pass: 妥当" : "$pass: 不正");

結果は「%pass12: 妥当」になります。
%記号は[a-zA-Z0-9]ではないと思い、結果を不正にしたいのですが、
ググったけど分かりません。どこ嫁ばいいですか?
849デフォルトの名無しさん:2008/01/05(土) 22:48:34
/^[a-zA-Z0-9]{6,15}$/
850デフォルトの名無しさん:2008/01/05(土) 22:51:53
ありがとうございました。吊ってきます…。
851デフォルトの名無しさん:2008/01/06(日) 10:14:46
>>849のやさしさに惚れた
852デフォルトの名無しさん:2008/01/06(日) 14:36:04
PerlでYAMLを使ってみようと思い、YAML.pmをインストールしました。
しかし YAML::Load() してみると、データがすべて文字列になります。
例えば
- hoge
- 123
- true

[ 'hoge', '123', 'true' ]
になってしまいます。
これって仕様なんでしょうか。みなさんどうしてますか?
853デフォルトの名無しさん:2008/01/06(日) 16:09:09
文字列じゃなくちゃんと数値になってるよ。

use YAML;
use Scalar::Util;

print "\$YAML::VERSION = $YAML::VERSION\n";

my $arrayref = Load(<<'__HERE__');
- hoge
- 123
- true
__HERE__

foreach (@{$arrayref}) {
    # cf. http://blog.livedoor.jp/dankogai/archives/50916183.html
    print "$_: ", Scalar::Util::looks_like_number $_ ? 'num' : 'string', "\n";
}
854デフォルトの名無しさん:2008/01/06(日) 16:14:11
Dumpしてみればいいじゃないか
855デフォルトの名無しさん:2008/01/06(日) 18:57:52
>853
looks_like_number って数字に「見える」なら文字列だって真にならない?

>852
多分、YAML.pm の仕様。
とりあえず YAML::Syck で $YAML::Syck::ImplicitTyping = 1 にすれば数値になるはず。
他にも YAML 系のモジュールはあるんで調べてみるといいかも。
856デフォルトの名無しさん:2008/01/06(日) 20:03:44
ActivePerl使ってます。
print "start\n";
while(<>){
chomp;
last if(/q/);
print "ok\n";
}

これがcmd.exeでは正しく動くのにCygwinでは動きません。
対話型を要求するスクリプトではいつもそうで、それ以外のだとcygwin上で動きます。
<>を使えるようにしたいのですが、どうしたらいいですか。
857デフォルトの名無しさん:2008/01/06(日) 20:20:20
>856
Cygwin 上って cmd.exe + bash 上でってこと?

一番安易な解決策だと Cygwin 上では cygwin perl を使う。
後、ck + tcsh on Cygiwn だと

use IO::Handle;
STDOUT->autoflush(1);

してやれば ActivePerl でも動いてるように見える。
858デフォルトの名無しさん:2008/01/06(日) 20:27:01
>>857
cygwin上でperlを使いたいのではなくて、上記のような対話的プログラムを動かしたいんです。
cygwin上でperlを使うことは既にできています。
active perlを使っています。
cmd.exeは普段全く使っていません。
TeraTerm+CygTerm+Cygwinからactive perlへのPATH通してperl使っています。
で、以上はどうでもいいことで、今回の質問の本筋ではありません。

知りたいのは、対話的プログラムについてです。
シェルはbash使っています。
普通は
print "start\n";
while(<>){
chomp;
last if(/q/);
print "ok\n";
}
動きますよね。ところが動かないので、なぜなのか知りたいのです。
違ったプログラムの書き方をすることで動かしたいのではありません。
上記の書き方で動くような設定の仕方を知りたいです。

cygwinというと対話的モードとそうでないモードがあると聞きます。
それが関係あるかもしれません。

以前はcygwinでも上記のようなプログラムが動いていたので、
cygwinでこういうことやろうとすることが間違っているとは思っていません。
きっと設定とかいじればうまくいくはずと思っています。
ところがうまくいかないので困っています。
859デフォルトの名無しさん:2008/01/06(日) 20:34:02
対話的モードで書いてくれ
860デフォルトの名無しさん:2008/01/06(日) 20:48:04
>>859
対話的モードでプログラムを書くということですか??
それだとしたら意味がわかりませんので教えてください。

cygwinを対話的モードにするということでしたら、やり方が分かりません。
ので、別途調べる必要がでてきます。
それに、cygwinを対話的モードにするだけで解決するかどうかもまだよく分かりません。
説明お願いします。
861デフォルトの名無しさん:2008/01/06(日) 20:58:41
>>860
>>859はただの混ぜっ返しだろ。
おれには、あんたが糞くだらないことで蹴躓いているように思えるよ。

いくつか推測ができるが、状況を的確に説明できない質問には答えたくない。
862デフォルトの名無しさん:2008/01/06(日) 21:09:38
>>861

状況をもう一度整理します。
まず、cmd.exeを使っていると書いたのは、めったに使っていなくて、プログラムそのもの
が原因でない証拠を示しただけです。
環境としては、TeraTerm+CygTerm+Cygwinからactive perlへのPATH通してperl使っています。
そして、やりたいこととしては、ダイヤモンド演算子<>を使ってシェル(bash)上の対話的プログラムを
書きたいんです、perlで。
そのための基礎練習として、
print "start\n";
while(<>){
chomp;
last if(/q/);
print "ok\n";
}
というプログラムを書きました。
そして、cygwinから動かしたのですが、
$ perl interactive_test

となって止まってしまいます。これが症状です。
ここで、■というのは次なるプロンプト($)が出ずにキャレットが点滅している状態を
示しています。つまり、エラーも出ず、何か入力しても反応しません。
例えば、「a」で何も出ないし、「q」で出ることも出来ません。
C-Cで出ることは出来ます。
863860:2008/01/06(日) 21:09:59
そして、cmd.exeで上記のコードを動かすと正しく動きます。
ということはプログラム自体が悪いのでなく、cygwin環境の設定が悪いのか、
cygwinの設定とプログラムの書き方の相性が悪いらしい、と考えました。
それで、設定(/etc/profile, ~/.bashrc)を調べてみましたが、とくに対話的シェル
でなくすような設定が見あたりませんでした。
以上が状況説明です。
864860:2008/01/06(日) 21:11:03
訂正
つまり、エラーも出ず、何か入力しても反応しません。

つまり、エラーメッセージも出ず、何か入力しても反応しません。
865デフォルトの名無しさん:2008/01/06(日) 21:33:23
とりあえず、 bash で
(echo a;echo q)|perl interactive_test
としてみるとか…

# a,q の後に改行してないとかかな
866860:2008/01/06(日) 21:36:49
>>865
ありがとうございます。よく分からないのですが、試してみたところ、
以下のようになりました。

$ echo a | perl interactive_test
start
ok
$ echo q | perl interactive_test
start
$ (echo a;echo q)|perl interactive_test
start
ok
$
867852:2008/01/06(日) 21:59:58
>>853
そのスクリプトで $arrayref を print Data::Dumper::Dumper($array) すると
$VAR1 = [
'hoge',
'123',
'true'
];
となりました。123もtrueも文字列として認識されてますよね?

>>854
おっしゃるようにDumpしてみておかしいと思ったので質問してみました。

>>855
>多分、YAML.pm の仕様。
Perlは数値も文字列も区別しないからこういう仕様でも構わないということでしょうか。
868デフォルトの名無しさん:2008/01/06(日) 22:00:40
>>862
>>857の言うようにするか、
$|=1;
をおまじないでscriptの前の方に書くことにする。

理由を書くのはめんどくさいや。
あんたが本筋でないと言っているところの問題。
869デフォルトの名無しさん:2008/01/06(日) 22:04:51
$ perl interactive_test して、
a の後に改行はしてる?
してなかったら、してみる
してたら、UNiX 系と Windows では改行コードが違うからそこらへんでひっかかってるのかもしれない。
だから、>>857 に「Cygwin 上では cygwin perl を使う。」と書いてるでしょ?
cygwin 用の Perl と active perl は違うよ?


870860:2008/01/06(日) 22:23:57
>>868
ありゃ、いけました。
$|=1;
を追加したところ正しく動作しました。
ありがとうございます。
思わぬところに原因があったんですね。
原因についてはよく分かっていないので、今後調べて理解します。
cygwinの設定というよりも、cygwinとperlの書き方の相性の問題だったようですね。

ところで、>>857についてはよく分かりません。
$|=1;
のほうが文字数は少ないですが、>>857のように書いたほうが本来は良いのでしょうか??
場合によるのかもしれませんが。
871860:2008/01/06(日) 22:27:23
>>869
改行しているかどうかというのはどういう意味でしょうか。
$perl interactive_test
a●
この●の部分で改行しましたが、
$ $perl interactive_test
a●

となります。この■はキャレットが点滅している状態を示しています。
ところが、
$perl interactive_test
a●
q●
start
ok
$
と一気に表示されてしまいます。
これが$|=1で出力をバッファリングしないようにしたらうまくいった理由なんですね。

余談ですが、さっきまではqで無反応だったのが設定を裏でいじっているうちにうまくいくようになりました。
どうやらcygwin.batの設定にも問題があったようです。

cygwin perl, active perlが違うことは知っていましたが、違いを理解しているわけではありませんでした。
本来はcygwin perlを使うほうがトラブルが少ないというのは知っていました(というより
耳にしていました)が、
・cygwin perl関連のドキュメントが極めて少ない(と思うのですが)こと
・cygwin perl には変な動作(bug?)が多いと聞いたこと
からこれはなんとしてもactive perlを使うようにしなければと苦肉の策でactiveperlを使うようになった次第です。
間違った考えでしたら、忌憚ないご意見待っています。
872デフォルトの名無しさん:2008/01/06(日) 22:33:22
>cygwinとperlの書き方の相性の問題
全然違うよ。

とりあえず件の問題はおまじないですませて、
あんたの言うところの「本筋」を習得してくれ。
873860:2008/01/06(日) 22:53:37
>>872
私はゆくゆくはWeb programmingをしたいんですよ。
だから、UNIX系OS使うことになりそうじゃないですか?
なので、今はcygwinでやってます。そのうち、mac買います。

そういったこともふまえると、やはり、こういうIO関係(?)の知識は大事になって
くるんでしょうか??
perlというとperlのなかだけの話だけで完結するかと思いきや、そうではなかったんですね。
それとも、macに変えればcygwin+activeperlといった泥臭い(?)話はなくなるのでしょうか。
(つまり、相性どうこうといった話ぬきに、すっきり扱えるようになるのでしょうか)??
まあ、どっちにしてもIOは大事なのかもしれませんが、なんかcygwinだとperlの「本筋」とは関係のない
ややこしいことが無駄に多量出現している感があります。

874デフォルトの名無しさん:2008/01/06(日) 23:31:21
VMwareでもインストールすればぁ?
875デフォルトの名無しさん:2008/01/06(日) 23:37:23
IO関係(?)の知識云々よりもまず人の話をきちんと聞くことのほうが大事だな。
876860:2008/01/07(月) 00:06:14
>>874
それはcygwinだとやはり面倒だという意味でしょうか?
cygwinは面倒だと思いますか??
VMWareに興味ありますけど、cygwinみたいな面倒な点はないかもしれないですが、
これはこれで面倒なことがあると聞きます。
一応、virtual PCを昔使ったことがあるし、colinuxもインストールしようとして
失敗した経験を持っています。

>>875
話を聞いていなかったということでしょうか??
たぶん、それは私の心あたりにない点なので、良かったらどの部分か教えてください。
話に聞き漏らしがあるのは、視力が悪いせいかもしれません。
自分では人の話をよく聞くことを人生で大事にしているのですが、
メールなどではなかなかよく見ようという気にならないです。
多分、角膜の病気だからだと思うのですが、世間ではそういういいわけが通用しないことは
心得ています。
迷惑かけてすんません。

ところで、IO関係となるとunixのシェルやカーネルの知識が必要になるみたいですね。
初心者には厳しい部分な気がいたします。
やはり初心者はIO関係が苦手なものなんでしょうか。
IO関係だけが苦手分野なんですよ、perl全体をいろんな分野に分けて見たときに。
そこで、気持ち悪いじゃないですか、知識に穴があるみたいで。
この穴を埋めてから次のステップに進みたいのですが、どういう手だてがあるでしょうか。
あるいは、IO関係は上級者向けだからノータッチ推奨ですか。
877デフォルトの名無しさん:2008/01/07(月) 00:17:57
1つ1つの知識を完璧にしながら進むなんてほとんど不可能に近い。
とりあえずおまじないを覚えておいて、理解が深まってから振り返ると意味が分かるなんてことはよくある
878860:2008/01/07(月) 00:31:11
>>877
もう返事がないものかと半分あきらめて、このスレももう店仕舞いかと思っていた矢先のコメント
ありがとうございます。

何も私は完璧を目指しているのではありません。
穴を完璧に針の穴さえもないくらいに無くそうとしているのではなくて、
IO関係全般に「ぽっかり」と開いた巨大ホールをなんとかならないものかと
腕組みして困り顔をしている次第です。

やはり、私のように情報系の教養を大学で学んでこなかったし、
かといってIT系職種に就いているわけでもないような、言って見りゃ「畑違いな人種」
にとってみれば、まったくの未知との遭遇と申しますか、つまるところ不安なのです。
とくに不安なのが、IO関係で、他の人はここらへんどうなのだろうかという一般論を知りたいと
思います。
日本中のPerl学習者で統計をとったときに、私のようにIOだけチンプンカンプンな人というのは
これは珍しいのでしょうか。
なぜこういうことを聞くかというと、珍しいのだとしたら私は直さないといけませんよね、だからです。

おまじないについては、宝物です。
それはもう、大事に覚えておきます。
879デフォルトの名無しさん:2008/01/07(月) 00:37:37
んなこと大学でもIT企業でも教えてくれないよ。
ジャン。
880860:2008/01/07(月) 00:46:13
>>879
大学やIT企業の例を出したのは、私がコンピュータ界隈に縁がないし、周りにもそういう人が
いないがために、他の人の学習のありさまがどうだか全く把握していないという点を説明するためです。
なので、別に、日本全体の統計をとったらIOがまるでダメなPerlerが何パーかというのが
大学や企業行けば把握できるということではありませんよ、ご冗談ですか??

私が知りたいのは、次のようなことです。
IO関係があまりにチンプンカンプンなのにも関わらず、『初めてのPerl』という言わば
超初心者向け(?)な本にサラリと、さも分かって当然かのごとく書いてあったので、困っているのです。
もちろん、初心者向けなので詳しく書かずにサラリと触りだけ書いてあったのかもしれませんが、
私はその「触り」さえもつかむことができませんでした。
それはもしかすると、unix系の知識がゼロだったからなのかもしれません。
実際、この章はunixを前提とします、って書いてましたから。
だから、初心者がIO関係で身につけるべき事項が100あるとしたら、私は20ほどしか分かっていなくて、
他のジャンルだと80以上は分かっているという憂慮すべき事態は、
UNIXの知識不足が原因なのか、はたまた、IO関係は初心者ノータッチ推奨なくらい難易度が高いため
なのかが非常に気になるところなのです。

誰か親切中田おしえてください。
881デフォルトの名無しさん:2008/01/07(月) 00:54:15
初心者はIOなんて知らなくていい
882860:2008/01/07(月) 01:08:00
>>881
ありがとうございます。これで安眠できますww

やはりノータッチ推奨でございますか。
いずれにしても、macのほうがいいよとうるさい知人がいて、
実際、macのほうが良さそうなのでmacにしてみようかなと思っています。
やっぱりweb programmingだと、windowsでperlって難しいですよね??

perlって汎用言語じゃないですか、何でも出来るっていう。
でも、windowsだと出来ることが限られるような気がいたします。
それは私がwindows関係のモジュールとか知識に明るくないからなのかもしれませんので、
突っ込みコメント常時歓迎です。
私はunix系にしたほうが良さそうな匂いをすでに嗅ぎつけているつもりです。
lampだってlinux, 主要なWeb系のサービスのアーキテクチャ(?)も調べてみたら
linuxで、でも、別の知人はwindowsでも出来るよと言ってます。
本当なんでしょうか。その人、私のような超初心者が言うのもなんですが、
perlのそれほど出来る人ではないんですよw
だから、眉唾状態です。
883デフォルトの名無しさん:2008/01/07(月) 01:24:08
このスレで適当なのか分からないのですが質問です。
以下のモジュールにおいてタグクラウドの大きさのレベルを決定する部分で、
自然体数使いその値を算出しているのですがなぜでしょうか?
http://search.cpan.org/src/LBROCARD/HTML-TagCloud-0.34/lib/HTML/TagCloud.pm
884デフォルトの名無しさん:2008/01/07(月) 01:28:55
Perlプログラミング救命病棟でいうレベル7以下ならWindowsで問題無し
885デフォルトの名無しさん:2008/01/07(月) 01:34:20
>>882
XAMPでぐぐって黙ってコードを書けよハゲ。
886デフォルトの名無しさん:2008/01/07(月) 01:37:29
ファイル処理をしたいです。
以下のようなファイルがあって、「1列目が "aa" なら、4列目を取得する」には
どのようにしたらいいでしょうか?

--
aa bb cc dd
bb cc dd aa
cc dd aa bb
aa dd cc bb
--

この場合は、"dd" "bb" が出力されればOKです。
よろしくお願いします。
887デフォルトの名無しさん:2008/01/07(月) 01:38:49
>>883
対数とったほうがと見た目がいい、としか。
底はfactorで相殺されるからなんでもよし。
888860:2008/01/07(月) 02:02:52
>>883
longtail部分の見せ方の問題ですよ。

まず、把握しておくべきこととして、$tag_item->{level}というのは、タグのfontの大きさです。
12+(level数)がそのタグの大きさになります。

たとえば、単純化して、以下のようなデータをクラウドにする場合を考えます。
1000count : 1tag
100count : 10tags
10count : 100tags
1count : 1000tags
この場合、logをとらずに等間隔に$self->{levels}を割り振ると大変なことになります。
どう大変かというと、ほとんど
1count : 1000tags
の部分でlevelが配分されてしまい、1000countのタグと100countのタグたちと10countのタグたち
がほとんど同じ大きさになってしまいます。
つまり、countの多いタグどうしをタグの大きさで視認できなくなって困ります。

logをとるとその心配がなくなります。
889860:2008/01/07(月) 02:09:55
>>884
その本をもっているのですが、どこにレベルについて書かれていますか???

>>885
なんでそんなに怒っているんですか。
確かにハゲかけてはいますが、ハゲといわれる筋合いはありません。
perlのプログラミングスキル的にハゲだという意味なら仕方ないです。
実際そうなんですから。
でも、XAMPPですか、それはwindowsにパッケージでインストールするだけでperlが使える
というものですよね。
それを使うことで私が抱えている問題を解決できるのでしょうか。
例えば、windowsで大丈夫か心配だという不安を抱えていて、
unixも勉強したほうが良さそうだと思っているのですが。そこでxamppというのは
私の要求にはそぐわない気がするのですが、いかがでしょうか。
是非お返事まっています。
890デフォルトの名無しさん:2008/01/07(月) 02:19:19
まずは何でもいいから勉強しろよ。阿呆か。
891860:2008/01/07(月) 02:24:21
>>884
今見つけました。目立たない場所にありました。54ページでした。
ついでに、
Perlプログラマのレベル10 - Perlプログラミング救命病棟より - naoyaのはてなダイアリー
http://d.hatena.ne.jp/naoya/20050809/1123563794
も見つけました。

で、本題です。私のレベルは何かと思い、最初レベル7かと思ったんです。
「レベル7: オブジェクト指向モジュールを自分で作成できるようになり、
コードを再利用することの喜びをようやく感じている。
パッケージならびにレキシカル変数とダイナミック変数の違いを理解している。
Perl の正規表現(regular expressions)が「普通の」という意味のレギュラーではなく、
単純なテキスト操作をはるかに超えるものだと知っている」
はい、当てはまります。
でも、レベル8をみると
「CPAN にバグレポートやパッチやモジュールを送ったり、
ドキュメントについて提案したり、、、、」
これは!!!!!!!!!!!!!!!!!!
私は超初心者のつもりであり、パッチ送るなんて5年あとの話だと思っていました。
ところが、私はこのレベル判定によると(おそらくそうだと思うのですが)レベル7
であり、その次のレベルであるレベル8まであと一歩だという話になっているのです。
ちょうど、善良な一般市民が王様に祭り上げられた気分です。
なんだか、このレベル判定って(少なくとも)私を測定するには向かないなあと思いました。

と思ってたら、
「レベル5: 正規表現、演算子、I/O、およびスコープについて基本的な理解がある。」
「I/O」
orzorzorz
892885:2008/01/07(月) 02:26:56
>>889
インストールするだけでPerlを使ってウェブプログラミングが出来るんだよハゲ。
君はIO関係で問題にあたる程スキルがない、だから黙ってコードを書けよハゲ。
893デフォルトの名無しさん:2008/01/07(月) 02:29:15
そんな長文書いてる時間があったら本の一冊でも読めよ。
いくら日本語が上手くなってもPerlがかけるようになるわけじゃないだろ。
とにかく本読んでコード書いとけ。そのうち出来るようになるから。
894860:2008/01/07(月) 02:29:39
以上のような理由から、私はレベル4〜7の範囲にあることが分かりました。
いかがでしょうか。

>>890
自分はアホでなくて私がアホだと決めてかかるのはどういう了見ですか。
私は現にこうやってこのスレでも勉強しています。
それを勉強していないということはあなたはきっとさぞ大量に勉強しているんですね。
でもですよ、私みたいに毎日コンピュータプログラミングの勉強時間がたっぷり無い
人間もいるのです。
なぜ私が十分な勉強時間がないかと申しますと、本業がIT系ではないからです。
といっても副業であるprogrammingで一銭も稼ぎを得てはいませんけど。
だから、マイペースでやるしかないですか。それこそ、1日5ページでいいから、
プログラミングの本を読む、あるいは、1日100行でいいからコードを書く。
あなたみたいにガリガリやっている人がすべてではなく、マイペースな人もいますよ。
世間知らずな私がえらそうに言ってごめんなさい。
895デフォルトの名無しさん:2008/01/07(月) 02:32:27
頭が悪いのに口だけは達者な馬鹿の典型だなw

で、どこから釣り?
896883:2008/01/07(月) 02:33:35
>>887-888
ありがとうございます。理解できました _ _
897860:2008/01/07(月) 02:37:58
>>892
なぜ怒っているんですか。ハゲと人に言ったら自分がハゲるとひいおじいちゃんが言ってましたよ。
MySQL, Perl, Apacheなどがセットに入っているんですよね。
でも自分でインストール時の設定できないのではないですか?
出来たとしても、そういう生ぬるい環境ではスキルが育たないような気もします。
何よりも、根本のOSの違いまでは吸収されないでしょう。
だから、macにしようかなと思っています。

web programmingを職業にするには、当然unix系、という意識があるのですが、間違ってますかね。
それから、レベル7まではwindowsと誰かがおっしゃってましたが、私は分野を限定しさえすれば、
レベル7です。ということは、windows卒業そろそろという時期じゃないですか。
そういう意味でも、macにするときかなという想いをより一層強めました。

IO関係でスキル無いことは大いに認めますが、私が知りたいのはIO関係でスキルを
身につけるために地道に努力すれば身につくかという一般論ではなくて、初心者である私が
IO関係の「ぽっかり穴」をどう対処すべきかという特殊論なのです。
898デフォルトの名無しさん:2008/01/07(月) 02:40:01
そろそろ秋田
899860:2008/01/07(月) 02:43:19
>>893
なぜみんなして、私が勉強していないと決めてかかるのですか。
私は勉強していますよ、ただしあなたのようなガリ勉ではありません。
リラックスが必要なのですよ、私にとっては。

それから、長文だからどうこうというのも決めつけです。
確かに私は他人と比べれば長文ですが、これは私にとってナチュラルなスタイルです。
それを何やら批判的な言い方をされるのはちょっと納得がいきません。
世の中には、私のように「長文」な人がたくさんいますよ。
なぜ長文に対して2chでは風当たりが強いのかということが気になります。

>>895 こういう無意味なレスは相手しません。怒っています。
900900:2008/01/07(月) 02:47:47
どっからmacが出てくるんだよ。サーバOSのシェア考えてみろよ。
キチガイさん、釣りはOK Waveか小町でやってください。
真面目に答えてるここの皆さんに失礼です。

貴方に良心があるなら、このスレへのレスはもうやめなさい。
貴方の言ってることの正否はともかく、貴方のレスでこのスレは荒れています。
他の利用者の方に失礼だと思いませんか。
それとも貴方は自分の我が儘を突き通すのですか。 返信不要
901デフォルトの名無しさん:2008/01/07(月) 02:51:21
> 世の中には、私のように「長文」な人がたくさんいますよ。
> なぜ長文に対して2chでは風当たりが強いのかということが気になります。

くそレス読まされるほうの身にもなってみろってんだ。
902デフォルトの名無しさん:2008/01/07(月) 02:51:44
>>899
いや君は簡潔に書く能力が低いのよ
しかもその点で向上心が無いの
だからそんな奴に対するそういう態度は当然だよ
903860:2008/01/07(月) 02:54:30
コードかけはげ五月蠅いので、>>886書いてみました。

open FH, '<filename' or die 'can't open file';
my @lines = <FH>;
my @results;
for $line(@lines){
next unless $line =~/^aa /;
push @results, (split / /, $line)[-1];
}

## @resultsに結果が入っているので、出力の仕方はご自由に。
904860:2008/01/07(月) 02:55:38
叩きたいなら人格ではなくコードを叩いてください。
人格攻撃する人のほうがよっぽどハゲですよ。くだらない。
905デフォルトの名無しさん:2008/01/07(月) 02:58:22
人を叩いてないで精進しましょうね。
906860:2008/01/07(月) 03:00:28
>>900
正義漢のふりすればいいとでも思っているんですか。
人を勝手に我が儘呼ばわりして。

シェアを考えるとmacよりlinuxがいいんですね。そうですか、参考になりました。
ただ、サーバOSと開発環境のOSとがごっちゃになってますね。
ここでハッキリさせるために、
「私は開発環境OSとしてマック使うつもりです」
と明言しておきます。これなら、macでもいいでしょう???
いかがですか。

>>901
907デフォルトの名無しさん:2008/01/07(月) 03:01:08
開発環境ならwinでいいじゃん
908デフォルトの名無しさん:2008/01/07(月) 03:01:46
>>906
お前のことなんだから勝手にしろお
909860:2008/01/07(月) 03:02:38
>>908
勝手にしていますよハゲ
910860:2008/01/07(月) 03:04:34
>>901
繰り返しますが、そういうあなたこそクソレスではないんですか。
こういう無意味なレスは相手しませんので、よろしくお願いします。

>>902
確かに簡潔ではないですけど、言うべきことを正確に言うためには必要だと思っています。
そこをどうこういうのは正義の問題というより思想・趣味の領域でしょう。

>>905
私へのメッセージですか??
911デフォルトの名無しさん:2008/01/07(月) 03:05:37
相手しませんとか言って全レスしてるあたり萌える
912デフォルトの名無しさん:2008/01/07(月) 03:06:28
>>903
正規表現やsplitよりsubstr使った方が早いだろ、常識的に考えて。
なんで$lineだけがレキシカル変数じゃないんだよ、常識的に考えて。

使用するサーバと開発環境のOS合わせた方が仕様の差異が少ないんだから、ウェブプログラミングしやすいだろハゲ。
最初から決めてるなら質問するなよ馬鹿。お前の日記帳じゃないんだよ。
913デフォルトの名無しさん:2008/01/07(月) 03:07:33
>>900
macは、perlの学習用にはそう悪い選択じゃないと思うよ。
perl、apache、phpあたりは最初から入ってるし……。
わざわざ乗り換えるほどのこともないとは思うけど。
914860:2008/01/07(月) 03:12:27
>>907
そうだったんですか!!!本当だとしたら勉強になります。
ところで、開発環境ならwindowsでも良いというのはどうしてですか???

凄腕エンジニアたちにはunix系使いが多いと聞いていますが、それとは矛盾しませんか??

○windowsを開発環境にする
●メリット: 今自分が持っているパソコンである、ツールが充実している
●デメリット: unixの知識が身につかない、
サーバOSをunixにする場合両方のOSの知識が必要になり大変・混乱する

○unixを開発環境にする
●メリット: CLI環境が充実していて開発効率が向上する、サーバOSと同じOSだということで
覚えるべき量が減る
●デメリット: とくになし

というイメージなので、やはりunixがいいかなと思っています。
そして、同じunix系ならmacが最近人気なようなので、ミーハー気分で
macにしようとおもっています。linuxではなくmacなことにとくに深い理由はありません。
915デフォルトの名無しさん:2008/01/07(月) 03:13:42
きが くるっとる
916デフォルトの名無しさん:2008/01/07(月) 03:19:55
要するにお前はunixの勉強をmacでしたいんだろ。
勝手にしろよ。
perlかんけーないし。板違い。
終了。

新・mac
http://pc11.2ch.net/mac/

917860:2008/01/07(月) 03:20:56
>>912
あっそこのmyよく忘れるんです、勉強になりました。
substr速いというのは『初めてのPerl』にも書いてましたね。勉強なりました。

最初から決めてるのでなく、私の見解・予定を明示した上でのほうがより的確な
アドバイスが得られるとの考えです。
やはりOS合わせたほうがいいのですね。貴重なアドバイスありがとうございます。
であれば、
server : mac
development : mac
にします。macもOSXであればlinuxとほとんど同じと聞いたので、
開発環境兼サーバーOSとしてmac、というのはあり得る話ですよね??


>>913
乗り換えるほどのことはないとはいえ、レベル8からはwindows卒業しどきとおっしゃった
方がいましたし、それに、ゆくゆくはweb programmingをすることを考えると
今からwindows卒業しようかなと思っています。
そこのあたりどうお考えになりますか???

それから、macが悪い選択でないというのは他に何か理由があるのでしょうか。
プリインストールについては聞き及んでいましたが、それって大したメリットでない
ようにも思えます。なぜなら、インストールくらいは私でも出来るからです。
それでもプリインストールのメリットってあるものなんですかねえ。
918デフォルトの名無しさん:2008/01/07(月) 03:24:58
(∩゚д゚)
919886:2008/01/07(月) 03:34:36
>903
どうもありがとうございます。
実は、、文字の間はスペースのほかにタブがくることがあります。
先頭の文字の前にもスペースかタブがくることがあります。
5列目、6列目に "ff", "gg" があったりします。

--
   aa bb cc   dd  ff gg
bb    cc dd aa ff
cc dd aa bb   ff gg
    aa  dd cc   bb
--

その中で、1行目の "dd" と 4行目の "bb" を拾えないでしょうか?
2度手間ですみません。。。
920860:2008/01/07(月) 03:36:52
>>916
確かにスレチな部分も多々ありましたが、それは他の人が勝手な解釈で私の言葉を
受け止めたから、反発的に自分の意見は誤解されているということを言いたくなった
だけですよ。
スレ違いな話をここで展開するつもりは毛頭ございません。
それはそうと、もうちょっとhospitalityのある対応をお願いしたかったところですよ。
皆さんストレスたまっているようですね。リラックス大事ですよ、お願いしますよ。
921デフォルトの名無しさん:2008/01/07(月) 03:43:13
>>920
板違いです。

 主義・主張
 http://society6.2ch.net/shugi/

終了
922860:2008/01/07(月) 03:47:10
>>919
要件がちょっと曖昧にしか理解できないのでお尋ねします。

1列目のddというのは4列目にないのに、貴方は、'aa'を拾うことを要求してますよね。
これは、>>886の「4列目を取得する」という条件から、
「途中の空白な列は数えずに4列目を取得する」、という条件に仕様変更した
という意味でしょうか。

それから、4列目は最初にaaがないですよね。
これは1列目にaaがあったら、という>>886の条件ではなくて、
最初の空でない列がaaだったらという条件に変更したということですか??
923デフォルトの名無しさん:2008/01/07(月) 03:48:25
my $filename = 'filename';
my @results;

open (my $fh, '<', $filename) or die;
while (my $line = <$fh>) {
chomp $line;
my @elm = grep /[a-g]{2}/, split(/[^a-g]/,$line);
if ($elm[0] eq 'aa') {
push @results, $elm[3];
}
}
close $fh;
# print @results;
924860:2008/01/07(月) 03:48:38
2カ所訂正です。

1列目のddというのは

1行目のddというのは

4列目は最初にaaがないですよね。

4行目は最初にaaがないですよね。
925860:2008/01/07(月) 03:56:49
>>923
私もそういう要件だと理解しました。勉強なりました。
・filenameを変数に格納しておくんですね。
・openでfile handleを変数にしているのはどういったわけでしょう。
・my @lines = <$fh>;としてから処理するよりも直接一行ずつ読み込むほうが高速
ということになるんでしょうか。
・grep, splitの組み合わせは、コード見ればすぐ理解できるものの、思いつくかというと
ちょっと時間かかりそうです。
・やはりfile handle閉じたほうがいいんですかね。今のところ閉じたほうがいいような状況に
遭遇したことがないので、閉じないで済ませることが多いのですが。

926860:2008/01/07(月) 04:04:15
perlについての質問に全力で私がお答えします。
927886:2008/01/07(月) 04:27:36
>922-924
レス中のご質問は両方ともYESです。
所望の動作を確認しました。ありがとうございました。
928デフォルトの名無しさん:2008/01/07(月) 05:05:41
俺も普通にレスしてるだけなのに
気付いたらレス番が赤くなってるタイプだわ
人気者は辛いなあ…あはは…
929デフォルトの名無しさん:2008/01/07(月) 05:52:39
>>920
まぁLinux初心者は「VMware Player」をインスコして
「ubuntu Linux」のVMware用パッケージを落として
ubuntuなんたら.vmxをダブルクリックでもしとけ。
930デフォルトの名無しさん:2008/01/07(月) 06:04:23
20:00時から早朝4時までご苦労さまです
931デフォルトの名無しさん:2008/01/07(月) 07:00:36
まさに慇懃無礼
932デフォルトの名無しさん:2008/01/07(月) 08:39:18
なんで860はこのスレにいるの?
そろそろ空気読んで勉強に戻ったほうがいいんじゃね?
933860:2008/01/07(月) 10:11:28
今はリラックスタイムなので、勉強はしません。
934デフォルトの名無しさん:2008/01/07(月) 10:57:39
祭りに乗り遅れたー
935デフォルトの名無しさん:2008/01/07(月) 12:31:40
俺も乗り遅れた・・・
936デフォルトの名無しさん:2008/01/07(月) 12:38:18
859だけ書いて消えた俺は先見の明があったようだ
937デフォルトの名無しさん:2008/01/07(月) 13:02:11
対話的モードでふと思ったが
Perl にPythonの対話モードやRubyのirbみたいなのってあったっけ
938デフォルトの名無しさん:2008/01/07(月) 15:22:41
急にすいません、質問させてください。

for($i = 0; $i < "$#b"; $i++)
{
$aaa = $b[i] - $b[i+1];
if($aaa < 1 && $aaa > 1)
{
print "good";
}
else
{
print "bud";
}
}

というプログラムを書いた時に、$b[0] - $b[1]が最初のif文に入ったらずっとif文を回り続けて、
$b[1] - $b[2]以降を読み取ってくれないのですが、どうすればいいでしょうか?
$aaaは固定されてしまうのでしょうか?
939デフォルトの名無しさん:2008/01/07(月) 15:38:09
>>938

> 最初のif文に入ったらずっとif文を回り続けて、$b[1] - $b[2]以降を読み取ってくれない
ということは、どうやって判断したの?

そのコード自体もいろんなところが適当すぎるだろう。
意味を考えて書いてるのか。
940デフォルトの名無しさん:2008/01/07(月) 15:38:40
>>938
use strict;
use warnings;

を使い、後はエラーメッセージを頼りに修正するといい。

(数値である)$#bをわざわざ("$#b"で)文字列化してから( < 演算子で)数値評価してるのは何故?
941デフォルトの名無しさん:2008/01/07(月) 15:43:14
レスはえーw

>>938
悩んだら変数を片っ端から出力してみればいい

>>940
最後の一行を>>938が理解してるとは思えないんだがw
942デフォルトの名無しさん:2008/01/07(月) 15:49:26
>>939
わかりにくく書いてしまってすいません。
例えば、@bに1 1.5 3 5 5.5 と入れた場合、
最初の差が1以下なのでずっとgoodが出てきてしまいます。
good bud bud goodのように出力したいのですが。

>>940
すいません、>>941さんが言われてる通り最後の一行がよくわかりません。ごめんなさい。
use strict;やuse warnings;はプログラム内に書けばいいのでしょうか?
943デフォルトの名無しさん:2008/01/07(月) 15:56:57
>>942
それなら、最初の差が1以上ならどうなるか試してみた?

ところで、"bud"の意味は「つぼみ」ね。
944デフォルトの名無しさん:2008/01/07(月) 16:01:56
>>943
はい、試して見たところずっとbudが出てきました。
多分$aaaが固定されてるんだと思うんですが。

> "bud"の意味は「つぼみ」ね。
アホなミスをしていました。
すいませんでした。
945デフォルトの名無しさん:2008/01/07(月) 16:19:28
>>941
>最後の一行を>>938が理解してるとは思えないんだがw

ちくしょー(perldocは無理でも和訳印刷製本済みの)らくだ本くらい通読しやがれ。

>>942
use strict 等についてはその通り。
後、938のコードが "good" を出力するには割と特殊な条件が必要。
手元のプログラムが "good" を出力するなら、938とは別物の可能性が高い。
946デフォルトの名無しさん:2008/01/07(月) 16:39:25
>>945
> 手元のプログラムが "good" を出力するなら、938とは別物の可能性が高い。

わからない部分だけはしょったので、よくわからないプログラムになってしまってすいません。

つまり最初に$b[0] - $b[1]で最初のif文に入って、goodがでて、
次に$b[1] - $b[2]でelse文に入って、badが出て、
その後$b[2] - $b[3]はif文に入りgoodが出るのようなプログラムを作りたいのですが、
今のままだと$b[0] - $b[1]が最初のif文に入っちゃうと、ずっとgoodが出続けてしまいます。
書き方が酷くてホントすいませんでした。
947デフォルトの名無しさん:2008/01/07(月) 16:51:45
$aaa < 1 && $aaa > 1 に突っ込む奴がいないのはなぜだ?
948デフォルトの名無しさん:2008/01/07(月) 16:52:52
>>947
空気読めよ。
みんな本人が自分で気づくように遠まわしに指摘してるじゃないか。
949デフォルトの名無しさん:2008/01/07(月) 17:01:03
>>947
すいません。
$aaa < 1 && $aaa > -1

でした、本当にすいません。
950デフォルトの名無しさん:2008/01/07(月) 17:01:36
そのプログラムで

>> ずっとgoodが出続けてしまいます。

の方が不思議だと思うのだが。
951デフォルトの名無しさん:2008/01/07(月) 17:16:28
>>942
「最後の1行」の部分は、要するに、$#bをダブルクォートでくくっている(「"$#b"」と書いている)理由を聞いている。
(そう書かなければならない理由がわからないから)

use strict / use warnings の書き方は、
/usr/lib/perl5/5.8/File/Compare.pm (環境によってインストール先が違う。無かったら探せ)
あたりでも見とけ。

あと、もっとお手軽な方法としては、
perl -wc スクリプトファイル
という手がある。
オプションの意味は「perl --help」とか「perldoc perlrun」とかで出るメッセージを見ろ。
(ついでに、「perldoc perl」で標準添付のドキュメントにどんなのがあるかの一覧が出る)
952デフォルトの名無しさん:2008/01/07(月) 17:37:34
みなさん、本当にありがとうございます。
>>951さん、試して見ます。

for($i = 0; $i < 5; $i++)
{
$aaa = $b[i] - $b[i+1];
if($aaa < 1 && $aaa > -1)
{
print "good";
}
else
{
print "bad";
}
print "$aaa";}

してみたところ、常に同じ$aaaが出力されていました。
一周してfor文の最初に戻った時に、$aaaは書き換えられないのでしょうか?
953デフォルトの名無しさん:2008/01/07(月) 18:05:02
C言語馬鹿は一度Perlのスカラー変数の表記方法を思い出してご覧なさい。
一行一行脳内コンパイルすればエラーに気づくだろ。
954デフォルトの名無しさん:2008/01/07(月) 18:09:14
> $aaa = $b[i] - $b[i+1];

単純に$のつけ忘れだろ。

まだmyも使えないようなレベルでいきなりuse strict使えというのは敷居が高いような
気もするが、せめてuse warningsだけでも使ってみれば、

Unquoted string "i" may clash with future reserved word at 〜

とか

Argument "i" isn't numeric in array element at 〜

といった警告が出てきて見当ついたんだけどね。

955953:2008/01/07(月) 18:10:29
ごめん。普通にマジレスしちゃった。
>>952
試してみますじゃねえよ。馬鹿野郎、ちゃんと試せよ。
use strict;にusewarnings;しやがれ。
956デフォルトの名無しさん:2008/01/07(月) 18:26:48
>>954
出来ました!
本当にありがとうございます!



レスくださった方々、本当にありがとうございます。
ここにいる皆様は本当にいい人ばかりで、涙がでそうです。
自分も人に教えられるくらいになるよう、勉強していきたいと思います。
最後に、本当にありがとうございました。
957デフォルトの名無しさん:2008/01/07(月) 18:37:42
デバッグをした形跡がない
958デフォルトの名無しさん:2008/01/07(月) 22:32:47
文字列の入った配列のソートについて質問です。

  @arr = qw ( 10.4.31 10.40 5.2.3 5.3 );

文字列と言っても、整数がピリオドで区切られていて、
"10.4.31" は、「第10章の第4節の31行目」とか、そんな感じの意味です。
これを昇順でソートするサブルーチン(−1か0か1を返すやつ)を書いたのですが、
なんか、美しくありませんし、正しいかどうかも自信ないです。
結果は、こういう順で出てきてほしいです。

  5.2.3 5.3 10.4.31 10.40

とりあえずこのデータでは正しく動いているように見える、私が書いたやつ。
---------------------------------------------
@arr = qw ( 10.4.31 10.40 5.2.3 5.3 );

print join ' ', sort comparator @arr;

sub comparator {
  @a = split /\./, $a;
  @b = split /\./, $b;
  do {
    $aa = shift @a;
    $bb = shift @b;
    return ($aa <=> $bb) if ( ($aa <=> $bb) != 0);
  } while (defined($aa) and defined($bb));
}
---------------------------------------------
もっとスマートにならないでしょうか。
959デフォルトの名無しさん:2008/01/07(月) 22:56:37
スマートじゃないけど、

sub comparator { $a<=>$b || pack('N*',split /\./,$a) cmp pack('N*',split /\./,$b) }

なんてどう?
960デフォルトの名無しさん:2008/01/07(月) 22:59:30
>>958
sub comparator {
pack('C*', split /\./, $a) cmp pack('C*', split /\./, $b);
}
961デフォルトの名無しさん:2008/01/07(月) 23:16:23
use Sort::Versions;

@arr = qw ( 10.4.31 10.40 5.2.3 5.3 );

print sort versioncmp @arr;
962デフォルトの名無しさん:2008/01/07(月) 23:27:57
>937
Shell::Perlのpirl
963質問:2008/01/08(火) 01:10:21
指定した時間(5分or10分間隔)で走らせるプログラムを作りたいのですが、
cronを使わずにperlコマンドorモジュールorシェルコマンドで指定した時間で走らせる方法があったら教えてください。

プログラムの流れとしては、
CGIでプログラムの起動と停止をおこなう
起動ボタンが押されると、停止を押すまではたとえば5分間隔でプログラムを走らせる
停止ボタンを押すとプログラムを停止させる

です。必要なときに起動・停止したいのと諸事情によりcronは使えません。
964デフォルトの名無しさん:2008/01/08(火) 01:16:59
>>963
1) sleepで寝て、停止時にはシグナルぶちこんで叩き起こす。
2) alarmでタイマー仕掛けて、停止待ち状態で待って、アラームが鳴ったら仕事をする。
965963:2008/01/08(火) 01:25:41
>>964
ありがとうございます。
if文(停止ボタンが押されていない場合)とその中でsleepを使って試してみたいと思います。
966デフォルトの名無しさん:2008/01/08(火) 01:30:51
ファイル処理についての質問です。
このようなファイルが任意の大きさであったとき、
人物ごとにハッシュか構造体でまとめたいです。
------------------------
名前:鈴木
性別:男
好きなアルファベット:A, B
名前:佐藤
性別:男
好きなアルファベット:C
名前:田中
性別:男
好きなアルファベット:D, E, F, G
……
------------------------
ファイルが終わるまでの任意の大きさでまとめる点と
好きなアルファベットは一つとは限らない点で困ってます。
どなたかご教授くださいませ。
967デフォルトの名無しさん:2008/01/08(火) 01:38:04
[1] 授業単元:最終課題
[2] 問題文:

10×10(変えることができる)の迷路の脱出過程(どこをどのように通ったか)を表示するプログラムを作成せよ
なお、Sはスタート地点・Gはゴール地点・Wは壁・Rは経路を示す
また脱出者は迷路に関する情報は事前に持っていないこととし、
脱出過程の表示は、定期的に現在地を表示するものと、最終的な経路を表示するものを用意すること。
SWWWWRWWWW
RWRRWRWWWW
RWWRWRWWWW
RRRRRRRRRR
WWRWWRWWWW
WWRWWRWWWW
WWRWWRWWWW
RRRRRRRRRR
WWWWWWWWWR
WWWWWWWWWG

[3] 環境
 [3.1] OS:Windows Vista
 [3.2] コンパイラ名とバージョン:
 [3.3] 言語:C++
[4] 期限:2008年1月9日
[5] その他の制限:関数を使って、なるべく簡単な方法でお願いしますm(_ _)m
968デフォルトの名無しさん:2008/01/08(火) 01:39:15
967まちがえました・・・
969デフォルトの名無しさん:2008/01/08(火) 01:39:38
ここはPerlスレですが・・・・
970デフォルトの名無しさん:2008/01/08(火) 01:59:32
>>966

use strict;
use warnings;

# use Data::Dumper;

my %person;
my $name;
while (<>) {
  chomp;
  my ($key, $value) = split ':';
  if ($key eq '名前') {
    $name = $value;
  }
  elsif ($key eq '好きなアルファベット') {
    $value = [ split m(,\s), $value ];
  }
  $person{$name}{$key} = $value;
}

# print Dumper(\%person);
exit;
971デフォルトの名無しさん:2008/01/08(火) 02:01:53
>>970は名前がユニークであること、デリミタが「:」であること、
「, 」がアルファベット以外に存在しないこと等々、色々制約あり
972デフォルトの名無しさん:2008/01/08(火) 03:53:33
スパム対策として、日本語が3文字以上連続でなければエラーと考えています。
(英語の文字化け等があるので、1文字だとダメなんです)

調べると日本語の判定は
if ($comment !~ /(\x82[\x9F-\xF2])|(\x83[\x40-\x96])/)
とあるのですが、
もし($コメント 含まれていなければ / 3回繰り返す・日本語  /)
にしたいのですが、

この「3回繰り返す」というのと、

(\x82[\x9F-\xF2])|(\x83[\x40-\x96])
をどう1まとめにするかが、わかりません。

ご教示ください。
973966:2008/01/08(火) 04:02:22
>>970
ありがとうございます。>966ではできました。
もう少しお付き合い頂きたいのですが
好きなアルファベットがこんなふうに並んでた場合はどうなんでしょうか?
------------------------
名前:鈴木
性別:男
好きなアルファベット:A
好きなアルファベット:B
名前:佐藤
性別:男
好きなアルファベット:C
名前:田中
性別:男
好きなアルファベット:D
好きなアルファベット:E
好きなアルファベット:F
好きなアルファベット:G
……
------------------------
974デフォルトの名無しさん:2008/01/08(火) 11:12:21
>>973
> ありがとうございます。>966ではできました。

「できました」(笑)
975デフォルトの名無しさん:2008/01/08(火) 11:52:23
つっこむところじゃないからw
976デフォルトの名無しさん:2008/01/08(火) 12:48:54
>962
つまりあれか。俺がCPAN慣れてないから見つからなかったのな…。
977デフォルトの名無しさん:2008/01/08(火) 15:29:54
978デフォルトの名無しさん:2008/01/08(火) 18:04:05
Data::Dumper って巨大な配列とか扱わせると、Dump()がやたらに遅くなるね。。。
配列の中身は、オブジェクトだったり、相互の参照があったり。
線形検索をかけてるルーチンがあるかのような遅さだ(perlでそんなバカなことはしないだろうが)。

単にパーシステントにしたいだけなら、やっぱりStorable?

あと、YAMLでオブジェクトの再構築はData::Dumperと全く同じでできるの?
979デフォルトの名無しさん:2008/01/08(火) 18:26:50
>>978
> 単にパーシステントにしたいだけなら、やっぱりStorable?

そう
980デフォルトの名無しさん:2008/01/08(火) 21:37:05
大学の課題なんですけど

プログラムPGを作れ
プログラムの機能の条件

1、INDATAというファイルの中身を読みこんで処理するものであること

2、少なくとも一個のif文を使っている

3、for,while,foreachなどの繰り返しを少なくとも一個は使っている

4、少なくとも一個の配列を使っている

5、少なくとも一個の引数を使っている

6、以下の様に実行することでOUTDATAに結果が出力される

% KADAI3 <INDATA> OUTDATA

注:3は引数
981デフォルトの名無しさん:2008/01/08(火) 21:44:25
>>980
課題が出た報告ですか そうですか
982デフォルトの名無しさん:2008/01/08(火) 21:51:52
いや作成していただきたいんです
983デフォルトの名無しさん:2008/01/08(火) 22:14:52
スレ違い。
984デフォルトの名無しさん:2008/01/08(火) 22:18:08
会社の仕事なんですけど

プログラムPGを作れ
プログラムの機能の条件

1、INDATAというファイルの中身を読みこんで処理するものであること

2、(ry
985デフォルトの名無しさん:2008/01/08(火) 22:18:12
Perlの宿題スレってあったっけ
986デフォルトの名無しさん:2008/01/08(火) 22:31:29
>>982
> いや作成していただきたいんです

そういう時は、金額も併記すると交渉が早くまとまるよ。
987 ◆TWARamEjuA :2008/01/08(火) 22:32:05 BE:2287837-2BP(6825)
つ コンサr
988970:2008/01/08(火) 23:15:04
>>973

use strict;
use warnings;

# use Data::Dumper;

my %person;
my $name;
while (<>) {
  chomp;
  my ($key, $value) = split ':';
  if ($key eq '名前') {
    $name = $value;
  }
  elsif ($key eq '好きなアルファベット') {
    $value = [ split m(,\s), $value ];
    if (exists $person{$name}{$key}) {
      push @{$person{$name}{$key}}, @$value;
      next;
    }
  }
  $person{$name}{$key} = $value;
}

# print Dumper(\%person);
exit;
989デフォルトの名無しさん:2008/01/08(火) 23:20:08
例によって>>988は「好きなアルファベット」固定なので、
「嫌いなアルファベット」だとかはelsifの条件を||で繋いで書くとかね

やれデータ構造だと肩に力を入れなくても
push, pop, shift, unshift, keys, values, each, exists, defined
辺りを知っていれば、後は上記のようにif, elseの世界だよ ガムバレ
990デフォルトの名無しさん:2008/01/08(火) 23:50:04
>976
去年の3月ごろにちょっと話題になってたから、アンテナ感度が低いのかも
ttp://blog.nomadscafe.jp/archives/000714.html
991デフォルトの名無しさん:2008/01/09(水) 00:14:40
>>980
Perlでリクに答えるスクリプトを作るスレ
http://pc11.2ch.net/test/read.cgi/tech/1086143976/
っつうと味気ない? 向こうでも同じ流れになりそうだから以下駄文

1.は6.に含まれるでそ
3.はwhileを>>970で使っている
5.の引数がスクリプトの引数を意味しているなら6.に含まれる
6.はほんとにそんな課題?

% KADAI3 INDATA OUTDATA
ならば、引数0をファイルハンドルINとしてopenし、
引数1をファイルハンドルOUTとでもして、openし、
INをwhileに読ませてOUTにprintして、
while抜けたらINもOUTもcloseすれば(しなくても怒られはしないけど)終わり
引数自体が@ARGVっていう配列なので4.も充足(ずるいと言えばずるいが)

むしろ%KADAI3 <INDATA >OUTDATAじゃないの?
そうなら標準入力を>>970みたいに食って標準出力にprintすればいいのでもっと楽
4.が満たせない(<>はリストだが配列じゃない)ので@hoge = <>と無駄処理する
無駄処理はかなりずるい要件充足の仕方なので、配列でおもろい処理をしてもいい

2.は各行で「あ」が含まれる行だけを抽出するgrepを作ってみるとかね
真のときのみOUTにprintするとかさ
(本当はperlでもgrepっていう組み込み関数を使った方がいいんだけど)

プログラムPGっつうのは6.の通りKADAIってファイル名ってことなら
1行目に#!/usr/bin/local/perlとかなんとか処理系のパスを書けばいい

まずは書いてみなよ
スレ梅代わりに、分かったところまで書いたらここに貼りゃいいから
992973:2008/01/09(水) 01:02:11
>988-989
970様のおかげで書き方がわかりました。
重ね重ねありがとうございました。
993デフォルトの名無しさん
>991がほとんど答えだったり