Perlについての質問箱 33箱目
レス数が950を超えています。1000を超えると書き込みができなくなります。
0001デフォルトの名無しさん
2007/10/16(火) 00:59:57"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 あたり
0002デフォルトの名無しさん
2007/10/16(火) 01:01:34Perlプログラミング講座: 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/
0003デフォルトの名無しさん
2007/10/16(火) 01:01:400004デフォルトの名無しさん
2007/10/16(火) 01:02:09CPAN.com: http://search.cpan.org/
河馬屋二千年堂: http://homepage3.nifty.com/hippo2000/
[テクニック]
Perlメモ: http://www.din.or.jp/~ohzaki/perl.htm
Perlのページ: http://homepage1.nifty.com/nomenclator/perl/
Perlの小技: http://homepage3.nifty.com/hippo2000/perltips/index.htm
[Perl5.8Unicodeメモ]
http://www.pure.ne.jp/~learner/program/Perl_unicode.html
http://www.namazu.org/~tsuchiya/perl/perl-5.8.html
http://www.lr.pi.titech.ac.jp/~abekawa/perl/perl_unicode.html
0005デフォルトの名無しさん
2007/10/16(火) 01:03:101 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/
0006デフォルトの名無しさん
2007/10/16(火) 01:04:1132 ttp://pc11.2ch.net/test/read.cgi/tech/1181500187/
0007デフォルトの名無しさん
2007/10/16(火) 01:06:03過去スレ 32 間違えた
32 ttp://pc11.2ch.net/test/read.cgi/tech/1186995713/
0008デフォルトの名無しさん
2007/10/16(火) 05:19:040009デフォルトの名無しさん
2007/10/16(火) 12:15:22上司が2ch見てたらオワタな
0010デフォルトの名無しさん
2007/10/16(火) 20:05:060011デフォルトの名無しさん
2007/10/16(火) 22:54:360012デフォルトの名無しさん
2007/10/16(火) 23:25:100013デフォルトの名無しさん
2007/10/16(火) 23:25:560014デフォルトの名無しさん
2007/10/16(火) 23:29:27「前ってどっちですか?」なんて聞かれた日にゃ、
俺が上司ならブチ切れ。 使い物になんねから左遷だな。
0015デフォルトの名無しさん
2007/10/16(火) 23:34:200016デフォルトの名無しさん
2007/10/16(火) 23:40:12sub 前 {
print "hoge";
}
っていうサブルーチンの事だったと言うんじゃ・・・
0017デフォルトの名無しさん
2007/10/16(火) 23:48:47これにならって、電車について考えてみる。
止まっている電車はどっちが前だかわからない。
だが走ってる電車ならわかる。進行方向が前だ。
これはペチャパイ女にも言える。
プログラムの「前」とは、プログラムの進行方向なのでは無いか?
・・・で、プログラムってどっちに向かって走ってるの?
(とりあえず、ループとか条件分岐とかは考えにいれないでいい)
0018デフォルトの名無しさん
2007/10/16(火) 23:58:590019デフォルトの名無しさん
2007/10/17(水) 00:33:450020デフォルトの名無しさん
2007/10/17(水) 00:36:26顔が両側についている人はどうするんだよ
0021デフォルトの名無しさん
2007/10/17(水) 00:45:07ハリーポッターのヴォルデモートかいな(笑)
0022デフォルトの名無しさん
2007/10/17(水) 00:46:310023デフォルトの名無しさん
2007/10/17(水) 00:57:39そりゃ今お前が会話しているほうの顔が前だろ
0024デフォルトの名無しさん
2007/10/17(水) 02:54:21急に新スレまで行っててビックリだ
0025デフォルトの名無しさん
2007/10/17(水) 10:51:135.10っていつ出る予定なん?
5.10に期待することは?
とか聞いてみる。
// とか err って5.10から使えるようになるんだっけ?
0026デフォルトの名無しさん
2007/10/17(水) 15:50:55このスレにはマジメに質問するヤツはいないのか?
0027デフォルトの名無しさん
2007/10/17(水) 16:14:49perlとPHPのどちらを用いるのが良いと思いますか?
調べてもPHPが楽で軽くて良い、逆にperlは重いからダメだということばかり書いていまして…
0028デフォルトの名無しさん
2007/10/17(水) 16:16:08>>1
> CGIについての質問は板違いです。WEBプログラミング板でどうぞ。
> CGIとPerlの区別がつかない人もWEBプログラミング板に行ってください。
> (WEBプログラミング板 http://pc11.2ch.net/php/ )
0029デフォルトの名無しさん
2007/10/17(水) 16:37:38次スレ=前スレってことですか?
0030デフォルトの名無しさん
2007/10/17(水) 18:22:490031デフォルトの名無しさん
2007/10/17(水) 20:06:48そろそろ言語のひとつでも潰して力見せる時か
しかし、なんでもム板にもちこむなよな
ま、実際何とかしちゃう俺らも俺らだけどw
0032デフォルトの名無しさん
2007/10/17(水) 20:40:28どんな抗うつ剤を飲むとそういう狂言を吐けるようになるの?
0033デフォルトの名無しさん
2007/10/17(水) 21:30:430034デフォルトの名無しさん
2007/10/17(水) 21:38:550035デフォルトの名無しさん
2007/10/17(水) 23:29:310036デフォルトの名無しさん
2007/10/18(木) 02:36:16Tclの.expファイルをExpectモジュール使ったPerlのファイルに書き換えてるんだけど
TclのputsにあたるものはExpectモジュールでは用意されてないの?
0037デフォルトの名無しさん
2007/10/18(木) 13:50:250038デフォルトの名無しさん
2007/10/19(金) 11:38:04最近、いちいち質問者につっかかる厨房が徘徊しているようだ。
0039デフォルトの名無しさん
2007/10/19(金) 11:56:05同じ数列が発生しちゃうんだけど、やっぱり srand() 必要?
0040デフォルトの名無しさん
2007/10/19(金) 14:24:380042デフォルトの名無しさん
2007/10/19(金) 20:33:03http://www.marguerite.jp/Nihongo/Labo/Temp/ModPerl.html#random
http://www.donzoko.net/doc/memo/perlithreads.html
0043デフォルトの名無しさん
2007/10/19(金) 21:59:180044デフォルトの名無しさん
2007/10/19(金) 23:52:56→円周率の小数点以下n桁目の数値を乱数として取得
→以下nを一つずつ増やす
とか?
0045デフォルトの名無しさん
2007/10/20(土) 00:53:02もう一ひねりいりそうだな。
0046デフォルトの名無しさん
2007/10/20(土) 02:14:070047デフォルトの名無しさん
2007/10/20(土) 03:22:450048デフォルトの名無しさん
2007/10/20(土) 03:23:220049デフォルトの名無しさん
2007/10/20(土) 09:37:460050デフォルトの名無しさん
2007/10/20(土) 12:51:32http://www.lacim.uqam.ca/~plouffe/Simon/articlepi.html
0051デフォルトの名無しさん
2007/10/20(土) 13:55:32プラットフォームのデフォルトのエンコードだと仮定して、
どのプラットフォームでも同じように動作するようにスクリプト書きたい。
コード中にcp932とかハードコードしたくないので
.NETやpythonみたいにstdioのエンコードを取得したりできればいいと思うけど、
どうしたらいい?
0052デフォルトの名無しさん
2007/10/20(土) 15:59:53> @ARGV、標準入出力、テキストファイルの中身は全て
> プラットフォームのデフォルトのエンコードだと仮定して、
プラットフォームのデフォルトのエンコードが存在しない場合は?
0053デフォルトの名無しさん
2007/10/20(土) 16:41:50そういう環境は視野に入ってないっす。
ascii扱いでいいんじゃないの。
変なバイト列だったらエラーになればいいと思う。
どちらかというと、クロスプラットフォームよりも、
とにかく日本語版Windows上のアプリとしてちゃんと動き、
なおかつ、cp932をハードコードせずに済ませることの方を重視したいかな。
それとも、
OSのAPIレベルでデフォルトのエンコードなるものを取得する手段が無い場合ってこと?
Unixとかよく分からないので、そのへん分からない。
ターミナルのエンコードとか標準化された手段で取れないんだろうか?
0054デフォルトの名無しさん
2007/10/20(土) 17:16:45Guess
0055デフォルトの名無しさん
2007/10/20(土) 19:11:300056デフォルトの名無しさん
2007/10/20(土) 20:41:55どうもありがとう。
何をやるにも標準モジュールだけで足りない言語だなあ。
Perlでそれを言っちゃ駄目ですか?
自分達のリリースしたアプリや、日々の作業で使うスクリプトが
依存してるモジュールの管理ってどうしてるの?
cpanで自分のマシンにインストールするだけなら簡単だけど、
必要なファイルをよりわけて、
アプリのソースと一緒にリポジトリに保存しとかないとやばいよね?
それって簡単にできるんだろうか。
Perlのディストリビューション以外に、
どれだけのファイルを保存する必要があるのか、
ワケわかんなくなると思うんだけど。
0057デフォルトの名無しさん
2007/10/20(土) 21:03:05どんな言語でも不足分を補うのがライブラリなのに
それを否定されては最初から全部入りの言語を
使ってくださいとしか言い様が無い
単に自分がマイノリティな事に気付いてない
我侭言ってる子供にしか見えないけど
0058デフォルトの名無しさん
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:" ) | ~`'''ー----''"~
ヽ `'" ノ
005956
2007/10/20(土) 21:19:33Class::Accessorとか入って無いじゃん。
・・・いや、そういうことが言いたいんじゃなくて、
どうやって管理するの?ってのがレスの要点なんだけど。
0060デフォルトの名無しさん
2007/10/20(土) 21:31:01全部のマシンに入れる
0061デフォルトの名無しさん
2007/10/20(土) 21:33:520062デフォルトの名無しさん
2007/10/20(土) 21:34:30モジュールがCPANにある。
006356
2007/10/20(土) 23:24:35そのインスコされる全ファイルの把握と抽出の仕方がわからない。
ネットからじゃなくて、ローカルに保存したバージョンをインストールする方法も分からない。
>>62
なんてモジュールか教えて。ググっても分かんない。
そういうの、分厚いPerl本読んでも全然書いてないし。
0064デフォルトの名無しさん
2007/10/21(日) 00:11:38| ̄``''- 、
| `゙''ー- 、 ________
| ,. -‐ ''´ ̄ ̄`ヽ、_ /
|, - '´ ̄ `ヽ、 /
/ `ヽ、ヽ /
_/ ヽヽ/
/ / / / / / ヽハ
く / /! | 〃 _/__ l| | | | | | | ||ヽ
\l// / | /|'´ ∧ || | |ー、|| | | l | ヽ
/ハ/ | | ヽ/ ヽ | ヽ | || /|ヽ/! |/ | ヽ
/ | ||ヽ { ,r===、 \| _!V |// // .! |
| || |l |ヽ!'´ ̄`゙ , ==ミ、 /イ川 |─┘
| ハ|| || | """ ┌---┐ ` / // |
V !ヽ ト! ヽ、 | ! / //| /
ヽ! \ハ` 、 ヽ、__ノ ,.イ/ // | /
┌/)/)/)/)/)/)/)/)/)/)lー/ ` ー‐┬ '´ レ//l/ |/
|(/(/(/(/(/(/(/(/(/(/│|| |\ 〃
r'´ ̄ヽ. | | ト / \
/  ̄`ア | | | ⌒/ 入
〉  ̄二) 知ってるが | | | / // ヽ
〈! ,. -' | | ヽ∠-----', '´ ',
| \| | .お前の態度が | |<二Z二 ̄ / ',
| | | _r'---| [ ``ヽ、 ',
| | | 気に入らない >-、__ [ ヽ !
\.| l. ヽ、 [ ヽ |
ヽ| \ r' ヽ、 |
0065デフォルトの名無しさん
2007/10/21(日) 10:16:47取り出したいのですが、どうすればいいのでしょうか?
ActivePerl(漢字にちゃんと対応してない環境)です。
よろしくお願い致します。
0066デフォルトの名無しさん
2007/10/21(日) 13:11:06http://mikeneko.creator.club.ne.jp/~lab/perl/numerical_transform/#h4
http://perldoc.jp/docs/perl/5.8.4/perlfunc.pod#item_unpack_TEMPLATE_EXPR
@chr = unpack 'C*', 'SJISまじりの文字列';
0067デフォルトの名無しさん
2007/10/21(日) 13:38:26ありがとうございます
0068デフォルトの名無しさん
2007/10/21(日) 14:40:18cygwin で動いたけど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";
}
0069デフォルトの名無しさん
2007/10/21(日) 21:15:23実装はそうなっているけど、仕様なのかな?
親から子へシグナルを送る場合には(killが)使えるけど、かなり不便。
子プロセス(forkエミュレーションで生成した別スレッド)には PostThreadMessage を使って
殆どのシグナルを送れるけど、それ以外の相手には INT,BREAK 程度しか送れない。
おまけに、それ以外は全てKILL扱い( TerminateProcess を使う)になっている。
(そして、5.6との互換性の為だと注釈が付いている)
Cが読めるなら、詳細は(Perlソースに含まれる)win32.c中の win32_kill 読んだ方が早いかと。
0070デフォルトの名無しさん
2007/10/21(日) 21:39:16その要素として$x[0]にa1,$x[1]にa2,・・・$x[255]にa256を代入する文がわかりません。
どなたか教えてください。
0071デフォルトの名無しさん
2007/10/21(日) 21:41:480072デフォルトの名無しさん
2007/10/21(日) 21:45:31>>71さん
foreach をつかって>>70のことを全部やる方法はわかりますか?
0073デフォルトの名無しさん
2007/10/21(日) 21:48:020074デフォルトの名無しさん
2007/10/21(日) 21:49:050075デフォルトの名無しさん
2007/10/21(日) 21:52:09>foreach 文を実行する前に,@x = (); を実行して長さ0の配列 @x を作ってください.
>そしてforeach 文を実行することで,$x[0] から $x[255] までの要素(それぞれ "a1" から "a256" までの値をもつ)を配列 @x に追加していってください.
とか、書いてあるんですけどどうすればよいのでしょうか?
0076デフォルトの名無しさん
2007/10/21(日) 21:53:220077デフォルトの名無しさん
2007/10/21(日) 21:56:350078デフォルトの名無しさん
2007/10/21(日) 21:56:55友達に聞けよ。
ここで聞くのは、小学生がお習字の宿題を親にやらせるようなもん。
教員が暇なら呼び出しを食らうぞ。
0079デフォルトの名無しさん
2007/10/21(日) 22:14:14ばあちゃんの知識は古すぎるよ。
いまはvoidコンテキストのmapはリストを作らないようになってるから大丈夫だよ。
0080デフォルトの名無しさん
2007/10/21(日) 22:56:56オレの実のばあちゃん以外にもう一人、そんなばあちゃんが欲しい
0081デフォルトの名無しさん
2007/10/21(日) 23:05:340082デフォルトの名無しさん
2007/10/21(日) 23:06:33for( px = x, pa = a+1; px != x+256; *px++ = *pa++ );
0083デフォルトの名無しさん
2007/10/21(日) 23:27:10syntax error at -e line 1, near ");"
0084デフォルトの名無しさん
2007/10/21(日) 23:31:11それは foreach を使う方がしっくりくる場面でさえ map で粋がっちゃう
微笑ましい子らの尻拭いを perl がやってくれるようになっただけだと
認識してるんだが、どうか。
0085デフォルトの名無しさん
2007/10/21(日) 23:32:270086デフォルトの名無しさん
2007/10/21(日) 23:51:180087デフォルトの名無しさん
2007/10/21(日) 23:53:390088デフォルトの名無しさん
2007/10/22(月) 03:35:11push(@x, $temp[$_]) foreach 0..255;
0089デフォルトの名無しさん
2007/10/22(月) 12:30:010090デフォルトの名無しさん
2007/10/22(月) 16:53:340091デフォルトの名無しさん
2007/10/22(月) 17:20:32涙拭けよ!
0092デフォルトの名無しさん
2007/10/22(月) 17:20:330093デフォルトの名無しさん
2007/10/22(月) 17:25:170094デフォルトの名無しさん
2007/10/22(月) 17:42:00この件におけるmapとforeachの対称性は、「それを使って粋がるか否か」「その使用法に変な自尊心を持つか否か」
なのだから、mapを多用する子が反撃したかったら、自分の言われたことを返すのではなく、
逆のことを言わなくちゃいけないんだよ。「粋がる気が無いforeach厨」とかね。
現状では、黒人が肌の色を差別されて、白人に向かって「お前の肌真っ黒w」って返してるようなものだよ。
そこは属性が逆なのだから、逆のことを言わなくちゃ反撃にならないでしょ?w
0095デフォルトの名無しさん
2007/10/22(月) 17:52:420096デフォルトの名無しさん
2007/10/22(月) 17:54:11そして例え話を慢心で語る奴も大抵的を外してる
0097デフォルトの名無しさん
2007/10/22(月) 17:56:37オウム返ししたかったら、なぜそうなのか、根拠を添えないとまるで説得力が無いよ。
どこがどういう風に的を外しているのか、ではどう書くべきだったのか。
そういうことを何も思いつかないまま、感情的にオウム返ししただけに見えちゃうよ。
あと、2行目のような怪しげな「統計」でやり返すことほど、自分を貶めるものもない。
「そういう傾向がこの世にあって欲しい」だけでは?
0098デフォルトの名無しさん
2007/10/22(月) 17:59:09map で粋がる奴はいても foreach で粋がる奴はいない
そんなこともわからずオウム返しに終始する、やっぱりmap厨は馬鹿丸出し
ってw
0099デフォルトの名無しさん
2007/10/22(月) 18:01:47何故言い返すのに逆の事を言わなくてはならないの?
逆のことを言えば優位になるとでも思ってるのか?
そして例え話が逸れ過ぎてて話にならない。
ただの厨房同士の喧嘩にマジレスしようとして
訳の分からない妄言を吐いてる人間にしか見えん。
0100デフォルトの名無しさん
2007/10/22(月) 18:03:43そんなモノを使って粋がる奴は恥ずかしいさ。
0101デフォルトの名無しさん
2007/10/22(月) 18:04:20反撃に乗り出すってのが、なんか薄ら寒いよね。普段どんなコード書いてるのか。
0102デフォルトの名無しさん
2007/10/22(月) 18:07:03ある性質xを持っていることを皮肉られた、ということは、
言っている相手は、その性質xを持っていないんだよ。
その性質xというのが、ここでは「粋がって(イケてる書き方だと思って)多用する」という行為。
でも、foreachっていうのは、そういう心理で選ぶものじゃないんだよね。
だから、「粋がる」という表現をオウム返ししても、まったく成立しないんだよ。
0103デフォルトの名無しさん
2007/10/22(月) 18:08:44『お前の肌真っ白(笑)』と黒人が言ってるとしっくり来る。
どちらにせよ肌の色程度で言い争いしてるのはレベルが
知れてるって事だから、foreach厨とmap厨はレベルが低いって事になる。
0104デフォルトの名無しさん
2007/10/22(月) 18:10:36急にレベルの話に移行する意味がわからない。
言っていることが、状況に即しているかどうかという話しかしていないのに。
map厨の読解力の無いオウム返しをうやむやにするための、両成敗ネタにしか見えない。
0105デフォルトの名無しさん
2007/10/22(月) 18:11:35なんでレベル?
0106デフォルトの名無しさん
2007/10/22(月) 18:12:43その粋がるってのが仮定だから話が違うよ。
0107デフォルトの名無しさん
2007/10/22(月) 18:12:46本人でもないのに尻拭いする意味がわからないけど。
0108デフォルトの名無しさん
2007/10/22(月) 18:15:130109デフォルトの名無しさん
2007/10/22(月) 18:15:22すまん、日本語としてまるで意味がわからない。
もしかして、
「mapを使うのはクールなやり方とされていて、慣れない奴は意味もなく多用してしまう罠」
というPerl界隈の「定着した認識」に対して、今さら
「そうだという証拠はあるのかデータはいつ取ったんだ統計を提示しろさあ早く」
って詰め寄る所存?
0110デフォルトの名無しさん
2007/10/22(月) 18:16:39俺もお前の日本語の意味が分からない。
0111デフォルトの名無しさん
2007/10/22(月) 18:18:300112デフォルトの名無しさん
2007/10/22(月) 18:20:14だってこれって『馬鹿って言った奴がバーカ』
と同レベルの喧嘩だろ。真面目に考察するだけ無駄。
このレベルでなら君の言う"反撃"も別に変ではないと思うが。
0113デフォルトの名無しさん
2007/10/22(月) 18:20:150114デフォルトの名無しさん
2007/10/22(月) 18:22:03ああ、>>89がそういうレベルで噛み付いてただけで、
それ以上のことを何も考えていなかったのなら、このまま説明や修正無しでもすべての筋は通るね。
じゃあ、そういうことで納得するか。
0115デフォルトの名無しさん
2007/10/22(月) 18:27:480116デフォルトの名無しさん
2007/10/22(月) 18:29:01>>84 も含めて余計な煽りレスだろ。
根拠のない決め付けを始めたのはこいつで、
後に続くレスなんて容易に想像出来たはずだ。
0117デフォルトの名無しさん
2007/10/22(月) 18:29:560118デフォルトの名無しさん
2007/10/22(月) 18:33:440119デフォルトの名無しさん
2007/10/22(月) 18:35:56命題について、foreach厨はどんな書き方すんの?
明らかに @x = map { "a$_" } 1..256; の方が単純明快だろ。
0121デフォルトの名無しさん
2007/10/22(月) 19:11:25それマジでWebProgに対する宣戦布告?
本気ならすぐ謝れ。謝罪しないのなら
WebProg総力を挙げてお前を潰すが。
0122デフォルトの名無しさん
2007/10/22(月) 19:14:380123デフォルトの名無しさん
2007/10/22(月) 20:24:42お前らPerlの合言葉を忘れたのか。
0124デフォルトの名無しさん
2007/10/22(月) 20:26:230125デフォルトの名無しさん
2007/10/22(月) 20:39:390126デフォルトの名無しさん
2007/10/22(月) 20:41:37>>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)。
0127デフォルトの名無しさん
2007/10/22(月) 22:14:54$i = $_+1;
print "a$iと入力して下さいm(_ _)m\n";
$x[$_]=<IN>;
}
0128デフォルトの名無しさん
2007/10/23(火) 08:37:110129デフォルトの名無しさん
2007/10/23(火) 09:58:28たぶん、>>84もmapに一度は嵌っている。
perlerの思春期みたいなもんだ。
0130デフォルトの名無しさん
2007/10/23(火) 12:12:39ということにしておいてやるから、トイレでウンコ拭いてこい。
0131デフォルトの名無しさん
2007/10/23(火) 14:24:080132デフォルトの名無しさん
2007/10/23(火) 14:28:410133デフォルトの名無しさん
2007/10/23(火) 14:51:480134デフォルトの名無しさん
2007/10/23(火) 14:52:430135デフォルトの名無しさん
2007/10/23(火) 15:17:340136デフォルトの名無しさん
2007/10/23(火) 15:36:11中二病みたいな感じでいいじゃん
0137デフォルトの名無しさん
2007/10/23(火) 16:27:14煽ってるのはmap厨だな
vipでやれ
0138デフォルトの名無しさん
2007/10/23(火) 16:48:260139デフォルトの名無しさん
2007/10/23(火) 17:40:360140デフォルトの名無しさん
2007/10/23(火) 18:03:020141デフォルトの名無しさん
2007/10/23(火) 19:27:230142デフォルトの名無しさん
2007/10/23(火) 22:27:350143デフォルトの名無しさん
2007/10/23(火) 22:41:570144デフォルトの名無しさん
2007/10/23(火) 23:44:100145デフォルトの名無しさん
2007/10/23(火) 23:52:270146デフォルトの名無しさん
2007/10/24(水) 00:07:20foreach 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にかかる負荷が減ったりしますか?
それとも余分にメモリ食うだけでしょうか
0147デフォルトの名無しさん
2007/10/24(水) 00:11:260149デフォルトの名無しさん
2007/10/24(水) 00:43:300150デフォルトの名無しさん
2007/10/24(水) 00:58:03前者
0151146
2007/10/24(水) 01:00:55なるほど把握しました。
仕組みまで教えて頂いて感謝です。
そうなると、読み出しの場合はどうなるんでしょうか?
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
どちらが正しいのか判断が・・・
0152デフォルトの名無しさん
2007/10/24(水) 01:23:48おれは、入力ファイルが1GB越えないなら、
Slurpすることにしてる。
0153デフォルトの名無しさん
2007/10/24(水) 01:29:29print qq{1:$_};
while(<STDIN>){
print qq{2:$_};
last if $_ eq qq{\n};
}
print qq{3:$_\n};
}
をPerl 5.8.8で実行して内側のループを改行のみの入力で抜けた後の3:の値が
1:の時となぜか異なるのですが、$_のスコープみたいなものはどうなっちゃってるんでしょうか?
0154デフォルトの名無しさん
2007/10/24(水) 01:38:25異なって当然ですが
0156153
2007/10/24(水) 01:48:590157デフォルトの名無しさん
2007/10/24(水) 05:47:50その改行を</p>\n<p>に置換したいのですが、
どのようなコードを書くのがもっとも軽い処理になるでしょうか?
0158デフォルトの名無しさん
2007/10/24(水) 06:06:29>>157の</p>\n<p>というのは、
</p>
<p>
というつもりで書きました。
0159デフォルトの名無しさん
2007/10/24(水) 09:21:47> 改行($val =~ \x0D\x0A、\x0D、\x0A)
その表現だと \x0D\x0A を1つの改行と考えるのか
2つの改行 (\x0D と \x0A) と考えるのかで答が変わる。
http://www.din.or.jp/~ohzaki/perl.htm#CRLF_2BR
0160デフォルトの名無しさん
2007/10/24(水) 09:25:280161デフォルトの名無しさん
2007/10/24(水) 09:40:28そのサイトが非常に参考になりました。
$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として改行すると置換されてしまってうまくいきませんでした)
0162デフォルトの名無しさん
2007/10/24(水) 14:13:12Use 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);
0163デフォルトの名無しさん
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;
でいいんじゃないの?
0164デフォルトの名無しさん
2007/10/24(水) 14:24:38undef $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];
}
}
0165デフォルトの名無しさん
2007/10/24(水) 14:42:16いや、それはあまりにもひどいだろ。
いや、うんこがひどいんじゃなく、無駄にうんこを付け足そうって言う考え方がさ。
いや、うんこもひどいが。
0166デフォルトの名無しさん
2007/10/24(水) 14:46:41・まず、CRLFを\nに統一する
・段落を抽出する
・段落をpタグで挟む
・改行をbrタグに置換する
・段落末尾に\nをくっつけて結合する
0167デフォルトの名無しさん
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;
多分、これ一文で書けるよ
0168デフォルトの名無しさん
2007/10/24(水) 15:13:15助かりました。ありがとうございます。
0169デフォルトの名無しさん
2007/10/24(水) 16:25:50これってどう解釈すればいいんでしょうか・・・
$yが真だったら$yが代入される
$yが非だったら$xが代入される(値は変わらない)
ってことで大丈夫ですか?
0170デフォルトの名無しさん
2007/10/24(水) 16:29:36どなたか参考になるサイトもしくは手順等をお教えいただけないでしょうか。
宜しくお願いします。
0171デフォルトの名無しさん
2007/10/24(水) 16:45:24http://www.site-cooler.com/kwl/perl/6.htm#6-7
http://www.site-cooler.com/kwl/perl/5.htm#5-5
>>2-4
0172デフォルトの名無しさん
2007/10/24(水) 16:47:18$xが偽だったら$xに$yが代入される
$xが真だったらなにも行われない。
0173デフォルトの名無しさん
2007/10/24(水) 16:50:23http://search.cpan.org/~lbrocard/perl5.005_04/
0174デフォルトの名無しさん
2007/10/24(水) 18:27:100175デフォルトの名無しさん
2007/10/24(水) 18:33:250176デフォルトの名無しさん
2007/10/24(水) 19:24:18知ってるか、PHPって最初はperlで動いてたんだぜ
0177デフォルトの名無しさん
2007/10/24(水) 19:38:350178デフォルトの名無しさん
2007/10/24(水) 20:31:44そういう発想がありませんでした。
ありがとうございます。
無事に目的を果たすことができました。
0179デフォルトの名無しさん
2007/10/24(水) 21:44:160180デフォルトの名無しさん
2007/10/25(木) 14:47:52プログラム内で
$data = '1234567890...';
とやるのと、普通にファイルから読み込むのとではどちらが効率が良いでしょうか?
前者の場合はデータの分だけコードが長くなるからメモリの効率悪くなったりするんでしょうか?
0181デフォルトの名無しさん
2007/10/25(木) 14:58:50埋め込み
0182デフォルトの名無しさん
2007/10/25(木) 15:11:29プログラム内にデータを埋め込む方が効率が良いということですか。
ありがとうございます。
0183デフォルトの名無しさん
2007/10/25(木) 16:34:450184デフォルトの名無しさん
2007/10/25(木) 16:54:01プログラムの中に埋め込んでおけば
効率的に照合処理できるに決まってる。
0185デフォルトの名無しさん
2007/10/25(木) 21:24:26別のスクリプトでも利用する値なら置くべき場所に置いとく
0186デフォルトの名無しさん
2007/10/25(木) 21:41:130187デフォルトの名無しさん
2007/10/25(木) 21:51:290188デフォルトの名無しさん
2007/10/25(木) 22:25:09どーんとプログラム作りました→動かしました
じゃなくて、perlでプログラム作りながら、データ見て、
またプログラムの手直し、データの改修を逐次的に処理していかないと。
戻り作業の繰り返しで話が前に進まないんだがな。
舛添の会見見ててこいつなんもわかっちゃねーなと思うのって俺だけか?
0189デフォルトの名無しさん
2007/10/25(木) 22:40:34つーかさ、まずは己を知ることだと思うんだよ。
データを代名詞的に多用してるその文章見ただけでも、おまえ人並み以下だよ。
0190デフォルトの名無しさん
2007/10/25(木) 22:47:130191デフォルトの名無しさん
2007/10/25(木) 22:57:37どこにでもいるお馬鹿な客の一人。今さら言うまでもない。
0193デフォルトの名無しさん
2007/10/25(木) 23:40:45>客をその気にさせる
頭が悪いやつだな。
社会保険庁のトラブルは、客にいやなこと(「業務フロー上、将来禍根を残しますよ」)を
はっきり言わなかったのが原因だろ。現にトラブルがプログラマのせいにされている。
「その気にさせる」じゃまずい場合の典型事例だろうが。
社保庁システムのプログラマ(どうせコボラ)には、あまり親近感はないがね。
0194デフォルトの名無しさん
2007/10/25(木) 23:55:54Perlと全くかんけーねーし
0195デフォルトの名無しさん
2007/10/26(金) 00:20:040196デフォルトの名無しさん
2007/10/26(金) 00:56:24それだと毎年800億円もの受注が受けられない。
だからわざわざ回りくどい方法でシステムつくって
人月稼ぎしているんだよ。
0197デフォルトの名無しさん
2007/10/26(金) 01:16:50そ
だ
人
0198デフォルトの名無しさん
2007/10/28(日) 15:59:03【配布元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用の方は問題ないのですが、ケータイ用だけが文字化けします。
配布者の掲示板も機能してないみたいなので、
原因分かる方居られましたら、ヨロシクお願いします。
0199デフォルトの名無しさん
2007/10/28(日) 16:10:33※Aは「require '../../○○.cgi';」の間違いです
0200デフォルトの名無しさん
2007/10/28(日) 16:11:580201デフォルトの名無しさん
2007/10/28(日) 16:16:240202デフォルトの名無しさん
2007/10/28(日) 16:22:35push(@result, $_) if &$coderef;
の&$coderefはどういう意味なんでしょうか?
配列の各要素に対して、真か偽を返す関数だと思うんですが、
引数が渡されずに関数が呼び出されているように見えるんですが・・・
0203デフォルトの名無しさん
2007/10/28(日) 16:26:42おつ〜
埋めていくか
0204デフォルトの名無しさん
2007/10/28(日) 16:33:490205デフォルトの名無しさん
2007/10/28(日) 17:56:53本物の 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')
}
0206202
2007/10/28(日) 18:57:49if &$coderef;
が、どうして
# if $_ =~ /foo/
と解釈されるのかがよくわからないですorz
括弧をつけずに関数を呼び出すと@_が引数としてわたされるとしても
その内容にアクセスするには$_[0]と書かないといけないですよね。
でも実際には$_とfooがチェックされてるわけで、この$_の値が
どっからきたのかがわからないんです。
0207デフォルトの名無しさん
2007/10/28(日) 19:24:26自分が分かるように書けばよろし。
誰か別人が書いたコードを無理やりメンテさせられるのなら仕方ないが。
そんときは、自分でわかるように書き換えるな。俺なら。
0208デフォルトの名無しさん
2007/10/28(日) 20:06:50> foreach $_ (@_) {
この $_ は foreach ブロック内に局所化 (local) されてはいるけど
グローバル変数なんだからそのまま &$coderef 内でも参照できる。
$_ = 'quux';
my $coderef = sub { print ucfirst };
$coderef->() for qw(foo bar baz); # FooBarBaz
$coderef->(); # Quux
0209デフォルトの名無しさん
2007/10/30(火) 03:47:57use threadsを使って複数のスレッドを起動させているのですが、
そのスレッド毎にタイムアウト処理を作りたいのですが、うまくいきません。
0210デフォルトの名無しさん
2007/10/30(火) 04:39:40作りなおして全部POEにぶちこんだ方が良い悪寒
0211至急
2007/10/31(水) 18:53:18CGIに詳しく都内に来れる方であれば可能
詳しい人からすればそこまで難しくないと思われます。
一日日払い即金である程度払います。。
詳細はメール下さい。
0212デフォルトの名無しさん
2007/10/31(水) 19:24:42>>1
> CGIとPerlの区別がつかない人もWEBプログラミング板に行ってください。
> (WEBプログラミング板 http://pc11.2ch.net/php/ )
0213デフォルトの名無しさん
2007/10/31(水) 19:35:230214デフォルトの名無しさん
2007/11/01(木) 02:14:40情報ありがとうございます
POEを使う方向で考えてみます
0215デフォルトの名無しさん
2007/11/01(木) 07:32:34POE を作り直してくれないか。
0216デフォルトの名無しさん
2007/11/01(木) 15:39:13sub 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です。
0217216
2007/11/01(木) 15:42:38$h{'ex'} = &bar(1,2,\%h2);です。すいません。
0218216
2007/11/01(木) 15:43:42本当にすみません…。
0219デフォルトの名無しさん
2007/11/01(木) 15:54:17> 変数の順番を入れ替えただけで結果が変わってしまうのは
> なぜなのでしょうか?
変数の順番を入れ替えただけだと決めつけてる時点で、君はすでに敗北しているのだ。
0220デフォルトの名無しさん
2007/11/01(木) 15:54:32my $foo, $bar; は my($foo), $bar; であって my($foo, $bar); ではない。
0221デフォルトの名無しさん
2007/11/01(木) 15:56:390222デフォルトの名無しさん
2007/11/01(木) 15:59:05use warnings;
をつけろ
話はそれからだ
0223デフォルトの名無しさん
2007/11/01(木) 17:04:45>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 が通ってしまうから
なおさら、、、
0224デフォルトの名無しさん
2007/11/01(木) 17:23:010225216
2007/11/01(木) 18:47:04C言語でいうint a, b;と同じ扱いだと思っていました。
お恥ずかしい限りです。ありがとうございました。
0226デフォルトの名無しさん
2007/11/01(木) 22:11:56他の言語から来た奴だと結構ありがちかと。
0227デフォルトの名無しさん
2007/11/01(木) 22:21:15このページの先物取引情報っていう表の部分だけ取り出して、
エクセルに保存するスクリプトを書いているんですが、
「ページを解析して表だけHTMLごと取り出す処理」がなかなか上手くいきません。
TreeBuilder使ったのですが、
�@このページのHTMLタグ内にはclassもidもないので、
特定のtableタグをとってくる事ができない。
�A加えて、TreeBuilderを使うとHTMLタグが取り払われてしまう(?)
っていう問題で苦戦してます。
どなたかこの部分のやり方を教えていただけると助かります。
0228デフォルトの名無しさん
2007/11/02(金) 00:10:19無理に型に嵌めた作り方しなくても、
「TOPIX NET 」という文字が出てきたらフラグ立てて、
次の<tr>から</table>までを抜き出せばいいだけじゃないの?
0229デフォルトの名無しさん
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;
0230デフォルトの名無しさん
2007/11/02(金) 03:38:100231デフォルトの名無しさん
2007/11/02(金) 09:47:060232デフォルトの名無しさん
2007/11/02(金) 10:40:370233デフォルトの名無しさん
2007/11/02(金) 12:20:18Perlっぽくない気がする。
C臭さがプンプンしていて、どうも違和感が。
0234デフォルトの名無しさん
2007/11/02(金) 22:12:17文句言うだけなら子供でも言える。
0235デフォルトの名無しさん
2007/11/02(金) 22:14:55KENTの自作自演か?
言ってることがでたらめすぎるぞ。
0236デフォルトの名無しさん
2007/11/02(金) 22:28:12おや、見せられないのかい?恥ずかしくて他人には見せられないの?
へぇ。そう。
だったら他人のコードを批判する資格はまったく無いね。
0237デフォルトの名無しさん
2007/11/02(金) 22:49:56Perlらしいとかそんな次元の話じゃないだろ
0238デフォルトの名無しさん
2007/11/02(金) 23:03:28早く「Perlらしいコード」とやらを見せてくれよ。
0239デフォルトの名無しさん
2007/11/02(金) 23:07:38/ニYニヽ
(ヽ /( ゚ )( ゚ )ヽ /)
(((i ) /::::⌒`´⌒::::\ ( i))) でっていうwwwwwwwww
/∠_| ,-)___(-, |_ゝ \
( ___、 |-┬-| ,__ )
| `ー'´ /´
| /
0240デフォルトの名無しさん
2007/11/02(金) 23:15:27哀れなほど孤軍奮闘だなw
0241デフォルトの名無しさん
2007/11/02(金) 23:36:41&jcode'convert(*line, 'sjis') でなく &jcode::convert(\$line, 'sjis') な記述になってるし
flock(FH, 2) してるし、もうびっくりですよ。
0242デフォルトの名無しさん
2007/11/02(金) 23:46:09カートゥーンのキャラクターがぼやいてるようなやつ
0243デフォルトの名無しさん
2007/11/03(土) 00:14:120244デフォルトの名無しさん
2007/11/03(土) 00:24:240245デフォルトの名無しさん
2007/11/03(土) 00:51:44へ〜〜〜知らなかった〜〜〜!
そうなの、初めて知ったよ。
よく知ってるね、キミって情報ツウ?。すごいよ物知り博士だよ。
ネ申!ホトケ!天神まさ!ダイバダッタ!尊氏さまだよ!
0246デフォルトの名無しさん
2007/11/03(土) 01:09:400247デフォルトの名無しさん
2007/11/03(土) 01:22:250248デフォルトの名無しさん
2007/11/03(土) 01:27:35誰かと対談してて顔写真が載ってた
0249デフォルトの名無しさん
2007/11/03(土) 01:43:01へ〜〜〜すご〜い!
何でも知ってるんだね、物知りだね。
日系ソフトウエア読んでるだけでも自慢できるよ。
こんなクソスレにネ申が現れようとは!
0250デフォルトの名無しさん
2007/11/03(土) 03:12:450251デフォルトの名無しさん
2007/11/03(土) 08:22:350252デフォルトの名無しさん
2007/11/03(土) 12:19:16あたまいいねー。
0253デフォルトの名無しさん
2007/11/03(土) 16:08:09なるほど、とてもシンプルで分かりやすい方法ですね。
ぜひ試してみようと思います、ありがとうございます。
>>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〜)を抽出しようと思ったのですが、
エラーになってしまいました。
良い方法があれば教えていただけると幸いです。
0254デフォルトの名無しさん
2007/11/03(土) 16:11:15WindowsとLinuxで共通に動くプログラムを作ろうと思っています。
fork()周りがOS依存になってしまうので、Windows/Linuxで処理を分けたいです。
0256perl 修行中
2007/11/03(土) 20:14:38Sat, 03 Nov 2007 18:40:13 +0900 というフォーマットに変換したいと
思っているのですが見つかりません。
便利なパッケージとかないのでしょうか
0257デフォルトの名無しさん
2007/11/03(土) 20:20:06my $dt = DateTime::Format::HTTP->parse_datetime("2007-10-16 21:55:38");
print DateTime::Format::HTTP->format_datetime($dt);
0260デフォルトの名無しさん
2007/11/04(日) 02:16:210261デフォルトの名無しさん
2007/11/05(月) 00:24:36リストコンテキストなら同一ノード内の全div要素、スカラーコンテキストなら最初の要素のみ。
要素が見つからないなら、as_textメソッドを呼び出したときにエラーが出るだろうな。
0262デフォルトの名無しさん
2007/11/05(月) 16:59:02俺は日付の変換には Time::Piece を愛用している。
http://perldoc.jp/docs/modules/Time-Piece-1.08/Piece.pod
フォーマットを変えたいなら
Time::Piece->strptime(STRING, FORMAT)
でTime::Pieceのインスタンスを作って、
$t->strftime(FORMAT)
でフォーマットを指定して出力すればいい。
でもこのモジュール、2038年問題だったっけ?
未来の日付を拒絶するんで、使う場面には注意が必要。
0263デフォルトの名無しさん
2007/11/05(月) 18:11:04桁の数をそろえる方法ってありませんか?
具体的に言うと
0 1 2 … 10 … 100
ではなく、
000 001 002 … 010 … 100
のようにしたいのですが。
0264デフォルトの名無しさん
2007/11/05(月) 18:15:15sprintf
0265デフォルトの名無しさん
2007/11/05(月) 18:16:460266デフォルトの名無しさん
2007/11/05(月) 19:41:42'001' .. '100'
とかできたような気がする。
0267デフォルトの名無しさん
2007/11/05(月) 20:30:42foreach (0 .. 100) {
printf qq(%0.3d\n), $_; # 数字を他の文字列等とコンカチしたいときはsprintfで
}
0268デフォルトの名無しさん
2007/11/05(月) 21:19:20やっぱ Perl 使いはアホばっかだな。
0269デフォルトの名無しさん
2007/11/05(月) 21:29:160270デフォルトの名無しさん
2007/11/05(月) 22:26:51$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]を一番先に持ってきたりしたいのですが
どのようにすればいいでしょうか?
0271デフォルトの名無しさん
2007/11/05(月) 22:28:22モジュールは使えません。
0272デフォルトの名無しさん
2007/11/05(月) 22:55:38sort 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] ) ;
0273デフォルトの名無しさん
2007/11/05(月) 22:58:53各々の順序関数を @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 ;
入力によってsortを選択(択一)にするのなら判るけれども。。。
0275デフォルトの名無しさん
2007/11/06(火) 00:14:53a or b は aが偽のときにbを返す。
即ち、一個目のcmpが0を返したときに、次の評価が行われるようになる。
0276デフォルトの名無しさん
2007/11/06(火) 00:32:11use 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
0277デフォルトの名無しさん
2007/11/06(火) 02:15:10>>264-268 ありがとうございます
sprintf を使うことにします
0278デフォルトの名無しさん
2007/11/06(火) 07:16:04お題は>>256のとおり JST(+0900) で吐きたい、みたいなのよね。
HTTP::Date::time2str() は GMT でしか吐いてくれなかった気がする。
最近は Date::Format 使ってる。
過去に書いたコードを発掘したら use POSIX qw(strftime); と書いてるのもあると思う。
0279perler
2007/11/06(火) 12:15:22perl + MySQLを使用しています。
MySQLにinsertする際にこれまではMyISAMを使用していましたが、
都合によりInnoDBを使用することになりました。
そうした場合、MyISAMでinsertできていたソースがInnoDBに変更したら使用できなくなってしまいました。
何か違いがあるのでしょうか。
以下ソース。
my $sth = $dbh->prepare("INSERT user SET USER_NAME='ドコモ', MAIL='docomo', PASS='1234567';");
$sth->execute();
0280デフォルトの名無しさん
2007/11/06(火) 12:21:41Perlの問題というよりも、MySQLの設定がマズイような気がしますが。
Perl-DBI以外のクライアントでMySQLに接続して、INSERTできてます?
それとexecuteの後に、エラーが発生するんだと思いますが、
エラーメッセージには何と書かれているのでしょうか?
0281デフォルトの名無しさん
2007/11/06(火) 13:37:310282perler
2007/11/06(火) 13:46:07自己解決しました。
コネクションを取得時にオートコミットをオフにしていて、
コミットをしていなかった為でした。
皆様ありがとうございました。
0283デフォルトの名無しさん
2007/11/06(火) 14:50:35キチガイ?
0284デフォルトの名無しさん
2007/11/06(火) 18:16:150285941
2007/11/06(火) 22:55:41指定したURLからjpgをbinmodeでファイルに書き込むまでは出来たんですが
それを.jpgになおせません・・・何を言ってるか自分でもわかりませんが
いい方法は無いでしょうか?
0286デフォルトの名無しさん
2007/11/06(火) 22:56:330287デフォルトの名無しさん
2007/11/06(火) 23:05:24私にも意味が分かりません。
0288デフォルトの名無しさん
2007/11/06(火) 23:09:14ただ単にネット経由で画像とってきて保存したいだけなら
my $ua = LWP::UserAgent->new;
$ua->mirror($url, $filename)
だけでもできるよ
0289デフォルトの名無しさん
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);
}
0290デフォルトの名無しさん
2007/11/06(火) 23:25:31とかつかってjpg画像を指定した落としていきたいんです・・説明へたくそ
でごめんなさい
0291デフォルトの名無しさん
2007/11/06(火) 23:28:09バイナリデータをreadlineで読むなよ
0292デフォルトの名無しさん
2007/11/06(火) 23:33:450293デフォルトの名無しさん
2007/11/06(火) 23:34:160294デフォルトの名無しさん
2007/11/07(水) 01:05:190295デフォルトの名無しさん
2007/11/07(水) 01:14:31どうしたらいいんでしょうか
0296デフォルトの名無しさん
2007/11/07(水) 01:17:40主語述語きちんと言いなさい。学校で習わなかったかな?5W1Hって。
0297デフォルトの名無しさん
2007/11/07(水) 01:23:34OSが起動しなくなりました。
Windwosロゴまでは表示されますが
その後真っ暗です。
セーフモードでの起動は出来ます。
復元でActivePerlインストール前にもどれば起動は出来ましたが
ActivePerlを使いたいのです、
0298デフォルトの名無しさん
2007/11/07(水) 01:24:48use 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'とかに指定すればちゃんと変換されるのですが、それだと他コードのファイルが文字化けします。
どうすればいいでしょうか・・・?
0299デフォルトの名無しさん
2007/11/07(水) 03:37:57http://perldoc.jp/docs/perl/5.8.4/perlfunc.pod#item_readline_EXPR
>>298
http://www.kt.rim.or.jp/~kbk/perl-5.8/guess.html
0300デフォルトの名無しさん
2007/11/07(水) 04:08:16インストールオプションで、Perl 本体と PPM ”だけ” インストールしてみてはどうだろう。
ISAPI とか PerlEX とか PerlScript とか、(必要が無ければ) チェックをははずしてみる。
うまくいくかどうかわわからんが、成功を祈る。
0301デフォルトの名無しさん
2007/11/07(水) 12:17:51OSって Windows の何?XP?Vista?
サービスパックのバージョンは?
0302デフォルトの名無しさん
2007/11/07(水) 13:09:44だめでした。
なんとか復元3回やってまた戻しました。
OSはXPのSp2です。
一応復元する前にPerlのファイルを別途保存してみたので
それを使って目的のことが出来ないかやって見ます。
0303デフォルトの名無しさん
2007/11/07(水) 22:48:10そのsyslogの作成日が本日だった場合にはsyslogに任意の文字列を記述し、
本日でなかった場合には何もしない、という処理をさせたいのですが
どうしたらよいでしょうか?
0304デフォルトの名無しさん
2007/11/07(水) 23:40:27基本的にさ、perl のファイルさえあればOKなんよ。
あとは環境変数 PATH に perl のディレクトリを加えたり、
拡張子 .pl を perl.exe に関連付けしてるだけだから、
もし Active Perl のインストーラでうまくいかないんだったら
これらを手動でやっちゃえばOK・・・なハズ。
PATH とか 拡張子の関連付けとか、具体的なやりかたが分からなかったら
また質問してね。
0305デフォルトの名無しさん
2007/11/07(水) 23:44:24ファイルの日付は stat 関数、
ファイル名変更は rename 関数を使う。
それぞれの使い方は google で調べてね。
0306デフォルトの名無しさん
2007/11/08(木) 04:27:04のように数字が横に並んだファイルがあるのですが
456−657,657-787,787-455,…というような前後の差分を
とったファイルを出力するにはどうしたらいいでしょうか?
ファイルを読み込んで、そのデータをfor文で差分をとっていけばいいと思うのですが
例えば456や657をどのように指定するかがわかりません。
指定する方法がわかればそれをひとつずつずらしていけばいいと思うのですが・・・
お手数ですが、どなたかヒントをお願いいたします。
0307デフォルトの名無しさん
2007/11/08(木) 06:06:03for $i (0..$#nums-1) {
print $nums[$i] - $nums[++$i];
}
0308306
2007/11/08(木) 06:22:40まずリスト変数にその数字をいれて指定できるようにして
そしてそのリスト値を最後のから一つ前まで代入して差分できるようにするということですね。
回答していただき感謝しております。
それと今回はその要素(456、657など)が一万個くらいあるのですが
その場合は直接リスト変数の要素として入れるわけには行きませんよね?
よろしければその場合もお教え願えませんか?
その一万個の数字のファイルを読み込んだあとにどのようにして
一万個の数字を指定して差分を求めればいいかがわからないのです・・・
0309デフォルトの名無しさん
2007/11/08(木) 06:31:46my $data = '456,657,787,455';
my @nums = split(/,/, $data);
0310デフォルトの名無しさん
2007/11/08(木) 06:32:39なんかメモリ上に1万個の要素を入れるのがマズいとも読み取れるけど・・・。
open my $in, "UNKO";
my @nums = split(/,/, do { local $/ ; <$in> });
close $in;
とでもすれば。
0311デフォルトの名無しさん
2007/11/08(木) 06:34:43これでいいか。
0312306
2007/11/08(木) 06:46:29丁寧にありがとうございます。
>>310
その通りです。一万個の数値を直接プログラムに入力するのはまずいかなと思いまして。
日本語に至らないところがあり申し訳ありませんでした。
ありがとうございます!
,に対応してそれぞれの値が区切られてリスト変数の要素としてとして
認識されていくというわけですね。
丁寧な指導ありがとうございます。おかげでリストに読み込む方法がわかりました。
0314デフォルトの名無しさん
2007/11/09(金) 00:49:28条件とか謝礼とか書かないと。
0315デフォルトの名無しさん
2007/11/09(金) 01:19:03「失敗」することがあるもんだって、
知らないで使っているのでは。
0316306
2007/11/09(金) 03:58:2611,22,33,44,55,66 というリストを
11,33,55
22,44,66
というように二つのリストに分けるという作業はどうしたらいいのでしょうか・・・
substrとfor文で一つ置きに抽出しようとも思ったんですが++ではなく一個置きに
するというプログラムがわからなくて・・・
そもそもここでsubstrを使おうとすること自体間違っている可能性が高そうですが。
0317デフォルトの名無しさん
2007/11/09(金) 04:31:201個置きはループカウンタが奇数か偶数で分岐すればおk
0318デフォルトの名無しさん
2007/11/09(金) 04:37:04Perlもまた、間もなくなくなる。
0319デフォルトの名無しさん
2007/11/09(金) 05:28:500320306
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;
のようにすれば奇数グループと偶数グループを分けることができるというわけですね。
0321306
2007/11/09(金) 06:32:380322デフォルトの名無しさん
2007/11/09(金) 06:43:34リストの先頭から1個ずつ取り出して出力先のリストにかわりばんこに
プッシュすれば良い。
0323306
2007/11/09(金) 08:08:19ありがとうございます。おかげさまでデータを分けることができました!
あと
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;
0324306
2007/11/09(金) 08:24:44for($i=0;$i<=$#all-1;$i++ ) を
for $i (0..$#all-1) にしたらうまくできました。
しかしこの二つの文は僕には同じようにしか見えないんですがどこが違うんでしょうか。。。
0325デフォルトの名無しさん
2007/11/09(金) 08:30:340326306
2007/11/09(金) 08:49:01でもなぜか
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),…となりできるんですが。
0327デフォルトの名無しさん
2007/11/09(金) 08:54:08だって、まず
$kekka = $all[$i] - $all[++$i];
のケツの部分で一回インクリメントされて、そのあと
for($i=0;$i<=$#all-1;$i++){
のケツの部分でもう一回インクリメントされてるわけだから。
0328デフォルトの名無しさん
2007/11/09(金) 09:38:55数をカウントアップしてるのと、数列を順に入れてる という違いだが
基本的に同じ。 ってかカウンター変数触んなよ。バグの元凶だ。
0329306
2007/11/09(金) 10:17:35>>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;
0330デフォルトの名無しさん
2007/11/09(金) 10:39:03> 二重にカウントされてるようなものってことですね。
ようなもの、じゃなくて、二重にカウントされてるんだよ。
言葉尻を捉えた突っ込みに思うかもしれないけど、ここで曖昧さを排除することは凄く重要だよ。
君の目と意識が、ハッキリ「二重にカウントしてる」のを捉えるまで、わかった気になっちゃダメ。
> for文の後ろの方いじるとまずいんですね
よくわからないうちに相手の意見を「自分流に言い換える」のも危険だよ。
カウンター変数ってのはこの場合$iのことで、この$iの中身を「ループ内部で」書き換えるのは混乱の元だ、という話。
ループの内部でこの値を変更するというのは、「ループ内部から見ると、$iは毎回1ずつ増えて降ってくる
絶対的なものに感じられる」というある種の信頼を崩すということで、これは本当に混乱する。
事実、君はその信頼に囚われて、たった2行なのに原因を見つけられなかったでしょ?
だから、君の解釈であるところの「for文の後ろの方いじるとまずい」は正反対だ。for文の後ろでしかいじっちゃいけない。
これも、「よくわかんないけど、とにかくカウンター変数はfor分の最後でいじれということですね」とか
曖昧な解釈で終わっちゃダメだからね。何故そうすべきなのか、納得するまで考え込むように。
0331デフォルトの名無しさん
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]と書くべき。「スライス」をキーワードにして調べるように。
あたりは絶対に直さないとダメ。他にも「よりよい方法に変えるべき」点はあるけど、書ききれない。
0332デフォルトの名無しさん
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' \[−\] '';
など
(修飾子と区切り文字列の組み合わせは他に試していますが、
すべての組み合わせを実行していません)
よろしくお願いします。
0333デフォルトの名無しさん
2007/11/09(金) 14:13:52ソースファイルを保存するとき、文字コードは何にしてます?
0334デフォルトの名無しさん
2007/11/09(金) 14:21:32無駄が多い気もするけどこんな感じか?
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]});
0335332
2007/11/09(金) 14:25:40SHIFT-JISです。
0336デフォルトの名無しさん
2007/11/09(金) 14:34:53だとしたら
ソースファイルの冒頭あたりに、
use encoding 'shiftjis' ;
あるいは
use encoding 'cp932' ;
って書いてみてください。
ほかにも引っ掛かりそうなことがあるんで
ttp://www.fl.reitaku-u.ac.jp/~schiba/perl/perlEncoding.html
↑まずこのへんを読んでみて。
0337306
2007/11/09(金) 15:07:14ご指摘ありがとうございます、そういうことだったんですか。ループ中の
[]の中に++を使うと確かに意味がわかっていませんでした。
>>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重に出力してしまいます・・・
0338306
2007/11/09(金) 15:18:32わざわざプログラムを作成していただきありがとうございます。
しかし申し訳ないのですがプログラム初心者の私には、少々高レベルで理解できません・・・
レベルの低い質問で申し訳ないのですが、よろしければ二重に出力される原因を教えていただけたら幸いです。
0339デフォルトの名無しさん
2007/11/09(金) 15:29:35>>338
print OUT @guusuu;
がwhileの中にあるのがマズイんじゃね?
closeの後に@guusuuを出力するようにしてみ。
0340デフォルトの名無しさん
2007/11/09(金) 15:51:00ループ中で作った配列をクリアしないで回してるところとか、
そういう本質的な間違いに気がつくべきだと思うな。
だいたい初心者なら、まずデータをコードに埋め込んでプログラムするもんだろ。
あと、chompつかえよ。
0341デフォルトの名無しさん
2007/11/09(金) 16:23:30> 自分ではsuuji.txtの1行目の偶数を@guusuuに出力、その後2行目の偶数を@guusuuに出力しているつもりなのですが
つもりとか言ってないで、調べろよ。想像していないで、どうなっているのかいちいち調べろ。
0342デフォルトの名無しさん
2007/11/09(金) 16:25:32君、この程度でつまづいてて大丈夫?
0343デフォルトの名無しさん
2007/11/09(金) 16:28:26他の人から答えをもらおう って所が見込み無い。
課題をこなしてる意味もあんまない。
0344デフォルトの名無しさん
2007/11/09(金) 16:47:000345デフォルトの名無しさん
2007/11/09(金) 16:49:310346デフォルトの名無しさん
2007/11/09(金) 16:49:34(なんでこの一連の流れでまだ「二重に出力される理由」がわからんのよ)
0347デフォルトの名無しさん
2007/11/09(金) 16:54:09>>338
>しかし申し訳ないのですがプログラム初心者の私には、少々高レベルで理解できません・・・
人のソース読むのも勉強だし
自分で作ったコードと比較して何が悪かったのか調べるのも勉強だと思うぞ
0348デフォルトの名無しさん
2007/11/09(金) 17:05:04おまえもう工場のライン工やっとけ。
出来た製品二重に流すんじゃねーぞ。
0349デフォルトの名無しさん
2007/11/09(金) 17:09:30「偶数奇数が‥‥」って言っている時点で
厨房か工房あたりだろうにw
0350デフォルトの名無しさん
2007/11/09(金) 17:10:45質問スレは便利だけど、もらえるのはヒントだけ
結局考えるのは自分自身なのだ
0351デフォルトの名無しさん
2007/11/09(金) 17:15:450352デフォルトの名無しさん
2007/11/09(金) 17:16:290353デフォルトの名無しさん
2007/11/09(金) 17:43:40もし本人がいい大人だったら、一番手厳しい意見だw
0354デフォルトの名無しさん
2007/11/09(金) 17:47:260355306
2007/11/09(金) 17:49:45昨日からperlというかプログラムを初めて勉強しはじめたので
ずいぶん低レベルなレスをしてしまったと思われます。。。
工場のラインを避けるべく、今日も徹夜でperlを勉強しようかとおもいます。
>>339さん、ありがとうございます。その通りでした。
>>341 修正するごとに実行してるんですがそれでもわからなかったので・・・
>>348
先生、ホワイトカラーの仕事がしたいです・・・
>>350
このスレの皆さんからとても貴重なアドバイスがいただけました。
>>352
ありがとうございます。次回の書き込みからはもっと明確な言葉を使うようにします。
0356デフォルトの名無しさん
2007/11/09(金) 18:00:080357デフォルトの名無しさん
2007/11/09(金) 18:10:21なんだか恐ろしいな。
こんなことだからシャホチョーの5000万件漏れが起きるんじゃないのか?
0358デフォルトの名無しさん
2007/11/09(金) 18:31:230359デフォルトの名無しさん
2007/11/09(金) 18:42:29しらんがな。
しかもシャホチョのはフローチャート世代だろうに
0360デフォルトの名無しさん
2007/11/09(金) 18:56:39でも仕様書用にフローチャートは書けたほうがいい
細かいプログラムにいちいち書いてらんねーけど。
0361デフォルトの名無しさん
2007/11/09(金) 19:30:590362デフォルトの名無しさん
2007/11/09(金) 19:40:27なんて台詞がよく漫画にあるけど、フローチャートはまさにそこんところの証明兼、説明手段。
ただ、書かないと自分のやっていることがわからない、ってわけではないし、
ある程度の経験者なら、自分が今「書こうと思えば書ける」状態なのか否かは、自己診断できる。
だから、書けることは大事だけど、古い人が口にするような重みは無いな。
0363デフォルトの名無しさん
2007/11/09(金) 19:41:020364デフォルトの名無しさん
2007/11/09(金) 19:53:43フローチャートさえ書けないのか?って事。
紙に書きたくないなら頭の中に書いてもいい。
でも、頭の中にでさえフローチャートが書けないようじゃヤバイだろ。
基本中の基本だろ?
>フローチャートなど使うプログラマは池沼
これは、フローチャートを卒業して、次のステップに進んだ者が言うセリフだよ。
>>328 のようなおかしなコードを書く初心者には
自分の考えを確認する意味でも、図に書いてみるのは大切な事。
0365デフォルトの名無しさん
2007/11/09(金) 19:54:570366デフォルトの名無しさん
2007/11/09(金) 20:03:100367306
2007/11/09(金) 20:20:37x成分の速度データが入った「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;
0368デフォルトの名無しさん
2007/11/09(金) 20:25:020369306
2007/11/09(金) 20:25:32(x方向の速度の成分の二乗+y方向の速度成分の二乗)の平方根のことです。。。
0370306
2007/11/09(金) 20:30:33おかげさまで解決することができました。
print OUT @guusuuを
print OUT $guusuuにしました。
0371デフォルトの名無しさん
2007/11/09(金) 20:46:48可能です
0372デフォルトの名無しさん
2007/11/09(金) 20:46:530373デフォルトの名無しさん
2007/11/09(金) 20:48:45センスないよ。プログラムやめたほうがいい。
プログラミングなんてしなくてもいい仕事たくさんあるから。
0374デフォルトの名無しさん
2007/11/09(金) 20:49:390375306
2007/11/09(金) 20:55:59可能ですか!?まだ希望が持てます。
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 まで表示することができました。
0376306
2007/11/09(金) 20:56:49○b.txt
0377デフォルトの名無しさん
2007/11/09(金) 21:09:210378デフォルトの名無しさん
2007/11/09(金) 21:28:20後者なら、Excelでやった方が楽な気がする。
0379306
2007/11/09(金) 21:32:57open 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
ところで実行結果が一つ余分に出てくるのは何故でしょうか?
0380306
2007/11/09(金) 21:34:10perlを使うことが目的なんです。
0381デフォルトの名無しさん
2007/11/09(金) 21:36:04お前、自分の書いてることの意味分かってないだろ
0382デフォルトの名無しさん
2007/11/09(金) 21:41:47致命的な指摘ほど無視してるし。
0383306
2007/11/09(金) 22:20:48あまりよくわかってないですね。最後の値が2重に表示される意味がわからないですし。
>>382
無視してるんじゃなくて、意味がわかっていないのです。
0384デフォルトの名無しさん
2007/11/09(金) 22:59:04プログラムを書けるようにするための補助輪のようなもの。
0385デフォルトの名無しさん
2007/11/09(金) 23:11:39自分の言いたいことだけ書き込んで、問題を解決する前に問題を拡大させて。
0386デフォルトの名無しさん
2007/11/09(金) 23:41:00初心者ってのはみんなこうなのか、同一人物による荒らしなのか?
いずれにせよ、初心者名乗るヤツはNGな
0387デフォルトの名無しさん
2007/11/09(金) 23:47:430388デフォルトの名無しさん
2007/11/09(金) 23:47:59こんなとこで質問せずに、図書室でも図書館でも行って入門書でも読んでろ。
Perl本なんて今じゃ人気なくて不良資産化してるはずだから、
いくらでも見つかるはずだ。
0389デフォルトの名無しさん
2007/11/09(金) 23:48:330390306
2007/11/09(金) 23:49:35正直「そんなのもできないの?」
とか書きこんでる馬鹿とかなんなの?
意味ないでしょう、そんな書き込み。まあそれこそ同一人物による荒らしだと思いますがね。
アドバイスやご指摘を下さった方々には感謝しております。
どうもありがとうございました。
0391306
2007/11/09(金) 23:51:08ありがとうございます。僕がいると荒れるのでこのスレから出て図書館にこもることにします。
それでは。
0392デフォルトの名無しさん
2007/11/10(土) 00:03:06厨房工房説は正しかったようだな。
0393306
2007/11/10(土) 00:07:270394306 ◆9ytKL4.iPs
2007/11/10(土) 00:12:19偽物が多すぎなんですがwww
僕はそんな暴言吐かないですよw
皆さんどうもありがとうございました。
0395デフォルトの名無しさん
2007/11/10(土) 00:28:090396デフォルトの名無しさん
2007/11/10(土) 01:01:23# 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以下の情報をずらっと取得するようにしたいんだけど
どうすればいいの?
0397デフォルトの名無しさん
2007/11/10(土) 01:16:420398デフォルトの名無しさん
2007/11/10(土) 01:21:18http://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
0399デフォルトの名無しさん
2007/11/10(土) 01:37:20>>398
できた!ありがとう!
cronで定時計測、perlでちょこまか好きなように集計解析管理している方が精神衛生上にも良かったりします♪
・・・おかげで夜中に携帯が鳴ったりするけれども(´・ω・`)@数値異常検出とか警報とか
♯シーケンサをどうにかして撲滅したい。。。@殊にξ菱
0401デフォルトの名無しさん
2007/11/10(土) 08:53:360402デフォルトの名無しさん
2007/11/10(土) 11:12:18なんだかんだであと半年くらい
こういう居座り方をするつもりなのかも。
0403デフォルトの名無しさん
2007/11/10(土) 13:36:17> ActivePerlをインストールしたら
> OSが起動しなくなりました。
> Windwosロゴまでは表示されますが
> その後真っ暗です。
> セーフモードでの起動は出来ます。
> 復元でActivePerlインストール前にもどれば起動は出来ましたが
> ActivePerlを使いたいのです、
ずいぶん遅レスになってしまったが、おそらくレジストリが壊れている。
今後、ActivePerl に関係ないところでも障害が出てくる可能性が高い。
OSの修復インストール、再インストールなどをするしかあるまい。
0404デフォルトの名無しさん
2007/11/10(土) 14:03:45この値をモジュールから参照するにはどうすればいい?
our $hoge とかして、モジュールでは $::hoge とすれば
参照できるわけなんだけど、とっても美しくない気がしているの。
(ちなみに参照したいだけで書き換えはしない)
0405デフォルトの名無しさん
2007/11/10(土) 14:12:57だが、そういう参照が必要になるってのは、
構造上の問題を孕んでいる可能性が高いと思う。
0406デフォルトの名無しさん
2007/11/10(土) 14:56:51ある時点の値が分かれば OK→new とかに渡す
0407デフォルトの名無しさん
2007/11/10(土) 21:49:36うん、多分今の構造が美しくないんだと思う。
誰かが作ったシステムに追加でモジュール書かなきゃいけなくなってねぇ。
最大の問題は俺がオブジェクト指向を知らないことなんだけどさw
プログラム書くのが本職ではないので知らなくても困らなかった。
ourのままやっちゃうかなぁ、う〜ん。
0408デフォルトの名無しさん
2007/11/10(土) 23:10:58趣味でプログラミングしてるんなら別だが
すでに出来上がって稼動しているシステムを
「ツーチャンネルで相談したら、こう言われたので」
というくだらない理由で
1から書き直すという愚考は会社にとって迷惑。
0409デフォルトの名無しさん
2007/11/10(土) 23:48:49「rewrite せよ」なんて誰も言ってないと思うが、、、
404氏がちょっとobjct指向覚えれば、最低限の修正で
済むんじゃないの?
0410デフォルトの名無しさん
2007/11/11(日) 00:38:401から書き直しはさすがにしないぞ。
でも比較的楽に綺麗になるならある程度の修正は
やってみたいなぁとは思っている。
>>409
まぁなんというか簡単に「ちょっと」覚えられればいんだけどねw
0411297
2007/11/11(日) 01:04:54どうも、修復のためのSP2CD作ってました。
しかしなぜか再起動を繰り返していると起動するようになったので
Perlを別途保存しておいたやつを環境変数設定して再起動したら
問題なく起動した。そのごJcode.pm(Jcode.pl)をぶっこむと
起動しなくなった。どうやらこれが影響してるみたい。
フォトショの日本語フォントの表示が文字化けしてるのも関係あr・・・ないか
どちらにせよJcode使う必要があるので、修復が必要ぽいな
0412デフォルトの名無しさん
2007/11/11(日) 17:42:23Jcode モジュールは古いバージョンで必要なものだよ。
今のバージョン(5.8以降)では、標準で付いているEncode
モジュールを使うべき。
0413デフォルトの名無しさん
2007/11/11(日) 23:20:580414デフォルトの名無しさん
2007/11/12(月) 01:48:130415デフォルトの名無しさん
2007/11/12(月) 02:10:20>>411は記述に謎が多いけど(Jcode.pm と jcode.pl の区別とか)
Jcode.pm使用の既存スクリプトをローカルでごにょごにょするんだろうとか
5.6でも動くものを書こうとしてるんだろうとか(たぶん違うけど)
思い込んで、ニヤニヤ眺めていればいいと思うんだ。
0416デフォルトの名無しさん
2007/11/12(月) 05:26:170417デフォルトの名無しさん
2007/11/12(月) 06:37:39[email protected]
0418デフォルトの名無しさん
2007/11/12(月) 14:29:030419デフォルトの名無しさん
2007/11/12(月) 14:43:12oh,,, miss spell
"Fuck you"
0420デフォルトの名無しさん
2007/11/12(月) 19:14:12Fuck you
0421デフォルトの名無しさん
2007/11/12(月) 20:49:51=item 日本語
とかかれたPODをHTMLに変換すると、<a name="___?_?_?__?_" class="item">のように文字化けしてしまいます。
PODファイルの文字コードはS-JISやUTF-8など、いろいろ試してみたのですがどれもだめでした。解決法はないでしょうか。
0422デフォルトの名無しさん
2007/11/12(月) 23:44:05> 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 より
0423デフォルトの名無しさん
2007/11/13(火) 02:30:19ありがとうございました。
0424デフォルトの名無しさん
2007/11/13(火) 10:37:09good!!
0425デフォルトの名無しさん
2007/11/13(火) 11:54:45192.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のようなアドレス変換にも対応
できるようにするにはどうすればいいでしょうか?
また、同じようなプログラムはないでしょうか?
0426デフォルトの名無しさん
2007/11/13(火) 11:59:430427デフォルトの名無しさん
2007/11/13(火) 14:14:190428デフォルトの名無しさん
2007/11/13(火) 14:16:520429デフォルトの名無しさん
2007/11/13(火) 15:20:56どのようにすれば良いでしょうか。
たとえば "apple++orange@@-pie" から /([a-z]+)[^a-z]/ にマッチするものを順次取得、
つまり "apple", "orange", "pie" を取得したい、という目的です。
0430デフォルトの名無しさん
2007/11/13(火) 15:50:54m///
0431デフォルトの名無しさん
2007/11/13(火) 15:53:04>>429
m//gをループに入れて回す
0432デフォルトの名無しさん
2007/11/13(火) 16:42:19"apple+", "orange@" しかマッチしないだろ
0433デフォルトの名無しさん
2007/11/13(火) 17:04:00後は自分で勉強しろ、配列に入れるトコとか正規表現とか、、、
0434デフォルトの名無しさん
2007/11/13(火) 17:30:230435デフォルトの名無しさん
2007/11/13(火) 17:31:140436デフォルトの名無しさん
2007/11/13(火) 20:16:59while (-e "$a$b")
{
print 〜
}
の"-e"の意味がわかりません。
$aと$bが同じでない間はprint〜を実行、って意味になるんですか?
ageですみませんが教えて下さい。
0437デフォルトの名無しさん
2007/11/13(火) 20:29:36ファイルもしくはディレクトリがあれば真
0438デフォルトの名無しさん
2007/11/13(火) 20:30:190439デフォルトの名無しさん
2007/11/13(火) 20:53:52エコーが邪魔なので消したいです。どうしたらいいでしょうか。
0440デフォルトの名無しさん
2007/11/13(火) 21:05:430441デフォルトの名無しさん
2007/11/13(火) 21:18:37system("stty -echo");
0442デフォルトの名無しさん
2007/11/13(火) 21:44:36なるほどw perlでどうこうする前に先ず試すべきでした。
>>440
こういうのがあるんですね。使ってみます。
ありがとうございました。
0443デフォルトの名無しさん
2007/11/13(火) 23:00:02これはなんでだ?
インストールするとき、えらい長かったんだが。
0444デフォルトの名無しさん
2007/11/13(火) 23:42:44それはperlとは関係なくね?
空き容量が4G増えたとしたらなんか消したってことだろ。常考。
インストール作業中にファイル整理してなかったか?
0446デフォルトの名無しさん
2007/11/14(水) 16:22:100447デフォルトの名無しさん
2007/11/14(水) 18:27:520448デフォルトの名無しさん
2007/11/14(水) 18:42:03無差別に敬意を払うのは、だれにも敬意を払わないのと同じ。
0449デフォルトの名無しさん
2007/11/14(水) 18:43:570450デフォルトの名無しさん
2007/11/14(水) 19:48:15差別するわけか
0451デフォルトの名無しさん
2007/11/14(水) 20:02:240452デフォルトの名無しさん
2007/11/14(水) 20:06:050453デフォルトの名無しさん
2007/11/14(水) 20:25:41同和、解同乙
0454デフォルトの名無しさん
2007/11/14(水) 23:58:18>>448の論理に乗る必要なくね?
0455デフォルトの名無しさん
2007/11/15(木) 00:07:37449の鋭い論理の前にボロクソに言い負けて涙目な448乙。
0456デフォルトの名無しさん
2007/11/15(木) 00:33:550457デフォルトの名無しさん
2007/11/15(木) 00:46:14ってか>>449が鋭い論理って・・・。
ズレてるから補正してやろうと思ったが、とりあえずそのままズレてろw
0458デフォルトの名無しさん
2007/11/15(木) 00:47:000459デフォルトの名無しさん
2007/11/15(木) 07:36:13> うおw 俺>>448になっちまったのか?!
うん、昨日の18:42:03から、このスレでは君は448。
苦しい現実だから、綺麗サッパリ忘れたいんだろうけどね。
0460デフォルトの名無しさん
2007/11/15(木) 08:33:480461デフォルトの名無しさん
2007/11/15(木) 10:23:140462デフォルトの名無しさん
2007/11/15(木) 10:25:18WebPGの中でも特にKENTは匂いが違うしな。
何というか…“本質”みたいな物が見えているよね、KENTは…
0463デフォルトの名無しさん
2007/11/15(木) 11:16:00ご存知の方いらっしゃいましたら、
教えていただけませんでしょうか。
以下の様にデータセットの参照を動的に行いたいのですが、
$tmpColumnNameのところで参照ができない状況です。
この様な動的参照をする際には、
どの様に対応すればよいか教えていただけませんでしょうか。
$tmp = ref(($RecordSet->{Fields}->{$tmpColumnName}->{Value}));
0464デフォルトの名無しさん
2007/11/15(木) 11:20:10そのrefはなんのためにあるん?
0465デフォルトの名無しさん
2007/11/15(木) 11:23:48失礼しました。
ref()は無くしてください。
$tmp = ($RecordSet->{Fields}->{$tmpColumnName}->{Value});
print("$tmp");
の様になります。
0466デフォルトの名無しさん
2007/11/15(木) 11:26:520467デフォルトの名無しさん
2007/11/15(木) 11:28:490468デフォルトの名無しさん
2007/11/15(木) 11:58:00-‐'―ニ二二二二ニ>ヽ、 ┃ ━━━━━━━━
ァ /,,ィ=-;;,,, , ,,_ ト-、 ) ┃ ┃┃┃
' Y ー==j 〈,,二,゙ ! ) 。 ┛
ゝ. {、 - ,. ヾ "^ } } ゚ 。
) ,. ‘-,,' ≦ 三
ゞ, ∧ヾ ゝ'゚ ≦ 三 ゚。 ゚
'=-/ ヽ゚ 。≧ 三 ==-
/ |ヽ \-ァ, ≧=- 。
! \ イレ,、 >三 。゚ ・ ゚
| >≦`Vヾ ヾ ≧
〉 ,く 。゚ /。・イハ 、、 `ミ 。 ゚ 。 ・
0469デフォルトの名無しさん
2007/11/15(木) 12:29:18Field1 => 'Value1',
Field2 => 'Value2',
Field3 => 'Value3',
};
my $tmpColumnName = 'Field2';
my $tmp = $RecordSet->{$tmpColumnName};
print $tmp;
こうなんじゃないかと予想
0470デフォルトの名無しさん
2007/11/15(木) 12:35:230471デフォルトの名無しさん
2007/11/15(木) 13:14:00プログラムの動作結果を「自分の望み通り」と「それ以外」の2種類だけで捉える、
っていうのがあるな。
「思った通りになりません」というのは、やってしまい得る無数のことのうちの
特定の一つではなかった、と言ってるだけで、まともな情報になってない。
「あなたのお名前は?」と訊かれて「太郎ではありません」と答えるようなもんだ。全然足りねえよ。
「どうなったのか」を書け。エラー報告も含めて。
0472デフォルトの名無しさん
2007/11/15(木) 13:26:17エラーですが、何も表示されないんです。。。
0473デフォルトの名無しさん
2007/11/15(木) 13:28:000474デフォルトの名無しさん
2007/11/15(木) 13:33:300475デフォルトの名無しさん
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]とありますが、
ループ内で該当変数を表示させようとするとすべて表示されます。
0476デフォルトの名無しさん
2007/11/15(木) 13:41:00print($arrColumnName[$intArrayNumber]."\n"); ←ここは表示できます。
$tmp = ($RecordSet->{Fields}->{$arrColumnName[$intArrayNumber]}->{Value}); ←ここでカラムのデータを取りたいが、取り出しができない。(エラー表示はなし)
print($tmp);
$intArrayNumber = $intArrayNumber + 1;
}
0477デフォルトの名無しさん
2007/11/15(木) 13:46:03ひとつひとつ分解して、中身を丁寧に調べるしかないんじゃねーの?
SQLが間違っていて、最初から結果が空だったっていう
オチのような気もするが。
0478デフォルトの名無しさん
2007/11/15(木) 13:47:00Perlのエラーはブラウザではなく、Webサーバーのログを見なければならない
apache/logs/error.logを参照のことと一応いっておく
0479デフォルトの名無しさん
2007/11/15(木) 13:49:16配列参照だから print(@$tmp[0]); で出ないかい?
0480デフォルトの名無しさん
2007/11/15(木) 13:56:170481デフォルトの名無しさん
2007/11/15(木) 13:58:16ご指摘・アドバイス頂いた点を確認してみます。
0482デフォルトの名無しさん
2007/11/16(金) 03:48:481から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だった場合」のように範囲の決め方がわかりません。
0483デフォルトの名無しさん
2007/11/16(金) 04:46:160484デフォルトの名無しさん
2007/11/16(金) 05:09:09助かりました!
0485デフォルトの名無しさん
2007/11/16(金) 05:23:020486デフォルトの名無しさん
2007/11/16(金) 05:44:05自分より上の立場の人間が憎いのは分かるよ(笑)
0487デフォルトの名無しさん
2007/11/16(金) 06:56:28/ \
/ ─ ─ \
/ (●) (●) \
| (__人__) | それはない
\ ` ⌒´ ,/
r、 r、/ ヘ
ヽヾ 三 |:l1 ヽ
\>ヽ/ |` } | |
ヘ lノ `'ソ | |
/´ / |. |
\. ィ | |
| | |
0488デフォルトの名無しさん
2007/11/16(金) 07:33:270489デフォルトの名無しさん
2007/11/16(金) 07:35:38それ言ってたね。
―いろいろ非難もされてるようですが
「ああ、あれはぼくに嫉妬してるんです」
とか
0490デフォルトの名無しさん
2007/11/16(金) 10:10:490491デフォルトの名無しさん
2007/11/16(金) 10:21:52>>486の論理に乗る必要なくね?
0492デフォルトの名無しさん
2007/11/16(金) 10:27:13こっちでやれ
http://pc11.2ch.net/test/read.cgi/php/1078991985/
0493デフォルトの名無しさん
2007/11/16(金) 11:28:31キャラ全然違うってw
0494デフォルトの名無しさん
2007/11/17(土) 20:16:15ここを見ながらコマンドプロンプトを操作しているのですが
ダウンロードされる段階まで行っても
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.
と出ます。
意味もそもそも分からないのですが、解決方法教えてください
最新版入れてます。
0495デフォルトの名無しさん
2007/11/17(土) 20:27:32Net::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じゃなくて名前で返すようにって出来ない?
0496デフォルトの名無しさん
2007/11/18(日) 18:19:41例:
http://www.hogehoge.com/index.htmlの最終更新時刻を知る.
LWPモジュールを使って出来そうなんですが...
ご存知の方,ご教授ください.
だそうです♪@404だけれどもね
0498デフォルトの名無しさん
2007/11/18(日) 20:46:54use 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);
}
}
0499デフォルトの名無しさん
2007/11/18(日) 21:31:54おおっ!
ありがとうございます.
LWPでもヘッダから更新時刻を取得できるようなので,こちらも同じことをしてみました.
が,ヘッダにLast Modifiedが付加されない場合もあるので,ムリっぽいです.
必ず,更新時刻を取得できるみたいな方法ないですかねぇ.
0500デフォルトの名無しさん
2007/11/18(日) 21:38:28無いよ
0501デフォルトの名無しさん
2007/11/18(日) 23:42:25catコマンド引数つけて実行したりできる?
0502デフォルトの名無しさん
2007/11/18(日) 23:49:48$programResult = `ls -a /usr`;
print "$programResult¥n";
0503デフォルトの名無しさん
2007/11/18(日) 23:53:43自動的にブラウザを起動し任意のところに書き込むみたいなこともできますか?
ブログを複数やってるんですが、同じ作業をどうにかしたいと思いあちこちみてまわってます。
メールの本文から指定のURL抽出するみたいなこともできればとおもってますが。
0504デフォルトの名無しさん
2007/11/19(月) 00:03:50作ってもらえませんか?
UNIXのcal?とかを使うらしいんですが
0505デフォルトの名無しさん
2007/11/19(月) 00:08:21直接POSTでも投げたら?
多分微妙に板違いだからWebProg板に逝くといいよ
>>504
今日一番ワロタw
0506デフォルトの名無しさん
2007/11/19(月) 00:16:32それくらい自分でできるだろwww
0507デフォルトの名無しさん
2007/11/19(月) 00:31:100508デフォルトの名無しさん
2007/11/19(月) 00:33:450509デフォルトの名無しさん
2007/11/19(月) 00:39:240510デフォルトの名無しさん
2007/11/19(月) 00:50:50心配するな
もったいぶってるんじゃなくて、俺達には出来ないんだ
な、みんな?そうだろ?
0511デフォルトの名無しさん
2007/11/19(月) 00:52:310512デフォルトの名無しさん
2007/11/19(月) 00:56:37引数2個指定すれば普通は年、月で指定できるのに年までしか指定できねぇ
とりあえずヒントやるから自分でがんばれ
#!/usr/bin/perl
open(EXE, "cal 2008|");
while($buf=<EXE>){
print $buf;
}
0513デフォルトの名無しさん
2007/11/19(月) 01:02:380514デフォルトの名無しさん
2007/11/19(月) 01:12:00use Disp::Cal;
$cal = new Disp::Cal;
$cal->setYear(2007);
$cal->setMonth(12);
$cal->output(\*STDIN);
後は任せた
0515デフォルトの名無しさん
2007/11/19(月) 01:13:200516デフォルトの名無しさん
2007/11/19(月) 03:42:14{
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}`);
}
}
0517デフォルトの名無しさん
2007/11/19(月) 03:44:47$cal = new Disp::Cal;
$cal->setYear(2007);
$cal->setMonth(12);
$cal->output(\*STDIN);
__END__
0518デフォルトの名無しさん
2007/11/19(月) 09:59:48$cal->setYear(2007);
$cal->setMonth(12);
$cal->output(\*STDIN);
$cal->output(\*STDIN);
なぜか二重出力される様に改良しました
0519デフォルトの名無しさん
2007/11/19(月) 11:01:30$VERSIONはourのほうがよくね?
0520デフォルトの名無しさん
2007/11/19(月) 12:12:14無視すりゃいいのに。
ここの住人ってお人好しなのか、ただのマゾなのか。
0521デフォルトの名無しさん
2007/11/19(月) 12:52:28罵倒していないで、なぜ無視するべきなのかを説明して説得に勤めること。
0522デフォルトの名無しさん
2007/11/19(月) 16:33:240523デフォルトの名無しさん
2007/11/19(月) 16:39:480524デフォルトの名無しさん
2007/11/19(月) 16:54:47ファイルシステムから全体からcalを探索すればいいんじゃなかろうか。
0525デフォルトの名無しさん
2007/11/19(月) 17:24:47車輪の交換?
0526デフォルトの名無しさん
2007/11/19(月) 23:35:170527デフォルトの名無しさん
2007/11/20(火) 00:07:11(<>) ここにファイル名入れても鳴らないのですが。。。
#!/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>);
0528デフォルトの名無しさん
2007/11/20(火) 01:36:53デバッグしろ
0529デフォルトの名無しさん
2007/11/20(火) 06:42:40ずっと昔の過去スレに似たような質問があって、答えに
見つからんって言われてるんだから、入れればいいじゃん。
http://search.cpan.org/author/SBECK/DateManip-5.42a/
って書かれてたんだけど、リンク切れで分からん。
0530デフォルトの名無しさん
2007/11/20(火) 08:23:13> って書かれてたんだけど、リンク切れで分からん。
↓
バージョンが変わったのかと推測する
↓
検索してみる
0531デフォルトの名無しさん
2007/11/20(火) 17:19:25DateManip って warrick と無関係じゃん、、、
ttp://warrick.cs.odu.edu/warrick.html
斜め読みしても出て来ないし、、、
そもそも494はstrict.pmがねえってエラーで、それって@INCが上手く
設定されてないだけじゃねえの?
0532デフォルトの名無しさん
2007/11/20(火) 19:20:580533デフォルトの名無しさん
2007/11/21(水) 01:19:330534デフォルトの名無しさん
2007/11/21(水) 01:24:360535デフォルトの名無しさん
2007/11/21(水) 01:25:470536デフォルトの名無しさん
2007/11/21(水) 01:38:010537デフォルトの名無しさん
2007/11/21(水) 02:04:410538デフォルトの名無しさん
2007/11/21(水) 16:34:11File::Pathのmkpath
0539デフォルトの名無しさん
2007/11/21(水) 20:55:05shellで言うと、
hoge1.sh &
hoge2.sh &
hoge3.sh &
みたいな感じです。
そして、それぞれのバックグラウンド処理の終了を監視できるといいのですが。
0540デフォルトの名無しさん
2007/11/21(水) 21:25:05fork()
0541539
2007/11/21(水) 21:57:59ありがとうございます。
検索したところ以下のページを発見しました。
ttp://www.stackasterisk.jp/tech/program/perl04_02.jsp
この例だとバックグラウンドで動かしているのはひとつですが、
複数の処理を同時にバックグランドで動かしたい場合はどうしたらいいでしょうか。
0542デフォルトの名無しさん
2007/11/21(水) 22:03:570543デフォルトの名無しさん
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.
0544539
2007/11/21(水) 22:15:32すいません、今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;
}
0545デフォルトの名無しさん
2007/11/21(水) 22:21:23> それとバックグラウンド処理の結果を受け取るにはどうしたらいいでしょうか。
perlipcを読んで、プロセス間通信のモデルと枠組みを理解しろ。
0546デフォルトの名無しさん
2007/11/21(水) 22:43:19今でもベストなのか?
0547デフォルトの名無しさん
2007/11/21(水) 22:48:360549デフォルトの名無しさん
2007/11/22(木) 00:38:52まあそれはともかく>>539にはファイルでやりとりすることをお勧めする。
0550539
2007/11/22(木) 01:14:57シェルは説明の為に例えで書いたことですが、やるとしたらファイルしか思いつきません。
perlだったら他の方法でやり取りできるのかと思って質問させてもらいました。
perlipcをちらっと見ましたが理解するのに時間がかかりそうなので、とりあえずファイルで対応します。
0551デフォルトの名無しさん
2007/11/22(木) 01:52:14ありがとうございます!
自力で作ろうとFile::Basenameまでは触れてました…。
0552デフォルトの名無しさん
2007/11/22(木) 02:49:510553デフォルトの名無しさん
2007/11/22(木) 15:47:20# 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 & 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は入れました。
考えられる要因などありましたら、お教えください。原因解決に提示すべき情報があれば
提示します(他にどのようなものを提示すればよいのか分かっていません…)
この辺りかしら?
0555デフォルトの名無しさん
2007/11/23(金) 07:41:21ttp://rt.cpan.org/Public/Bug/Display.html?id=29733
にて作者本人が同様(554)のケースの人に
「HTML::TreeBuilderをアップグレードしてみ?」
つってるぞ。上記の人はそれで解決。
今回のが解決するかどうかは知らんが、
cpan の当該モジュールの項=> View/Report Bugs
のリンク辺りを踏んで内容を斜め読む事をお勧めする。
0556デフォルトの名無しさん
2007/11/23(金) 16:15:47変数を動的に呼び出したいのですがどうしたらできますか?
例えば、変数$hoge1,$hoge2,$hoge3という変数が3つあるとして
$callという変数に上記3つうち扱いたい変数の変数名を代入します。
$call = 'hoge2';
この後で、$callを使って$hoge2に代入したり読込んだりしたいです。
教えてください、お願いします。
0557デフォルトの名無しさん
2007/11/23(金) 16:38:22変数の「参照」になります。
$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
0558デフォルトの名無しさん
2007/11/23(金) 16:42:08普通リファレンスを使うと思うのだが、どうしてもどうしてもどうしても
どうしてもどうしてもどうしてもどうしても変数名じゃないとダメなのか?
0559デフォルトの名無しさん
2007/11/23(金) 17:16:04お勧めできない(俺が思うに)最悪の方法であるが、シンボリックリファレンスを
用いることにより可能である。
最悪な点
・読みにくい
・判りにくい
・遅い
・時代遅れ
やりかた
$call = 'hoge2'
print ${"$call"};
ハードリファレンスを用いるか、あるいは
%hash = ('hoge1' => 10,'hoge2' => 20,'hoge3' => 30);
$call = 'hoge2;
print $hash{$hoge2};
0560556
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 とかは使わないほうがいいんですかね?
0561デフォルトの名無しさん
2007/11/23(金) 18:10:31use strict;は、使ったほうがよい。この「use strict;」は、「strictプラグマ」などと呼ばれる。
>>559のようなシンボリックリファンレンスという方法(${"$hoge"}というような方法)は、
今は使わないほうが良いとされているので、strictプラグマが使われているとエラーになる。
多分・・・
$hoge = "renhoge";
${"$hoge"}{"key"}
とかやったんじゃないのか?シンボリックリファレンスは使わないほうがいいと思う。
0562デフォルトの名無しさん
2007/11/24(土) 01:54:540563デフォルトの名無しさん
2007/11/24(土) 03:22:310564553
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でした。これが関係あるかは分かりませんが、古い
バージョンに戻すのは他に影響が出そうだし、現在インストール可能な環境を
インストール不可になる危険を冒して検証するのも怖いので、どうしよう
かと思っています…。
0565デフォルトの名無しさん
2007/11/25(日) 07:44:20そっか、力になれなくてスマン。
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の言語環境が英語じゃないとダメってのもあったなあ。
0566デフォルトの名無しさん
2007/11/25(日) 09:32:11fileコマンドだと、画像ファイル(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
それようのモジュールがあるような気はするのですが、見つかりませんでした。
何か良い方法はありませんか。
0567デフォルトの名無しさん
2007/11/25(日) 10:40:03それがどうして問題になるのかわからん。分ければ良いだけのこと。
とまれ、File::MMagicでも読めばなにかわかるんじゃないか?
0568デフォルトの名無しさん
2007/11/25(日) 10:46:21file -i
0569デフォルトの名無しさん
2007/11/25(日) 10:56:47DynaLoderとか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できます。
0570つづき
2007/11/25(日) 10:57:56staticにしたくない(またはできない)場合の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 がありません とか言われてしまう。)
0571デフォルトの名無しさん
2007/11/25(日) 13:15:06Web::Scraper 0.23がでてて、ChangelogによるとテストがこけるのはHTML::TreeBuider::XPathのバグみたい。
0572デフォルトの名無しさん
2007/11/25(日) 14:44:47"LD_LIBRARY_PATH=/usr/local/mysql/lib:$LD_LIBRARY_PATH" make test
で通らないの?
0573570
2007/11/25(日) 15:25:58それが、今やってる環境が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 ・・・’なエラーを吐きます。
0574566
2007/11/25(日) 15:31:21ファイル一覧の付加情報としようと思うので、あまり長いと都合が悪いのです。
File::MMagicを試してみましたが、fileで扱うデータを食わせると同じ結果にしかなりません。当たり前でしょうけど。
あと、Debianでは、File::MMagicで読み込めるmagicファイルのフォーマットが古く、search型の部分でエラーになりました。
>>568
mimeにしちゃうと、情報が減りすぎて。
0575デフォルトの名無しさん
2007/11/25(日) 22:07:08requireで実行されたかそのうファイル内で判断したいのですが、
どのようにしたら良いでしょうか?
# CGIとして呼び出されたときはページを表示し、
# requireで実行されたときはページを表示しないということをやりたいのですが。
0576デフォルトの名無しさん
2007/11/25(日) 22:11:15環境変数で判断できない?
REMOTE_ADDRが設定されていれば、CGIとか。
別のCGIからrequireされたかどうかの判断なら、自分のコマンド名で判断できるかな。
$0をチェック。
0577デフォルトの名無しさん
2007/11/25(日) 23:05:460578575
2007/11/26(月) 02:29:50ありがとうございます。
requireで呼び出しを行ったプログラムがCGIだったせいで、
環境変数系は全滅でしたが、$0で判別することが出来ました _ _
0579デフォルトの名無しさん
2007/11/26(月) 13:25:00長くてちゃんと読んでないので見当はずれだったらごめん
rootで
/etc/ld.so.confにディレクトリ書くか
/etc/ld.so.conf.d/にディレクトリ書いたファイル作って
ldconfig実行する
0580570
2007/11/26(月) 14:33:06やっぱりそれしかないでしょうか?
ごめんなさい、またちょっと長くなりますが、
うちで一晩やってみて、ますますわけが分からなくなった。いったん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!
ここまでは予想通りなんです。でも・・・
0581570
2007/11/26(月) 14:33:39export 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が入ります)
似たような環境の人で、お手すきの方いましたら試してもらえませんか。(そんな人いない?
0583デフォルトの名無しさん
2007/11/26(月) 15:16:440584デフォルトの名無しさん
2007/11/26(月) 16:05:32??? すいません。わかりません。
多分 -Lとは、gccとかのコンパイル時のオプションで、linkまたはlink(lib)pathのことだと思いますが、
-Rってのがわかりません。
gccのオプション一覧で探しましたが見つからず、perlにも、そのようなオプションはないようですが・・・。
0585デフォルトの名無しさん
2007/11/26(月) 16:16:17> cp /usr/local/apache2/lib/* /usr/local/lib/ してから
この辺りちょっと気になる。
linuxはかじった程度だからあってるかどうかあやしいけど、
LD_LIBRARY_PATHをセットしたとしても、.soファイルに静的にリンクしている場合、
コピーしただけじゃリンク先が変わらないから、その辺りが原因じゃないかなぁと思う。
0586デフォルトの名無しさん
2007/11/26(月) 16:23:490587デフォルトの名無しさん
2007/11/26(月) 16:29:39LD_RUN_PATHかLD_LIBRARY_PATHかDT_RUNPATHかDT_RPATHの話か?
0588570
2007/11/26(月) 17:30:10そうなんですか。でも多分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読んだんところ、
コンパイル時に、指定のライブラリパスをバイナリに埋め込むようなんですが、
目的のことと、ちょっと違うような気がしますが、とりあえずもう少し詳しく調べてみます。
0589デフォルトの名無しさん
2007/11/26(月) 18:44:22>>580のtestコードは構文エラー
素直にrpm使えば?
0590570,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に注目してみたわけです。
0591570,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のような結果になるのは当然でした。
今まで色々とアドバイス等、ありがとうございました。
0592デフォルトの名無しさん
2007/11/28(水) 02:43:19.1.3.6.1.2.1.1.1.0 <--> SNMPv2-MIB::sysDescr.0
みたいにOIDの表示形式を変換したいんだけど
0593デフォルトの名無しさん
2007/11/28(水) 10:51:320594デフォルトの名無しさん
2007/11/28(水) 11:06:34自分でfirstというディレクトリを作成し
その中にsecondというディレクトリを作成するにはどうしたらいいですか?
chdirで作業ディレクトリをfirstにうつせば出来るんですが
その後、またもとのディレクトリに戻る方法が分からないため挫折。
0595デフォルトの名無しさん
2007/11/28(水) 11:24:200596デフォルトの名無しさん
2007/11/28(水) 11:45:37>>535-538
0597デフォルトの名無しさん
2007/11/28(水) 12:03:30Thx 解決しました。
0598デフォルトの名無しさん
2007/11/28(水) 18:13:55ディレクトリ作るだけなら>>596でもいいが
これからもプログラミング続けるなら
相対パスでググって出てきたページを100回ほど音読しとけ
0599デフォルトの名無しさん
2007/11/28(水) 18:30:03自分で今作ったディレクトリなら大丈夫だとは思うがね。
fchdirがあるシステムなら、カレントディレクトリを開いてファイルハンドルを保存、戻りたくなったら
とっといたファイルハンドル指定でchdirするのが楽ですな。(5.8.8以降)
0600デフォルトの名無しさん
2007/11/28(水) 22:55:12どうやってチェックするのでしょうか?
<STDIN>とかTerm::Readkeyだと、入力待ちになってしまいますよね。
動作を止めずに、特定キーが押されている時だけ分岐したいのですが。
0601デフォルトの名無しさん
2007/11/28(水) 23:06:57調べてみてNet::SNMPにtranslateってものがあったけどOIDの変換はなさそうだった
Net::SNMPのリクエストで使うOIDを.1.3.6.*みたいな数字形式じゃなくて
SNMPv2-MIB::sysDescr.0みたいな形で指定したかったんだけど何か無いんだろうか
0602デフォルトの名無しさん
2007/11/28(水) 23:50:07orz
ActivePerl5.8インストールしようとしたら
Indalid Drive:G
とか出てくる
ちなみに外付けを必要によって接続したりしなかったりで使ってるのが原因ぽいです
対処法をだれか・・・
0603デフォルトの名無しさん
2007/11/29(木) 01:02:00subst g: c:\
とでもやってみたら?
それで回避できるのか分からんが。
0604デフォルトの名無しさん
2007/11/29(木) 10:05:08CPANのSNMPかSNMP::MIB::Compilerあたりが使えそうだが
0605デフォルトの名無しさん
2007/11/29(木) 17:56:30Excelで一つのセル内に改行が入っていた場合、CSVに書き出すと
abcd,efgh,"ij
kl"
ABCD,"EF
GH",IJKL
このようにダブルクォーテーションで囲まれた中に改行がそのまま入ります。
全体を配列等に格納するまえに、こういった改行を別な文字(例えば<br>)に置き換えておこうと思い
正規表現でどうにかしようと考えました。
セル中の改行が一つなら
s/"(.*?)¥n(.*?)"/$1<br>$2/g
これでどうにかなるのですが、改行が複数の場合どうすれば良いのでしょうか。
0606デフォルトの名無しさん
2007/11/29(木) 18:06:370607デフォルトの名無しさん
2007/11/29(木) 18:20:09検索する文字列にCtrl+Jな
0608デフォルトの名無しさん
2007/11/29(木) 18:31:49たしか Windows の改行コードは \r\n の2バイトで
セル内の折り返しは \r の1バイトだったと思います。
この違いを利用して \r を <br> に置換するだけ
chomp;
s/\r/<br>/g;
というチョ〜手抜きでも実用上はOKじゃないかな。
神経質な人にはオススメできませんけど。
0609デフォルトの名無しさん
2007/11/29(木) 19:05:16そんなこと考えるよりText::CSV_XSインストールしてgetline使え。
0610605
2007/11/29(木) 19:32:31>>606>>609
まさにうってつけのモジュールがあるんですね。
調べてみます。
>>608
そんな構造になっていたとは。試してみたいと思います。
>>607
なるべくエクセル側では手間のかからないようにしたかったのです。
0611デフォルトの名無しさん
2007/11/29(木) 23:43:42下のようにしても受け取るのができませんでした。
配列と文字列の関係を維持したまま引き渡すことは可能でしょうか?
&array_test(@arr,$str);
sub array_test {
@arr=@_[1];
$str=$_[2];
}
0612デフォルトの名無しさん
2007/11/29(木) 23:49:47ppmで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
同じ症状のひといますか?
0613デフォルトの名無しさん
2007/11/29(木) 23:51:02sub array_test {
@arr=@$_[0];
$str=$_[1];
}
0614デフォルトの名無しさん
2007/11/30(金) 00:00:29Windows環境?
0615デフォルトの名無しさん
2007/11/30(金) 01:28:470616デフォルトの名無しさん
2007/11/30(金) 01:43:48どうすればいいでしょうか?
0617デフォルトの名無しさん
2007/11/30(金) 01:48:29for文で回しながら1個ずつくっつける。
0619デフォルトの名無しさん
2007/11/30(金) 02:09:34$a = 'AAA'
$n = 10;
$a = ’ ’ x $n . $a;
0621617
2007/11/30(金) 02:37:32そんなのあったのか。勉強になった、ありがとう。
0622デフォルトの名無しさん
2007/11/30(金) 02:51:31substr($a, 0, 0) = " " x $n;
0623デフォルトの名無しさん
2007/11/30(金) 02:58:03> すみません、動詞を三人称単数現在にするモジュールってありますか?
lingua stemあたりでCPANを検索しる
0624612
2007/11/30(金) 03:58:40yamlファイルのデータのコロン(:)の後に半角スペースがなかっただけでした。
0625デフォルトの名無しさん
2007/11/30(金) 08:34:59$a ~= s/^/ /gm;
0626625
2007/11/30(金) 08:36:410627デフォルトの名無しさん
2007/11/30(金) 11:30:31「->」演算子は、配列/ハッシュリファレンスにデリファレンスを
行う際に使用する演算子と理解しています。
しかし、パッケージ名に対して使用すると、
対象パッケージに含まれる関数を呼び出すこともできます…。
これは、
「->」演算子は、
・配列/ハッシュリファレンスに対して使用するとデリファレンスを行う
・パッケージ名に対して使用すると関数の呼び出しを行う
と、理解すればいいのでしょうか?
※「->」演算子は、"配列/ハッシュリファレンス"に使用する場合と
"パッケージ名"に対して使用する場合では、全く別ものということでしょうか?
以上、何かレス頂けたらありがたいです。
0628デフォルトの名無しさん
2007/11/30(金) 11:41:21デリファレンスは「配列/ハッシュ」に限らない
関数呼び出しは「パッケージ名」に限らない
0629デフォルトの名無しさん
2007/11/30(金) 11:50:06左側の形で決まる。詳しくはマニュアル読め。
デリファレンス
...->[...]
...->{...}
...->(...)
メソッド呼び出し
...->method_name
...->$scalar_variable
0630627
2007/11/30(金) 11:50:38早々のレスありがとうございます。
>>デリファレンスは「配列/ハッシュ」に限らない
そのようですね。
関数へのリファレンスをデリファレンスすることもできるようですね。
>>関数呼び出しは「パッケージ名」に限らない
これは、
Perlにおけるクラスインスタンス(リファレンス)に対しても使用することができ、
関数の呼び出すことができる
ということをおっしゃっているのでしょうか?
そもそもなのですが、「->」演算子って、なんなのでしょうか?
…続く
0631627
2007/11/30(金) 11:54:15レスありがとうございます。
続きを書こうとしたところで、解答をいただけたので
やめておきます。
左辺のきまるのですね^^
と、いうことは、「->」演算子は、
「->」の左辺によってまったく異なる動きをする
と解釈してよろしいのですよね・・・
マニュアル・・・
Perlの言語仕様が日本語で書かれているサイト・・・
探してみたのですが・・・
もう少しさがしてみます。
ありがとうございました。m(_ _)m
0632629
2007/11/30(金) 12:07:360633デフォルトの名無しさん
2007/11/30(金) 15:56:51左辺がパッケージ名ならクラスメソッド。インスタンス変数ならインスタンスメソッド。
0634デフォルトの名無しさん
2007/11/30(金) 17:22:22あるバイナリファイル(test1)をLinuxのコマンド上で
# od -a test1 > test2
そして
# od -f test1 > test3
としてtest2,test3のファイルが生成されるのを同じようにPerlでプログラム
するにはどのようにしたらよろしいのでしょうか。
unpackなどを使ったらよろしいのでしょうか。
ご存知の方がいらしたらよろしくお願いしたいと思います。
0635デフォルトの名無しさん
2007/12/01(土) 04:58:30system "od -f test1 > test3";
0636636
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 を使いたいと思っています。
0637デフォルトの名無しさん
2007/12/01(土) 11:02:19>>636
pythonだけど参考になるかも。
http://www.atransia.co.jp/home/fukamachi/Diary/2006/01/15/
0638デフォルトの名無しさん
2007/12/01(土) 14:20:09Mecabのバージョンは?
WindowsでMecab使ったことあるけれど、
インストールで躓いた記憶なし。
0639636
2007/12/01(土) 16:17:21Mecab のバージョンは 0.96 (最新)です。
0640デフォルトの名無しさん
2007/12/01(土) 16:35:11->{ EXPR } で一つの後置演算子
->IDENTIFIER で一つの後置演算子
とでも捉えればいいんじゃない?
>「->」演算子は、配列/ハッシュリファレンスにデリファレンスを
>行う
$a = ['unko'];
print(($a->)[0]);
こう出来るのであればともかく、その捉え方は違う気がする。
0641デフォルトの名無しさん
2007/12/01(土) 16:36:200642デフォルトの名無しさん
2007/12/01(土) 17:01:54別の特定モジュール(これをBとする)がロードされていなければ、
そこにBをロードする、というコードを書きたいのですが、
ロード先にBがロードされているかどうか、Aで調べるには
どういうふうに書けばいいですか?
Bのメソッドをcanで調べるぐらいしか思いつかないんですが・・・
0643636
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を公開されている神」に感謝です。
0644デフォルトの名無しさん
2007/12/01(土) 22:14:31${A::}{B::}
でいけると思うけど、今perlの環境がないので未確認。
0645デフォルトの名無しさん
2007/12/02(日) 01:15:49print encode('utf8', 'う');
としても う と表示されエンコードしてくれません。
Encodeのバージョンは2.23です。
何か原因が考えられますか?
0646645
2007/12/02(日) 01:20:04>>645は↓が正しいです。
use Encode;
print encode('utf8', '&#x3046;');
としても &#x3046; と表示されエンコードしてくれません。
Encodeのバージョンは2.23です。
何か原因が考えられますか?
0647デフォルトの名無しさん
2007/12/02(日) 01:23:390648デフォルトの名無しさん
2007/12/02(日) 02:20:54use Encode;
print encode('utf8', "\x{3046}");
>何か原因が考えられますか?
>645 の脳が足りない、……とまでは言わないが色々と理解が足りないと思う。
0649デフォルトの名無しさん
2007/12/02(日) 09:19:41何がやりたいかを書いた方が、適切な返事がもらえると思われ。
0650デフォルトの名無しさん
2007/12/02(日) 17:07:520651デフォルトの名無しさん
2007/12/02(日) 17:11:03my $str = shift;
$str =~ s/([^\w ])/'%'.unpack('H2', $1)/eg;
$str =~ tr/ /+/;
return $str;
}
0652デフォルトの名無しさん
2007/12/02(日) 17:12:56print url_encode('うんこ');
0653デフォルトの名無しさん
2007/12/02(日) 17:40:09PerlでImageMagickを使って、画像の拡大や縮小を試しているのですが、
Resize()やScale()など、拡大縮小にも様々な方法があり、どれを使うべきか迷っています。
なるべくきれいに、画像のサイズ変更のみをしたい場合はどれを使うべきなのでしょうか?
0654デフォルトの名無しさん
2007/12/02(日) 17:49:14いいんじゃないかな
0655デフォルトの名無しさん
2007/12/02(日) 17:57:25縦横比を変化させずに、横幅を 120 にするには、
my $ImageMagick = Image::Magick->new;
$ImageMagick->Read("unko.jpg");
$ImageMagick = $ImageMagick->Transform(geometry=>120);
$ImageMagick->Write("gif:unko.gif");
0656デフォルトの名無しさん
2007/12/02(日) 18:03:09「 PerlMagick CGI 」でググれ。
「きれいに」 って言うのは、縦横比が歪まないようにって事でOK?
画質はどうやっても変わらんと思うよ。
0657デフォルトの名無しさん
2007/12/02(日) 18:27:42最も単純なのはジャギーが出て、画質が悪いように見える。
0658653
2007/12/02(日) 19:07:18レスありがとうございます。
縦横比はそのままでジャギーなどがあまり出ない方法が良いのですが、
色々試してみたところ、Resize()でも比率そのままできれいに出来ましたので、
とりあえずResize()を使っていこうと思います。
0659デフォルトの名無しさん
2007/12/02(日) 23:57:59ImageMagick(PerlMagick)でリサイズするときに、アルゴリズムって選べたっけ。
0660デフォルトの名無しさん
2007/12/03(月) 00:27:39SampleとScaleとResizeだと画質が違ったはず
0661デフォルトの名無しさん
2007/12/03(月) 02:51:05別人だが、そんな方法があったのね。
自前でサイズ測って拡縮してた。
0662659
2007/12/03(月) 19:43:08そいや、Sampleだと細かい指定ができずに画質も汚かった気がする。
昔作ったリサイズスクリプトでは、Resize()を使ってた。
0663661
2007/12/03(月) 19:51:10縦横ともに上限があって、その中に収まるように縮小だから自前で計算してたんだった。
0664デフォルトの名無しさん
2007/12/04(火) 11:36:390665デフォルトの名無しさん
2007/12/04(火) 12:19:030666デフォルトの名無しさん
2007/12/04(火) 12:28:290667デフォルトの名無しさん
2007/12/04(火) 23:40:460668デフォルトの名無しさん
2007/12/06(木) 18:08:53今のyahoo chatで使えるんでしょうか?
使った経験のある方います?
CPANに上げたのが02 Dec 2002になってるんですけども…。
0669デフォルトの名無しさん
2007/12/06(木) 18:30:32使ってみればいいじゃん。
0670デフォルトの名無しさん
2007/12/07(金) 03:21:48open (FH,$file);
binmode FH;
read (FD,$hoge,-s $file);
と
open (FH,$file);
binmode FH;
undef $/;
$hoge = <FH>;
って何か差はあります?
0671デフォルトの名無しさん
2007/12/07(金) 08:53:32>Perl5.005-では、未定義にすると空のファイルからの最初の読み込み時には空文字列が得られ、次回からは未定義値が得られる
0672デフォルトの名無しさん
2007/12/07(金) 13:03:28-s は stat してるので、stat でサイズを返さないファイルだと動かない。
undef $/ は read() で eof になるまで読むからdeviceとかも動きそう。
0673デフォルトの名無しさん
2007/12/07(金) 19:15:27チェックするにはどうすればいいでしょうか?
3文字連続した日本語が入っていなければ、スパムとみなしたいのです。
if ( $word !~ [シフトjisのコード][シフトjisのコード][シフトjisのコード]) {
print "これはスパム";
}
みたいな感じでしょうか?
0674デフォルトの名無しさん
2007/12/07(金) 22:33:43if ($word !~ m/[シフトjisのコード]{3}/) {
print "スパム";
}
{3} を使えば3回連続という意味になるよ。
0675デフォルトの名無しさん
2007/12/07(金) 23:46:29ありがとう。参考になりました
内部的にはread()なんだね
0676デフォルトの名無しさん
2007/12/08(土) 01:14:41こうするとSJIS以外も対応できそう
@mb_strings = split /[ -~]+/, $word;
unless(grep { length $_ > 6 } @mb_strings){
print "これはスパム";
}
0677676
2007/12/08(土) 01:17:30もう一ひねり入れると気持ち悪くなるし…。
0678デフォルトの名無しさん
2007/12/09(日) 23:02:26変わると聞いたのですが、実際やってみても
毎回同じ順番になってしまいます。
同じ順番になる条件や環境ってあるのでしょうか?
0679デフォルトの名無しさん
2007/12/09(日) 23:13:20perldoc -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).
0680デフォルトの名無しさん
2007/12/09(日) 23:27:45ランダムになるはずですよね…
%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
0681デフォルトの名無しさん
2007/12/09(日) 23:35:53> ランダムになるはずですよね…
毎回異なるわけではない
0682デフォルトの名無しさん
2007/12/09(日) 23:39:00なるほど。
しかし、10回やっても、20回やっても
すべて同じになってしまいます。
0683デフォルトの名無しさん
2007/12/09(日) 23:50:48>>679を10回も20回も読め
0684デフォルトの名無しさん
2007/12/09(日) 23:53:15均一なランダムになるものとは思えん。
0685デフォルトの名無しさん
2007/12/10(月) 00:12:260686デフォルトの名無しさん
2007/12/10(月) 00:13:28適当な順番で呼び出されるけど
%LISTの内容が同じだったら、
呼び出される順番は常に同じ?
0687デフォルトの名無しさん
2007/12/10(月) 00:31:32>>679
文盲ばかりのスレはここですか。
0688デフォルトの名無しさん
2007/12/10(月) 00:33:55実装することを考えれば、何がrandom orderで、何が固定されるかくらいわかるだろうに。
0689デフォルトの名無しさん
2007/12/10(月) 00:43:20ララアは賢いな
0690デフォルトの名無しさん
2007/12/10(月) 00:50:500691デフォルトの名無しさん
2007/12/10(月) 11:47:060692デフォルトの名無しさん
2007/12/10(月) 20:08:49だから仕様上、同じになっても違っていてもおかしくはない。
ほんとにどうなっているのか知りたければ、ソースでも嫁。
0693デフォルトの名無しさん
2007/12/10(月) 20:39:010694デフォルトの名無しさん
2007/12/10(月) 20:42:180695デフォルトの名無しさん
2007/12/10(月) 23:11:27それと、サブルーチンの宣言と内容は使用するプログラム内で、
サブルーチン使用箇所より上の行なら構わないんですか?
0696デフォルトの名無しさん
2007/12/10(月) 23:36:47http://www.kt.rim.or.jp/~kbk/perl5.005/perlsub.html
0697デフォルトの名無しさん
2007/12/11(火) 00:42:26ありがとうございました
知りたい範囲のことはわかりました
0698デフォルトの名無しさん
2007/12/11(火) 15:03:34コマンドラインで
test.pl
なら標準出力、「-o ファイル名」を付けたらファイルに出力というプログラムを作ろうと思ってます
で、この場合の書き方ってどうするのがいいものですかね?
オプションにありなしをGetopt::Longで拾って
if (オプションあり) {
open my $wfh, '>', ファイル名;
print {$wfh} '出力';
close $wfh;
}
else {
print '出力';
}
ってやろうとしたのだけど、一般的にもっといい方法あるのかな?と。
あと、こういうことを調べたい時に何で調べると良いか誰か知ってたらヒントください。
0699デフォルトの名無しさん
2007/12/11(火) 15:57:51> あと、こういうことを調べたい時に何で調べると良いか誰か知ってたらヒントください。
同じようなことをやっているプログラムを読む
0700デフォルトの名無しさん
2007/12/11(火) 16:03:05$wfh = *STDOUT;
print $wfh '出力';
0701デフォルトの名無しさん
2007/12/11(火) 16:09:57my $file = '-';
if (オプションあり) {
$file = 'ファイル名';
}
open my $wfh, ">$file";
print '出力';
close $wfh;
0702698
2007/12/11(火) 16:26:57>>699
おぉ。CPANを漁ったりして中身を見る?
>>700
分岐はどこですれば良いですか?
openしちゃうとファイル名のファイルが出来ちゃうかファイルハンドラの前でやる?
>>701
いけた!3つの引数のopenでもいけました。
print {$wfh} "出力"
ですよね?
0703デフォルトの名無しさん
2007/12/11(火) 20:14:01つまり
test.pl -o ファイル名
とするかわりに
test.pl > ファイル名
とすればいいだけ。中身はただの print 文だけでいいんだけど。
0704698
2007/12/11(火) 20:26:15cronで自動的にアクセスログを処理しようとしたのでファイル名も自動で作りたかったんですよね
で、スクリプトを1つで完結させたいなと思い、perlの中に書いてしまおうかなと。
ただ、標準出力で試す時もあるだろうから、そのための道も用意しておきたかったんです。
0705デフォルトの名無しさん
2007/12/11(火) 20:53:09print {$wfh} "出力"
このブレースは何のためにつけてるの?
というか、どこで覚えたの?
0706デフォルトの名無しさん
2007/12/11(火) 21:51:52http://search.cpan.org/~nwclark/perl-5.8.8/pod/perlfunc.pod#print_FILEHANDLE_LIST_
まぁ普段から付けてるのは冗長だな。
0707デフォルトの名無しさん
2007/12/11(火) 22:20:42それはしってるにょ。
>>702が盲目的に{}をつけてることを指摘したかっただけ。
0708デフォルトの名無しさん
2007/12/12(水) 14:47:39どなたかご教示願えたらと思います。
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を使って
も私の能力不足で上手いようにはいきません。
申し訳ございませんが、どなたかお教え頂けたらと存じます。
0709デフォルトの名無しさん
2007/12/12(水) 15:08:590行目 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
0710デフォルトの名無しさん
2007/12/12(水) 15:28:26my @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じゃないものではじまる名前があったときはどうなっても知らん。
0711デフォルトの名無しさん
2007/12/12(水) 15:57:01/(?<=no )(?!no )(.+?)(?=no )/g
とマッチ
0712デフォルトの名無しさん
2007/12/12(水) 16:01:27open(IN,"hoge.txt");
undef $/;
$_ = <IN>;
s/\n/ /g;
@list = /(?<=no )(?!no )(.+?)(?=no )/g;
0713デフォルトの名無しさん
2007/12/12(水) 16:35:06A〜Rは?
0714デフォルトの名無しさん
2007/12/12(水) 16:36:000715デフォルトの名無しさん
2007/12/12(水) 17:40:27みなさま、いろいろご教示ありがとうございます。
説明不足で大変申し訳ございません。
すべてを配列として読み込んでjoinした後、(no)+で区切って配列化すると、
実際の名前の部分(上記の大文字の部分)にn oという文字が入っていた場合、
名前のその部分が削られてしまって、正しく名前が抽出出来なくなる問題が
あります。(必ずしもA B C D . . .ではないです。すみません)
noは必ず1フィールドにnoですが名前は1フィールドに1文字で任意です。
説明不足またはご指摘とは違っていたら申し訳ございません。
0716デフォルトの名無しさん
2007/12/12(水) 17:45:320717デフォルトの名無しさん
2007/12/12(水) 18:11:410718デフォルトの名無しさん
2007/12/12(水) 21:28:49何かのログだと思うけど、
普通に行くならこんな方法。
1行ずつ読んでって先頭がnoじゃなければ前のレコードにくっつける
くっつけた状態で1行の処理を始める
もしそれがCSVならもっとまともな方法がある
0719デフォルトの名無しさん
2007/12/12(水) 23:41:32英字以外を外せば完成じゃん
0720デフォルトの名無しさん
2007/12/13(木) 11:58:19use 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);
0721デフォルトの名無しさん
2007/12/13(木) 12:26:410722デフォルトの名無しさん
2007/12/13(木) 13:49:08分かりやすいようにifとかnextとか使って書いてみたんだが
0723698
2007/12/13(木) 13:53:25> print {$wfh} "出力"
> このブレースは何のためにつけてるの?
亀レスでごめん。Perlベストプラクティスで見たような気がする。
普通の変数を出力しようとしてるのか判断がすぐつくようにとか。
今手元にないからもしかしたら勘違いしてるかもだけど。
0724デフォルトの名無しさん
2007/12/13(木) 14:33:37open my $fh , "dump.txt";
my @data;
while(<$fh>){
push(@data,split(/\s/));
}
print join("-",@data),"\n";
print join("",grep(!/no/,@data[8..22]));
0725デフォルトの名無しさん
2007/12/13(木) 17:26:48ものぐさなもんでタブばっかだ…orz
0726デフォルトの名無しさん
2007/12/13(木) 18:02:13任意の時間ID(年月日時分秒の14桁で、例えば20071213123401)を、
UTC(unixtime)に変換する方法を教えてくださいませ。
Time::Localは使えません。
どうぞ、よろしくお願いしますm(__)m
0727デフォルトの名無しさん
2007/12/13(木) 18:41:170728デフォルトの名無しさん
2007/12/13(木) 19:10:09use POSIX; でチャレンジしてみます
0729デフォルトの名無しさん
2007/12/13(木) 23:09:08ActivePerl 5.8.x を知る上でのお勧め書籍を教えてください。
C/C++ 上がりなんで、差分について詳細に記載があるものが希望です。
0730デフォルトの名無しさん
2007/12/14(金) 00:43:07Perlの文法とか、そーゆーのとは違うぜ。
0731デフォルトの名無しさん
2007/12/14(金) 00:51:190732デフォルトの名無しさん
2007/12/14(金) 02:52:26とほほとか見てなんとかなったっよ。
0733デフォルトの名無しさん
2007/12/14(金) 05:20:38last next if elsif とかに、「C経験者は間違えないように!」って書いてる本はあるな。
0734デフォルトの名無しさん
2007/12/14(金) 08:29:27これでも読んどけ。
ttp://www.uopmu.ees.osakafu-u.ac.jp/~yabu/soft/perl.html
0735デフォルトの名無しさん
2007/12/14(金) 10:10:370736デフォルトの名無しさん
2007/12/14(金) 20:47:190737729
2007/12/14(金) 23:20:23ありがとうございました。
Perl は、いまいち把握していないところが多いので、C風にクドクドと
printf("%s%s",$foo,$bar);
なーんてことをしてしまったりしますが、このサイトがあればなんとかなりそうです。
ところで、最近はピリオドで繋ぐ技を身に付けました。
print $foo.$bar;
さいきんは関数呼び出しに悩む日々です。
ポインター無しに関数への配列渡しをどうすればよいか、とか
構造体はどうやって実現すべきか、などと悩みます。
たぶん Perl 風のエレガントな表記法があるのでしょう。
0738デフォルトの名無しさん
2007/12/15(土) 00:05:52配列渡しは、以下のようにやる。適当に書いたから、エラーになるかもしれんけど。
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でできるけど、結構めんどくさい。
0739デフォルトの名無しさん
2007/12/15(土) 18:23:03135 とプリント文で出力したいんですけど、
どうすればいいか教えてもらえませんか?
0740デフォルトの名無しさん
2007/12/15(土) 18:41:35print $num-0;
0742デフォルトの名無しさん
2007/12/17(月) 19:43:15良い感じの擬似乱数を出したいのですけども、
srandに渡す種はtimeで良いのでしょうか?
0743デフォルトの名無しさん
2007/12/17(月) 21:11:09http://perldoc.jp/docs/perl/5.8.4/perlfunc.pod#item_srand_EXPR
0744デフォルトの名無しさん
2007/12/18(火) 12:41:51ありがとうございます。
頻繁に呼び出す予定ので
srand(time ^ $$)
はやめておいて、かと言って
srand (time ^ $$ ^ unpack "%L*", `ps axww | gzip`)
では時間がかかり過ぎるので、
結局、
srand(time ^ ($$ + ($$ << 15)))
にするとこで落ち着きました。
0745デフォルトの名無しさん
2007/12/19(水) 00:27:34乱数の種にPIDを入れてるから毎回違う値がほしいんだろうけど、わざわざ種を指定するメリットは必ず同じパターンのランダムになるってだけだと思う。>>743のリンク先を読んだなら、普通はsrand()はいらないって理解できると思うんだけど。
それとも、Perlのバージョンが古いから自分で種を与えないといけないってこと?
0746742
2007/12/19(水) 00:40:52Math::Random::MTを使ってメルセンヌ・ツイスタで擬似乱数を作る場合は、
乱数種の設定が必須だからこういう風にしてみました。
線形合同法を使っているcore perlのrand関数は使いたくなかったのです。
下位ビットを捨てたりなんだり工夫すればcore perlのrand関数でもある程度きちんとした乱数も作れるんでしょうけども、
今回はメルセンヌ・ツイスタで作ってみたかったのです。
0747デフォルトの名無しさん
2007/12/19(水) 02:49:33あとはよきにはからってくれたとおもうんだけど。
0748デフォルトの名無しさん
2007/12/19(水) 03:25:460749デフォルトの名無しさん
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
と出力されるにはどのような記述があるのでしょうか?
恐縮ですが、どなたかご指導願えたらと思います。
0750デフォルトの名無しさん
2007/12/19(水) 19:08:100751デフォルトの名無しさん
2007/12/19(水) 19:11:450752デフォルトの名無しさん
2007/12/19(水) 19:43:02eq 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";
}
}
0753デフォルトの名無しさん
2007/12/19(水) 19:48:090754デフォルトの名無しさん
2007/12/19(水) 19:58:150755デフォルトの名無しさん
2007/12/19(水) 20:28:530756デフォルトの名無しさん
2007/12/19(水) 20:31:460757デフォルトの名無しさん
2007/12/20(木) 00:33:12パスを渡してしまうと、その時点でperlが終了してしまいます。
$target_text = shift @ARGV; #結果ファイルの指定先パスを格納(*.txt)
.....#処理、書き込み、FHクローズ
eval exec ($target_result." &"); #ファイルは開くが、スクリプトも終了してしまう
eval で囲ってあげても終了してしまいます。Windows環境で上のコマンドを実行するのはムリでしょうか。
よろしくお願いいたします。
0758デフォルトの名無しさん
2007/12/20(木) 00:52:59perldoc -f exec
嫁
0759デフォルトの名無しさん
2007/12/20(木) 00:54:53普通は spawn してから exec します。
もっと簡単なので system を使うという手もあります。
0760デフォルトの名無しさん
2007/12/20(木) 01:03:13ありがとうございました。初めは system でやってたのですが、対象ファイルを開いていると
エディタの「現在開いています...」アラートメッセージ (とか秀丸のアレとか) と、ファイルハンドルの取り合いになって
TKがフリーズしてしまうのです。spawn 試してみます。
>>758 「perldoc -f exec」はもう一度読ませていただきました。ありがとうございました。
0761デフォルトの名無しさん
2007/12/20(木) 08:55:36> Perl 5.10.0 がリリースされましたが一言どうぞ
もう安楽死させてあげたらと思った。
0762デフォルトの名無しさん
2007/12/20(木) 11:10:25Win32で&とか付けても意味なくね?
"start " . $target_result
のほうがいいかもよ。
0763デフォルトの名無しさん
2007/12/20(木) 17:34:07sayとかswitchとか//演算子とか、、、
こんなの5.6あたりで実装しとくか、perl6まで実装しないかの二択だろ?
@+,@-,(?{})を捨てちゃうのも個人的には×だな。
過去スクリプトの見直しをせにゃならんかもしれん、、、
0764デフォルトの名無しさん
2007/12/20(木) 23:47:38後半はあんたの読み間違いじゃないんかい?
readdirやglobを使ってるWinユーザは大騒ぎになりそうな仕様に読めるが、
大丈夫なんだろうか?
0765デフォルトの名無しさん
2007/12/21(金) 01:48:430766デフォルトの名無しさん
2007/12/21(金) 01:50:150767デフォルトの名無しさん
2007/12/21(金) 02:10:27どなたか正しいインストールの手順を教えていただけないでしょうか?
以下に私が行った手順を書いておきます。以下の記事を参考にしました。
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
としたのですが、エラーがでてしまいます。
0768デフォルトの名無しさん
2007/12/21(金) 02:15:40t/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
0769デフォルトの名無しさん
2007/12/21(金) 10:12:23> undefined symbol: CLUTO_S_BuildTree at /usr/lib/perl5/5.8.8/i386-linux-thread-multi/DynaLoader.pm line 230.
0770デフォルトの名無しさん
2007/12/21(金) 20:15:210771デフォルトの名無しさん
2007/12/21(金) 20:31:43今度こそ絶命してくれよ。
しかし、過去の法則からして、そろそろ誰かが爆発的に流行する何かを作るだろうねw
無理矢理蘇生させてしまって、人類の負の遺産がいつまで経っても廃棄処分できないw
0772デフォルトの名無しさん
2007/12/21(金) 20:35:060773デフォルトの名無しさん
2007/12/22(土) 08:52:56生成したのですが、実行すると
"Don't know how to handle magic of type \156 at ./a.out line 2."
とエラーが出ます。
ぐぐってもperldiagのページくらいしかひっかからないのですが、どのように
調べて直していけばいいでしょうか?エロいひと教えて!
0774デフォルトの名無しさん
2007/12/22(土) 19:28:14http://estructura.la.coocan.jp/calculator.cgi
0775デフォルトの名無しさん
2007/12/22(土) 19:40:010776デフォルトの名無しさん
2007/12/22(土) 19:49:33電卓は簡単なものだとばかり思っていたが、半日もかかって鬱だった。
つことで、ちょっと現実逃避しかけてたマジモンの制作に取り掛かる。
0777デフォルトの名無しさん
2007/12/22(土) 20:45:140778デフォルトの名無しさん
2007/12/22(土) 20:59:140779デフォルトの名無しさん
2007/12/22(土) 23:56:070780デフォルトの名無しさん
2007/12/23(日) 12:07:07正規表現のおまけに言語がついているような言語なのに、
MS .netに仕様面で負けてるとこがあっちゃかっこ悪いもんね。
0781デフォルトの名無しさん
2007/12/23(日) 15:52:23fsockopen
0782デフォルトの名無しさん
2007/12/23(日) 19:04:560783デフォルトの名無しさん
2007/12/23(日) 21:03:10それはないわww
0784デフォルトの名無しさん
2007/12/24(月) 00:11:530785デフォルトの名無しさん
2007/12/24(月) 01:43:370786デフォルトの名無しさん
2007/12/24(月) 10:31:48それ、viじゃないん?
0787デフォルトの名無しさん
2007/12/24(月) 12:21:45ed -> ex <-> vi
0788デフォルトの名無しさん
2007/12/24(月) 17:12:28ed→vi
↓
ex→vedit
じゃなかったっけ?それってSunOSだけ?
0789デフォルトの名無しさん
2007/12/24(月) 17:41:270791デフォルトの名無しさん
2007/12/24(月) 18:50:29作ったスクリーンエディタがvi、じゃねーの?
exはviの一部にはなっちまったが元々ex自体はあったはず
0792デフォルトの名無しさん
2007/12/24(月) 19:36:12> edを元にラインエディタexを作ってた奴が
× edを元
○ emを元
0793デフォルトの名無しさん
2007/12/24(月) 20:00:230794デフォルトの名無しさん
2007/12/24(月) 20:06:24かぶりつきました。
0795デフォルトの名無しさん
2007/12/24(月) 21:34:04あの時のおまえは少女の様な目をしていたよ。
0796デフォルトの名無しさん
2007/12/24(月) 21:48:450797デフォルトの名無しさん
2007/12/25(火) 01:01:120798デフォルトの名無しさん
2007/12/25(火) 07:44:20?
0799デフォルトの名無しさん
2007/12/25(火) 10:24:490800デフォルトの名無しさん
2007/12/25(火) 11:00:050801デフォルトの名無しさん
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); #ロック解除後にファイル削除するのでマズそう
0802デフォルトの名無しさん
2007/12/25(火) 22:14:34>801の最後にあるソースは、Prog2のイメージです。
0803デフォルトの名無しさん
2007/12/25(火) 22:50:33ロック用のファイルを別に用意すればいい。
0804デフォルトの名無しさん
2007/12/25(火) 23:07:52具体的にはどういうことでしょうか?
昔懐かしロックファイル方式とか、そういう話?
0805デフォルトの名無しさん
2007/12/25(火) 23:21:00消してしまうからにはロックのしようがない
0806デフォルトの名無しさん
2007/12/25(火) 23:30:310807デフォルトの名無しさん
2007/12/26(水) 02:25:14prog2のcloseとunlinkの順を逆にすればうまくいきそうだけどな。
まぁ、ロックファイル作るのが確実だが。
0808デフォルトの名無しさん
2007/12/26(水) 11:57:07何故だっ!?
0809デフォルトの名無しさん
2007/12/26(水) 12:06:38UNIX系ならそれでいいけどWindowsだとだめだったきがす
元の質問者がどの環境を対象にしてるのかわからんけんど
0810デフォルトの名無しさん
2007/12/26(水) 13:44:220811デフォルトの名無しさん
2007/12/26(水) 14:20:00おもしろいのは否定しないが、実用にするなら手堅くロックファイルに
しとけ。
flockを使った排他制御でflock対象のファイルを削除するとだいたい
以下のようなパターンにはまって終わる。
Prog2 open
Prog1 open
Prog2 flock
Prog2 処理
Prog2 unlink
Prog2 close
Prog1 flock ← 既に開いたファイルはunlinkされてもアクセスできる
Prog1 処理 ← 他の誰もアクセスできないファイルにむなしく書き込むのみ
これでめでたくデータ消失w
0812デフォルトの名無しさん
2007/12/26(水) 19:47:310813デフォルトの名無しさん
2007/12/27(木) 01:23:380814デフォルトの名無しさん
2007/12/29(土) 16:24:53Unicodeに対応したのと、新しい正規表現が追加された
((?-n)、(?+n)、(?(-n)、(?(+n)、\k{name}、\g{name}、\K、(?|、\h、\H、\v、\V)
という事は判りましたが、この表現がどういう効果があるのかよく解りません。
0815デフォルトの名無しさん
2007/12/29(土) 17:27:080816デフォルトの名無しさん
2007/12/29(土) 19:30:27どんなことができるのでしょうか?
0817デフォルトの名無しさん
2007/12/31(月) 02:09:29必要に迫られて(仕事ではありませんが…)学習しています。
sjisのデータファイルを読んで、全角カタカナを全角ひらかなに変換しなければなりません。
y、trを試しても駄目でsplitして1文字づつ変換しようとしましたがこれも駄目でした。
やり方をご教示ください。
0818デフォルトの名無しさん
2007/12/31(月) 02:21:41open 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で保存。
0819デフォルトの名無しさん
2007/12/31(月) 02:26:38有難うございます。
今からやってみます。
0820デフォルトの名無しさん
2007/12/31(月) 03:03:37できました。有難うございます。
これで用は足りるのですが、後学のために教えていただけると助かります。
つまり、ソースはUTF8で書くのをdefaultにするのがよいのかということと
もう一つ、この例の場合標準出力に出す場合はどのようにすればよいのかと言うことです。
後者は、わからなくても良いのですがなんとなく欲求不満な状態に陥りそうなもので…。
0821デフォルトの名無しさん
2007/12/31(月) 03:51:32>817の問題もそうですけど、文字列を扱う時はShift_JISよりUTF8の方が都合が良いことが多いです。
仕様上、Shift_JISで入力してShift_JISで返さないとならない場合もありますが、
そういう場合は、内部でUTF8に変換して、最後にまた戻す、なんてことをよくやります。
で。
扱う文字列がUTF8ならソースもUTF8の方が便利よね、と。
0822デフォルトの名無しさん
2007/12/31(月) 09:15:580823デフォルトの名無しさん
2007/12/31(月) 13:33:47ソースをUnicodeで書いて入出力もレイヤをかましてUnicodeで行うのが最近の流行りやね
別にUTF8でなくてもいいんだけど、<U+7F範囲の文字を多用するから都合がいいだけ。
で、既に開かれているストリームにレイヤを適用するならbinmode関数を使えばいい。
binmode STDIN, ":encoding(Shift_JIS)";
binmode STDOUT, ":encoding(Shift_JIS)";
これから開くストリームに対してデフォルトのレイヤを指定したいなら、openプラグマ。
詳しい仕様とかは適当にぐぐっといて。
0824デフォルトの名無しさん
2007/12/31(月) 14:35:56820です。
有難うございます。
0825デフォルトの名無しさん
2007/12/31(月) 15:00:21既存のソースファイルを utf8 にコンバートすべく次のようにやってみましたが、
出力されるのは Shift_JIS のようです。
何が悪いのでしょうか? ご教示くだされば幸です。
use utf8;
binmode STDIN, ":encoding(Shift_JIS)";
open OUT, ">utf_$ARGV[0]";
print OUT <>;
0826デフォルトの名無しさん
2007/12/31(月) 16:54:18>>818 のようにパラメータ3つの open 文を使うといい。
open OUT, ">", "utf_$ARGV[0]";
あと、余計なおせっかいかもしれないが Windows 環境で動かすなら
":encoding(Shift_JIS)" じゃなく
":encoding(CP932)" が適切だよ。
0827デフォルトの名無しさん
2007/12/31(月) 17:19:30use utf8;
open IN, "<:encoding(CP932)", $ARGV[0];
open OUT, ">:utf8", "utf_$ARGV[0]";
print OUT <IN> while not eof IN;
0828デフォルトの名無しさん
2007/12/31(月) 18:13:15この場合は
print OUT <STDIN>;
あと、shiftjis と cp932 も、変換出来無い文字があったりするから、
Windows環境ならいつも cp932 でおk、って訳でもない。
0830デフォルトの名無しさん
2008/01/01(火) 19:01:54> あと、shiftjis と cp932 も、変換出来無い文字があったりするから、
> Windows環境ならいつも cp932 でおk、って訳でもない。
何気なく見過ごしていましたが、このような場合、どの時点でどのように対処するのが
効率的か、お教えいただければありがたいです。
0831デフォルトの名無しさん
2008/01/01(火) 20:11:22ケータイもシフトJIS。
マッキントッシュもシフトJIS。
古いPC-9801のMS-DOSもシフトJIS。
どのマシンがどのシフトJISを使っているか調べて
それに応じて使い分けよう。
で、Windows は cp932 というシフトJISなわけ。
>>828 はそこらへんを混乱している。
0832デフォルトの名無しさん
2008/01/01(火) 20:16:13Archive::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
---------- 出力 ここまで ----------
0833デフォルトの名無しさん
2008/01/01(火) 20:37:04ドキュメントのsetErrorHandler()を参照。
$oldErrorHandler = Archive::Zip::setErrorHandler(\&myErrorHandler);
という感じでエラーハンドラを設定できる。デフォルトのエラーハンドラは\&Carp::carp。
my $old = Achive::Zip::setErrorHandler(sub{ });
$zip->read($zipfile);
Archive::Zip::setErrorHandler($old);
とするなりsetErrorHandler(\&Carp::croak)とでもしてアボートさせるなりすればいい。
0835デフォルトの名無しさん
2008/01/01(火) 21:01:47> で、Windows は cp932 というシフトJISなわけ。
とすると、 cp932 は shiftjis を完全に内包している筈だけど、そうではない場合がある。
例えば、 "\x{301c}" は、 shiftjis だと正常に変換できるけど、 cp932 だとエラーになる。
cp932 を shiftjis に機種依存文字などを追加したもの、と理解していると、ハマる事がある。
0836デフォルトの名無しさん
2008/01/01(火) 21:17:30まだ理解してないね。
>Windows は cp932 というシフトJIS
これのどこが「cp932 は shiftjis を完全に内包している」と読めるわけ?
shiftjis など一言も書いてないんだが。
いろ考える前にさ、ネットで検索でもしてコード表とか眺めてご覧よ。
そのほうが早いって。
0837デフォルトの名無しさん
2008/01/01(火) 21:35:570838デフォルトの名無しさん
2008/01/01(火) 21:46:230839デフォルトの名無しさん
2008/01/01(火) 21:59:50プロキシ経由の書き込みは、はじこうとして以下のような記述をしたんだけど、
うんちゃらかんちゃら処理を行う前に、白いエラー画面になってしまう。
うんちゃらかんちゃら処理を行わせるにはどうしたらいい。
ネット調べたが、分からん。
ちなみに俺COBOLER。コボプロをせっせと書いて生活費稼いでる。
if ( HTTP_VIA =~ "") {うんちゃらかんちゃら処理}
0840デフォルトの名無しさん
2008/01/01(火) 22:02:090841デフォルトの名無しさん
2008/01/01(火) 22:04:18いや、そう笑うなって。
馬鹿な質問してるのは、なんとなく分かるんだけど。
0842デフォルトの名無しさん
2008/01/01(火) 22:07:190843デフォルトの名無しさん
2008/01/01(火) 22:21:02その記述でも、やっぱ駄目だな。
エラー
リクエストされた URL は取得できませんでした
--------------------------------------------------------------------------------
以下の URL を取得した際に: http://123cgi.plala.or.jp/oreatamawarui/dousiyoumonaibbs/mousinitai.cgi
次のエラーが発生しました:
アクセスできません.
現在設定されているアクセス制御の設定のため,あなたからのリクエストは受けつけられません.この設定が正しくないと思われる場合には,このサービスの管理者へ連絡してください.
--------------------------------------------------------------------------------
Generated Tue, 01 Jan 2008 13:14:44 GMT by Casper (squid)
ってメーッセージが出た。
プロバイダの設定なのかな。ちなみにぷらら。
0844デフォルトの名無しさん
2008/01/01(火) 22:30:450845デフォルトの名無しさん
2008/01/02(水) 01:56:58そこね、ネットサーフィン専用プロパイダと割り切った方がいいよ。
努力しても時間の無駄だと思うな。
0846デフォルトの名無しさん
2008/01/02(水) 17:30:28perlの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が使えるけど、
ちゃんとしたユニコード化が必要なら諦めた方がはやい。
0847828, 835
2008/01/04(金) 19:48:21私自身、shiftjis と共通する部分の文字は全て cp932 でも同じように変換される、と思いこんでいた時期がありました。
しかし実際は、 shiftjis と cp932 、どちらを指定するかで結果が変わってしまう文字が存在します。
あのレスでは、こういう副作用があるので shiftjis の代わりに cp932 を使う時は注意した方がいい、という事を言いたかったのです。
今回の事は、私も勉強になりました。
0848デフォルトの名無しさん
2008/01/05(土) 22:43:37「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]ではないと思い、結果を不正にしたいのですが、
ググったけど分かりません。どこ嫁ばいいですか?
0849デフォルトの名無しさん
2008/01/05(土) 22:48:340850デフォルトの名無しさん
2008/01/05(土) 22:51:530851デフォルトの名無しさん
2008/01/06(日) 10:14:460852デフォルトの名無しさん
2008/01/06(日) 14:36:04しかし YAML::Load() してみると、データがすべて文字列になります。
例えば
- hoge
- 123
- true
が
[ 'hoge', '123', 'true' ]
になってしまいます。
これって仕様なんでしょうか。みなさんどうしてますか?
0853デフォルトの名無しさん
2008/01/06(日) 16:09:09use 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";
}
0854デフォルトの名無しさん
2008/01/06(日) 16:14:110855デフォルトの名無しさん
2008/01/06(日) 18:57:52looks_like_number って数字に「見える」なら文字列だって真にならない?
>852
多分、YAML.pm の仕様。
とりあえず YAML::Syck で $YAML::Syck::ImplicitTyping = 1 にすれば数値になるはず。
他にも YAML 系のモジュールはあるんで調べてみるといいかも。
0856デフォルトの名無しさん
2008/01/06(日) 20:03:44print "start\n";
while(<>){
chomp;
last if(/q/);
print "ok\n";
}
これがcmd.exeでは正しく動くのにCygwinでは動きません。
対話型を要求するスクリプトではいつもそうで、それ以外のだとcygwin上で動きます。
<>を使えるようにしたいのですが、どうしたらいいですか。
0857デフォルトの名無しさん
2008/01/06(日) 20:20:20Cygwin 上って cmd.exe + bash 上でってこと?
一番安易な解決策だと Cygwin 上では cygwin perl を使う。
後、ck + tcsh on Cygiwn だと
use IO::Handle;
STDOUT->autoflush(1);
してやれば ActivePerl でも動いてるように見える。
0858デフォルトの名無しさん
2008/01/06(日) 20:27:01cygwin上で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でこういうことやろうとすることが間違っているとは思っていません。
きっと設定とかいじればうまくいくはずと思っています。
ところがうまくいかないので困っています。
0859デフォルトの名無しさん
2008/01/06(日) 20:34:020860デフォルトの名無しさん
2008/01/06(日) 20:48:04対話的モードでプログラムを書くということですか??
それだとしたら意味がわかりませんので教えてください。
cygwinを対話的モードにするということでしたら、やり方が分かりません。
ので、別途調べる必要がでてきます。
それに、cygwinを対話的モードにするだけで解決するかどうかもまだよく分かりません。
説明お願いします。
0861デフォルトの名無しさん
2008/01/06(日) 20:58:41>>859はただの混ぜっ返しだろ。
おれには、あんたが糞くだらないことで蹴躓いているように思えるよ。
いくつか推測ができるが、状況を的確に説明できない質問には答えたくない。
0862デフォルトの名無しさん
2008/01/06(日) 21:09:38状況をもう一度整理します。
まず、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で出ることは出来ます。
0863860
2008/01/06(日) 21:09:59ということはプログラム自体が悪いのでなく、cygwin環境の設定が悪いのか、
cygwinの設定とプログラムの書き方の相性が悪いらしい、と考えました。
それで、設定(/etc/profile, ~/.bashrc)を調べてみましたが、とくに対話的シェル
でなくすような設定が見あたりませんでした。
以上が状況説明です。
0864860
2008/01/06(日) 21:11:03つまり、エラーも出ず、何か入力しても反応しません。
↓
つまり、エラーメッセージも出ず、何か入力しても反応しません。
0865デフォルトの名無しさん
2008/01/06(日) 21:33:23(echo a;echo q)|perl interactive_test
としてみるとか…
# a,q の後に改行してないとかかな
0866860
2008/01/06(日) 21:36:49ありがとうございます。よく分からないのですが、試してみたところ、
以下のようになりました。
$ echo a | perl interactive_test
start
ok
$ echo q | perl interactive_test
start
$ (echo a;echo q)|perl interactive_test
start
ok
$
0867852
2008/01/06(日) 21:59:58そのスクリプトで $arrayref を print Data::Dumper::Dumper($array) すると
$VAR1 = [
'hoge',
'123',
'true'
];
となりました。123もtrueも文字列として認識されてますよね?
>>854
おっしゃるようにDumpしてみておかしいと思ったので質問してみました。
>>855
>多分、YAML.pm の仕様。
Perlは数値も文字列も区別しないからこういう仕様でも構わないということでしょうか。
0868デフォルトの名無しさん
2008/01/06(日) 22:00:40>>857の言うようにするか、
$|=1;
をおまじないでscriptの前の方に書くことにする。
理由を書くのはめんどくさいや。
あんたが本筋でないと言っているところの問題。
0869デフォルトの名無しさん
2008/01/06(日) 22:04:51a の後に改行はしてる?
してなかったら、してみる
してたら、UNiX 系と Windows では改行コードが違うからそこらへんでひっかかってるのかもしれない。
だから、>>857 に「Cygwin 上では cygwin perl を使う。」と書いてるでしょ?
cygwin 用の Perl と active perl は違うよ?
0870860
2008/01/06(日) 22:23:57ありゃ、いけました。
$|=1;
を追加したところ正しく動作しました。
ありがとうございます。
思わぬところに原因があったんですね。
原因についてはよく分かっていないので、今後調べて理解します。
cygwinの設定というよりも、cygwinとperlの書き方の相性の問題だったようですね。
ところで、>>857についてはよく分かりません。
$|=1;
のほうが文字数は少ないですが、>>857のように書いたほうが本来は良いのでしょうか??
場合によるのかもしれませんが。
0871860
2008/01/06(日) 22:27:23改行しているかどうかというのはどういう意味でしょうか。
$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を使うようになった次第です。
間違った考えでしたら、忌憚ないご意見待っています。
0872デフォルトの名無しさん
2008/01/06(日) 22:33:22全然違うよ。
とりあえず件の問題はおまじないですませて、
あんたの言うところの「本筋」を習得してくれ。
0873860
2008/01/06(日) 22:53:37私はゆくゆくはWeb programmingをしたいんですよ。
だから、UNIX系OS使うことになりそうじゃないですか?
なので、今はcygwinでやってます。そのうち、mac買います。
そういったこともふまえると、やはり、こういうIO関係(?)の知識は大事になって
くるんでしょうか??
perlというとperlのなかだけの話だけで完結するかと思いきや、そうではなかったんですね。
それとも、macに変えればcygwin+activeperlといった泥臭い(?)話はなくなるのでしょうか。
(つまり、相性どうこうといった話ぬきに、すっきり扱えるようになるのでしょうか)??
まあ、どっちにしてもIOは大事なのかもしれませんが、なんかcygwinだとperlの「本筋」とは関係のない
ややこしいことが無駄に多量出現している感があります。
0874デフォルトの名無しさん
2008/01/06(日) 23:31:210875デフォルトの名無しさん
2008/01/06(日) 23:37:230876860
2008/01/07(月) 00:06:14それはcygwinだとやはり面倒だという意味でしょうか?
cygwinは面倒だと思いますか??
VMWareに興味ありますけど、cygwinみたいな面倒な点はないかもしれないですが、
これはこれで面倒なことがあると聞きます。
一応、virtual PCを昔使ったことがあるし、colinuxもインストールしようとして
失敗した経験を持っています。
>>875
話を聞いていなかったということでしょうか??
たぶん、それは私の心あたりにない点なので、良かったらどの部分か教えてください。
話に聞き漏らしがあるのは、視力が悪いせいかもしれません。
自分では人の話をよく聞くことを人生で大事にしているのですが、
メールなどではなかなかよく見ようという気にならないです。
多分、角膜の病気だからだと思うのですが、世間ではそういういいわけが通用しないことは
心得ています。
迷惑かけてすんません。
ところで、IO関係となるとunixのシェルやカーネルの知識が必要になるみたいですね。
初心者には厳しい部分な気がいたします。
やはり初心者はIO関係が苦手なものなんでしょうか。
IO関係だけが苦手分野なんですよ、perl全体をいろんな分野に分けて見たときに。
そこで、気持ち悪いじゃないですか、知識に穴があるみたいで。
この穴を埋めてから次のステップに進みたいのですが、どういう手だてがあるでしょうか。
あるいは、IO関係は上級者向けだからノータッチ推奨ですか。
0877デフォルトの名無しさん
2008/01/07(月) 00:17:57とりあえずおまじないを覚えておいて、理解が深まってから振り返ると意味が分かるなんてことはよくある
0878860
2008/01/07(月) 00:31:11もう返事がないものかと半分あきらめて、このスレももう店仕舞いかと思っていた矢先のコメント
ありがとうございます。
何も私は完璧を目指しているのではありません。
穴を完璧に針の穴さえもないくらいに無くそうとしているのではなくて、
IO関係全般に「ぽっかり」と開いた巨大ホールをなんとかならないものかと
腕組みして困り顔をしている次第です。
やはり、私のように情報系の教養を大学で学んでこなかったし、
かといってIT系職種に就いているわけでもないような、言って見りゃ「畑違いな人種」
にとってみれば、まったくの未知との遭遇と申しますか、つまるところ不安なのです。
とくに不安なのが、IO関係で、他の人はここらへんどうなのだろうかという一般論を知りたいと
思います。
日本中のPerl学習者で統計をとったときに、私のようにIOだけチンプンカンプンな人というのは
これは珍しいのでしょうか。
なぜこういうことを聞くかというと、珍しいのだとしたら私は直さないといけませんよね、だからです。
おまじないについては、宝物です。
それはもう、大事に覚えておきます。
0879デフォルトの名無しさん
2008/01/07(月) 00:37:37ジャン。
0880860
2008/01/07(月) 00:46:13大学やIT企業の例を出したのは、私がコンピュータ界隈に縁がないし、周りにもそういう人が
いないがために、他の人の学習のありさまがどうだか全く把握していないという点を説明するためです。
なので、別に、日本全体の統計をとったらIOがまるでダメなPerlerが何パーかというのが
大学や企業行けば把握できるということではありませんよ、ご冗談ですか??
私が知りたいのは、次のようなことです。
IO関係があまりにチンプンカンプンなのにも関わらず、『初めてのPerl』という言わば
超初心者向け(?)な本にサラリと、さも分かって当然かのごとく書いてあったので、困っているのです。
もちろん、初心者向けなので詳しく書かずにサラリと触りだけ書いてあったのかもしれませんが、
私はその「触り」さえもつかむことができませんでした。
それはもしかすると、unix系の知識がゼロだったからなのかもしれません。
実際、この章はunixを前提とします、って書いてましたから。
だから、初心者がIO関係で身につけるべき事項が100あるとしたら、私は20ほどしか分かっていなくて、
他のジャンルだと80以上は分かっているという憂慮すべき事態は、
UNIXの知識不足が原因なのか、はたまた、IO関係は初心者ノータッチ推奨なくらい難易度が高いため
なのかが非常に気になるところなのです。
誰か親切中田おしえてください。
0881デフォルトの名無しさん
2008/01/07(月) 00:54:150882860
2008/01/07(月) 01:08:00ありがとうございます。これで安眠できますww
やはりノータッチ推奨でございますか。
いずれにしても、macのほうがいいよとうるさい知人がいて、
実際、macのほうが良さそうなのでmacにしてみようかなと思っています。
やっぱりweb programmingだと、windowsでperlって難しいですよね??
perlって汎用言語じゃないですか、何でも出来るっていう。
でも、windowsだと出来ることが限られるような気がいたします。
それは私がwindows関係のモジュールとか知識に明るくないからなのかもしれませんので、
突っ込みコメント常時歓迎です。
私はunix系にしたほうが良さそうな匂いをすでに嗅ぎつけているつもりです。
lampだってlinux, 主要なWeb系のサービスのアーキテクチャ(?)も調べてみたら
linuxで、でも、別の知人はwindowsでも出来るよと言ってます。
本当なんでしょうか。その人、私のような超初心者が言うのもなんですが、
perlのそれほど出来る人ではないんですよw
だから、眉唾状態です。
0883デフォルトの名無しさん
2008/01/07(月) 01:24:08以下のモジュールにおいてタグクラウドの大きさのレベルを決定する部分で、
自然体数使いその値を算出しているのですがなぜでしょうか?
http://search.cpan.org/src/LBROCARD/HTML-TagCloud-0.34/lib/HTML/TagCloud.pm
0884デフォルトの名無しさん
2008/01/07(月) 01:28:550885デフォルトの名無しさん
2008/01/07(月) 01:34:20XAMPでぐぐって黙ってコードを書けよハゲ。
0886デフォルトの名無しさん
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です。
よろしくお願いします。
0887デフォルトの名無しさん
2008/01/07(月) 01:38:49対数とったほうがと見た目がいい、としか。
底はfactorで相殺されるからなんでもよし。
0888860
2008/01/07(月) 02:02:52longtail部分の見せ方の問題ですよ。
まず、把握しておくべきこととして、$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をとるとその心配がなくなります。
0889860
2008/01/07(月) 02:09:55その本をもっているのですが、どこにレベルについて書かれていますか???
>>885
なんでそんなに怒っているんですか。
確かにハゲかけてはいますが、ハゲといわれる筋合いはありません。
perlのプログラミングスキル的にハゲだという意味なら仕方ないです。
実際そうなんですから。
でも、XAMPPですか、それはwindowsにパッケージでインストールするだけでperlが使える
というものですよね。
それを使うことで私が抱えている問題を解決できるのでしょうか。
例えば、windowsで大丈夫か心配だという不安を抱えていて、
unixも勉強したほうが良さそうだと思っているのですが。そこでxamppというのは
私の要求にはそぐわない気がするのですが、いかがでしょうか。
是非お返事まっています。
0890デフォルトの名無しさん
2008/01/07(月) 02:19:190891860
2008/01/07(月) 02:24:21今見つけました。目立たない場所にありました。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
0892885
2008/01/07(月) 02:26:56インストールするだけでPerlを使ってウェブプログラミングが出来るんだよハゲ。
君はIO関係で問題にあたる程スキルがない、だから黙ってコードを書けよハゲ。
0893デフォルトの名無しさん
2008/01/07(月) 02:29:15いくら日本語が上手くなってもPerlがかけるようになるわけじゃないだろ。
とにかく本読んでコード書いとけ。そのうち出来るようになるから。
0894860
2008/01/07(月) 02:29:39いかがでしょうか。
>>890
自分はアホでなくて私がアホだと決めてかかるのはどういう了見ですか。
私は現にこうやってこのスレでも勉強しています。
それを勉強していないということはあなたはきっとさぞ大量に勉強しているんですね。
でもですよ、私みたいに毎日コンピュータプログラミングの勉強時間がたっぷり無い
人間もいるのです。
なぜ私が十分な勉強時間がないかと申しますと、本業がIT系ではないからです。
といっても副業であるprogrammingで一銭も稼ぎを得てはいませんけど。
だから、マイペースでやるしかないですか。それこそ、1日5ページでいいから、
プログラミングの本を読む、あるいは、1日100行でいいからコードを書く。
あなたみたいにガリガリやっている人がすべてではなく、マイペースな人もいますよ。
世間知らずな私がえらそうに言ってごめんなさい。
0895デフォルトの名無しさん
2008/01/07(月) 02:32:27で、どこから釣り?
0897860
2008/01/07(月) 02:37:58なぜ怒っているんですか。ハゲと人に言ったら自分がハゲるとひいおじいちゃんが言ってましたよ。
MySQL, Perl, Apacheなどがセットに入っているんですよね。
でも自分でインストール時の設定できないのではないですか?
出来たとしても、そういう生ぬるい環境ではスキルが育たないような気もします。
何よりも、根本のOSの違いまでは吸収されないでしょう。
だから、macにしようかなと思っています。
web programmingを職業にするには、当然unix系、という意識があるのですが、間違ってますかね。
それから、レベル7まではwindowsと誰かがおっしゃってましたが、私は分野を限定しさえすれば、
レベル7です。ということは、windows卒業そろそろという時期じゃないですか。
そういう意味でも、macにするときかなという想いをより一層強めました。
IO関係でスキル無いことは大いに認めますが、私が知りたいのはIO関係でスキルを
身につけるために地道に努力すれば身につくかという一般論ではなくて、初心者である私が
IO関係の「ぽっかり穴」をどう対処すべきかという特殊論なのです。
0898デフォルトの名無しさん
2008/01/07(月) 02:40:010899860
2008/01/07(月) 02:43:19なぜみんなして、私が勉強していないと決めてかかるのですか。
私は勉強していますよ、ただしあなたのようなガリ勉ではありません。
リラックスが必要なのですよ、私にとっては。
それから、長文だからどうこうというのも決めつけです。
確かに私は他人と比べれば長文ですが、これは私にとってナチュラルなスタイルです。
それを何やら批判的な言い方をされるのはちょっと納得がいきません。
世の中には、私のように「長文」な人がたくさんいますよ。
なぜ長文に対して2chでは風当たりが強いのかということが気になります。
>>895 こういう無意味なレスは相手しません。怒っています。
0900900
2008/01/07(月) 02:47:47キチガイさん、釣りはOK Waveか小町でやってください。
真面目に答えてるここの皆さんに失礼です。
貴方に良心があるなら、このスレへのレスはもうやめなさい。
貴方の言ってることの正否はともかく、貴方のレスでこのスレは荒れています。
他の利用者の方に失礼だと思いませんか。
それとも貴方は自分の我が儘を突き通すのですか。 返信不要
0901デフォルトの名無しさん
2008/01/07(月) 02:51:21> なぜ長文に対して2chでは風当たりが強いのかということが気になります。
くそレス読まされるほうの身にもなってみろってんだ。
0902デフォルトの名無しさん
2008/01/07(月) 02:51:44いや君は簡潔に書く能力が低いのよ
しかもその点で向上心が無いの
だからそんな奴に対するそういう態度は当然だよ
0903860
2008/01/07(月) 02:54:30open 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に結果が入っているので、出力の仕方はご自由に。
0904860
2008/01/07(月) 02:55:38人格攻撃する人のほうがよっぽどハゲですよ。くだらない。
0905デフォルトの名無しさん
2008/01/07(月) 02:58:220906860
2008/01/07(月) 03:00:28正義漢のふりすればいいとでも思っているんですか。
人を勝手に我が儘呼ばわりして。
シェアを考えるとmacよりlinuxがいいんですね。そうですか、参考になりました。
ただ、サーバOSと開発環境のOSとがごっちゃになってますね。
ここでハッキリさせるために、
「私は開発環境OSとしてマック使うつもりです」
と明言しておきます。これなら、macでもいいでしょう???
いかがですか。
>>901
0907デフォルトの名無しさん
2008/01/07(月) 03:01:080908デフォルトの名無しさん
2008/01/07(月) 03:01:46お前のことなんだから勝手にしろお
0909860
2008/01/07(月) 03:02:38勝手にしていますよハゲ
0910860
2008/01/07(月) 03:04:34繰り返しますが、そういうあなたこそクソレスではないんですか。
こういう無意味なレスは相手しませんので、よろしくお願いします。
>>902
確かに簡潔ではないですけど、言うべきことを正確に言うためには必要だと思っています。
そこをどうこういうのは正義の問題というより思想・趣味の領域でしょう。
>>905
私へのメッセージですか??
0911デフォルトの名無しさん
2008/01/07(月) 03:05:370912デフォルトの名無しさん
2008/01/07(月) 03:06:28正規表現やsplitよりsubstr使った方が早いだろ、常識的に考えて。
なんで$lineだけがレキシカル変数じゃないんだよ、常識的に考えて。
使用するサーバと開発環境のOS合わせた方が仕様の差異が少ないんだから、ウェブプログラミングしやすいだろハゲ。
最初から決めてるなら質問するなよ馬鹿。お前の日記帳じゃないんだよ。
0913デフォルトの名無しさん
2008/01/07(月) 03:07:33macは、perlの学習用にはそう悪い選択じゃないと思うよ。
perl、apache、phpあたりは最初から入ってるし……。
わざわざ乗り換えるほどのこともないとは思うけど。
0914860
2008/01/07(月) 03:12:27そうだったんですか!!!本当だとしたら勉強になります。
ところで、開発環境ならwindowsでも良いというのはどうしてですか???
凄腕エンジニアたちにはunix系使いが多いと聞いていますが、それとは矛盾しませんか??
○windowsを開発環境にする
●メリット: 今自分が持っているパソコンである、ツールが充実している
●デメリット: unixの知識が身につかない、
サーバOSをunixにする場合両方のOSの知識が必要になり大変・混乱する
○unixを開発環境にする
●メリット: CLI環境が充実していて開発効率が向上する、サーバOSと同じOSだということで
覚えるべき量が減る
●デメリット: とくになし
というイメージなので、やはりunixがいいかなと思っています。
そして、同じunix系ならmacが最近人気なようなので、ミーハー気分で
macにしようとおもっています。linuxではなくmacなことにとくに深い理由はありません。
0915デフォルトの名無しさん
2008/01/07(月) 03:13:420916デフォルトの名無しさん
2008/01/07(月) 03:19:55勝手にしろよ。
perlかんけーないし。板違い。
終了。
新・mac
http://pc11.2ch.net/mac/
0917860
2008/01/07(月) 03:20:56あっそこのmyよく忘れるんです、勉強になりました。
substr速いというのは『初めてのPerl』にも書いてましたね。勉強なりました。
最初から決めてるのでなく、私の見解・予定を明示した上でのほうがより的確な
アドバイスが得られるとの考えです。
やはりOS合わせたほうがいいのですね。貴重なアドバイスありがとうございます。
であれば、
server : mac
development : mac
にします。macもOSXであればlinuxとほとんど同じと聞いたので、
開発環境兼サーバーOSとしてmac、というのはあり得る話ですよね??
>>913
乗り換えるほどのことはないとはいえ、レベル8からはwindows卒業しどきとおっしゃった
方がいましたし、それに、ゆくゆくはweb programmingをすることを考えると
今からwindows卒業しようかなと思っています。
そこのあたりどうお考えになりますか???
それから、macが悪い選択でないというのは他に何か理由があるのでしょうか。
プリインストールについては聞き及んでいましたが、それって大したメリットでない
ようにも思えます。なぜなら、インストールくらいは私でも出来るからです。
それでもプリインストールのメリットってあるものなんですかねえ。
0918デフォルトの名無しさん
2008/01/07(月) 03:24:580919886
2008/01/07(月) 03:34:36どうもありがとうございます。
実は、、文字の間はスペースのほかにタブがくることがあります。
先頭の文字の前にもスペースかタブがくることがあります。
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度手間ですみません。。。
0920860
2008/01/07(月) 03:36:52確かにスレチな部分も多々ありましたが、それは他の人が勝手な解釈で私の言葉を
受け止めたから、反発的に自分の意見は誤解されているということを言いたくなった
だけですよ。
スレ違いな話をここで展開するつもりは毛頭ございません。
それはそうと、もうちょっとhospitalityのある対応をお願いしたかったところですよ。
皆さんストレスたまっているようですね。リラックス大事ですよ、お願いしますよ。
0921デフォルトの名無しさん
2008/01/07(月) 03:43:13板違いです。
主義・主張
http://society6.2ch.net/shugi/
終了
0922860
2008/01/07(月) 03:47:10要件がちょっと曖昧にしか理解できないのでお尋ねします。
1列目のddというのは4列目にないのに、貴方は、'aa'を拾うことを要求してますよね。
これは、>>886の「4列目を取得する」という条件から、
「途中の空白な列は数えずに4列目を取得する」、という条件に仕様変更した
という意味でしょうか。
それから、4列目は最初にaaがないですよね。
これは1列目にaaがあったら、という>>886の条件ではなくて、
最初の空でない列がaaだったらという条件に変更したということですか??
0923デフォルトの名無しさん
2008/01/07(月) 03:48:25my @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;
0924860
2008/01/07(月) 03:48:381列目のddというのは
↓
1行目のddというのは
4列目は最初にaaがないですよね。
↓
4行目は最初にaaがないですよね。
0925860
2008/01/07(月) 03:56:49私もそういう要件だと理解しました。勉強なりました。
・filenameを変数に格納しておくんですね。
・openでfile handleを変数にしているのはどういったわけでしょう。
・my @lines = <$fh>;としてから処理するよりも直接一行ずつ読み込むほうが高速
ということになるんでしょうか。
・grep, splitの組み合わせは、コード見ればすぐ理解できるものの、思いつくかというと
ちょっと時間かかりそうです。
・やはりfile handle閉じたほうがいいんですかね。今のところ閉じたほうがいいような状況に
遭遇したことがないので、閉じないで済ませることが多いのですが。
0926860
2008/01/07(月) 04:04:150927886
2008/01/07(月) 04:27:36レス中のご質問は両方ともYESです。
所望の動作を確認しました。ありがとうございました。
0928デフォルトの名無しさん
2008/01/07(月) 05:05:41気付いたらレス番が赤くなってるタイプだわ
人気者は辛いなあ…あはは…
0929デフォルトの名無しさん
2008/01/07(月) 05:52:39まぁLinux初心者は「VMware Player」をインスコして
「ubuntu Linux」のVMware用パッケージを落として
ubuntuなんたら.vmxをダブルクリックでもしとけ。
0930デフォルトの名無しさん
2008/01/07(月) 06:04:230931デフォルトの名無しさん
2008/01/07(月) 07:00:360932デフォルトの名無しさん
2008/01/07(月) 08:39:18そろそろ空気読んで勉強に戻ったほうがいいんじゃね?
0933860
2008/01/07(月) 10:11:280934デフォルトの名無しさん
2008/01/07(月) 10:57:390935デフォルトの名無しさん
2008/01/07(月) 12:31:400936デフォルトの名無しさん
2008/01/07(月) 12:38:180937デフォルトの名無しさん
2008/01/07(月) 13:02:11Perl にPythonの対話モードやRubyのirbみたいなのってあったっけ
0938デフォルトの名無しさん
2008/01/07(月) 15:22:41for($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は固定されてしまうのでしょうか?
0939デフォルトの名無しさん
2008/01/07(月) 15:38:09> 最初のif文に入ったらずっとif文を回り続けて、$b[1] - $b[2]以降を読み取ってくれない
ということは、どうやって判断したの?
そのコード自体もいろんなところが適当すぎるだろう。
意味を考えて書いてるのか。
0940デフォルトの名無しさん
2008/01/07(月) 15:38:40use strict;
use warnings;
を使い、後はエラーメッセージを頼りに修正するといい。
(数値である)$#bをわざわざ("$#b"で)文字列化してから( < 演算子で)数値評価してるのは何故?
0941デフォルトの名無しさん
2008/01/07(月) 15:43:14>>938
悩んだら変数を片っ端から出力してみればいい
>>940
最後の一行を>>938が理解してるとは思えないんだがw
0942デフォルトの名無しさん
2008/01/07(月) 15:49:26わかりにくく書いてしまってすいません。
例えば、@bに1 1.5 3 5 5.5 と入れた場合、
最初の差が1以下なのでずっとgoodが出てきてしまいます。
good bud bud goodのように出力したいのですが。
>>940
すいません、>>941さんが言われてる通り最後の一行がよくわかりません。ごめんなさい。
use strict;やuse warnings;はプログラム内に書けばいいのでしょうか?
0943デフォルトの名無しさん
2008/01/07(月) 15:56:57それなら、最初の差が1以上ならどうなるか試してみた?
ところで、"bud"の意味は「つぼみ」ね。
0944デフォルトの名無しさん
2008/01/07(月) 16:01:56はい、試して見たところずっとbudが出てきました。
多分$aaaが固定されてるんだと思うんですが。
> "bud"の意味は「つぼみ」ね。
アホなミスをしていました。
すいませんでした。
0945デフォルトの名無しさん
2008/01/07(月) 16:19:28>最後の一行を>>938が理解してるとは思えないんだがw
ちくしょー(perldocは無理でも和訳印刷製本済みの)らくだ本くらい通読しやがれ。
>>942
use strict 等についてはその通り。
後、938のコードが "good" を出力するには割と特殊な条件が必要。
手元のプログラムが "good" を出力するなら、938とは別物の可能性が高い。
0946デフォルトの名無しさん
2008/01/07(月) 16:39:25> 手元のプログラムが "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が出続けてしまいます。
書き方が酷くてホントすいませんでした。
0947デフォルトの名無しさん
2008/01/07(月) 16:51:450948デフォルトの名無しさん
2008/01/07(月) 16:52:52空気読めよ。
みんな本人が自分で気づくように遠まわしに指摘してるじゃないか。
0949デフォルトの名無しさん
2008/01/07(月) 17:01:03すいません。
$aaa < 1 && $aaa > -1
でした、本当にすいません。
0950デフォルトの名無しさん
2008/01/07(月) 17:01:36>> ずっとgoodが出続けてしまいます。
の方が不思議だと思うのだが。
0951デフォルトの名無しさん
2008/01/07(月) 17:16:28「最後の1行」の部分は、要するに、$#bをダブルクォートでくくっている(「"$#b"」と書いている)理由を聞いている。
(そう書かなければならない理由がわからないから)
use strict / use warnings の書き方は、
/usr/lib/perl5/5.8/File/Compare.pm (環境によってインストール先が違う。無かったら探せ)
あたりでも見とけ。
あと、もっとお手軽な方法としては、
perl -wc スクリプトファイル
という手がある。
オプションの意味は「perl --help」とか「perldoc perlrun」とかで出るメッセージを見ろ。
(ついでに、「perldoc perl」で標準添付のドキュメントにどんなのがあるかの一覧が出る)
0952デフォルトの名無しさん
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は書き換えられないのでしょうか?
0953デフォルトの名無しさん
2008/01/07(月) 18:05:02一行一行脳内コンパイルすればエラーに気づくだろ。
0954デフォルトの名無しさん
2008/01/07(月) 18:09:14単純に$のつけ忘れだろ。
まだmyも使えないようなレベルでいきなりuse strict使えというのは敷居が高いような
気もするが、せめてuse warningsだけでも使ってみれば、
Unquoted string "i" may clash with future reserved word at 〜
とか
Argument "i" isn't numeric in array element at 〜
といった警告が出てきて見当ついたんだけどね。
0955953
2008/01/07(月) 18:10:29>>952
試してみますじゃねえよ。馬鹿野郎、ちゃんと試せよ。
use strict;にusewarnings;しやがれ。
0956デフォルトの名無しさん
2008/01/07(月) 18:26:48出来ました!
本当にありがとうございます!
レスくださった方々、本当にありがとうございます。
ここにいる皆様は本当にいい人ばかりで、涙がでそうです。
自分も人に教えられるくらいになるよう、勉強していきたいと思います。
最後に、本当にありがとうございました。
0957デフォルトの名無しさん
2008/01/07(月) 18:37:420958デフォルトの名無しさん
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));
}
---------------------------------------------
もっとスマートにならないでしょうか。
0959デフォルトの名無しさん
2008/01/07(月) 22:56:37sub comparator { $a<=>$b || pack('N*',split /\./,$a) cmp pack('N*',split /\./,$b) }
なんてどう?
0960デフォルトの名無しさん
2008/01/07(月) 22:59:30sub comparator {
pack('C*', split /\./, $a) cmp pack('C*', split /\./, $b);
}
0961デフォルトの名無しさん
2008/01/07(月) 23:16:23@arr = qw ( 10.4.31 10.40 5.2.3 5.3 );
print sort versioncmp @arr;
0962デフォルトの名無しさん
2008/01/07(月) 23:27:57Shell::Perlのpirl
0963質問
2008/01/08(火) 01:10:21cronを使わずにperlコマンドorモジュールorシェルコマンドで指定した時間で走らせる方法があったら教えてください。
プログラムの流れとしては、
CGIでプログラムの起動と停止をおこなう
起動ボタンが押されると、停止を押すまではたとえば5分間隔でプログラムを走らせる
停止ボタンを押すとプログラムを停止させる
です。必要なときに起動・停止したいのと諸事情によりcronは使えません。
0964デフォルトの名無しさん
2008/01/08(火) 01:16:591) sleepで寝て、停止時にはシグナルぶちこんで叩き起こす。
2) alarmでタイマー仕掛けて、停止待ち状態で待って、アラームが鳴ったら仕事をする。
0966デフォルトの名無しさん
2008/01/08(火) 01:30:51このようなファイルが任意の大きさであったとき、
人物ごとにハッシュか構造体でまとめたいです。
------------------------
名前:鈴木
性別:男
好きなアルファベット:A, B
名前:佐藤
性別:男
好きなアルファベット:C
名前:田中
性別:男
好きなアルファベット:D, E, F, G
……
------------------------
ファイルが終わるまでの任意の大きさでまとめる点と
好きなアルファベットは一つとは限らない点で困ってます。
どなたかご教授くださいませ。
0967デフォルトの名無しさん
2008/01/08(火) 01:38:04[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
0968デフォルトの名無しさん
2008/01/08(火) 01:39:150969デフォルトの名無しさん
2008/01/08(火) 01:39:380970デフォルトの名無しさん
2008/01/08(火) 01:59:32use 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;
0971デフォルトの名無しさん
2008/01/08(火) 02:01:53「, 」がアルファベット以外に存在しないこと等々、色々制約あり
0972デフォルトの名無しさん
2008/01/08(火) 03:53:33(英語の文字化け等があるので、1文字だとダメなんです)
調べると日本語の判定は
if ($comment !~ /(\x82[\x9F-\xF2])|(\x83[\x40-\x96])/)
とあるのですが、
もし($コメント 含まれていなければ / 3回繰り返す・日本語 /)
にしたいのですが、
この「3回繰り返す」というのと、
(\x82[\x9F-\xF2])|(\x83[\x40-\x96])
をどう1まとめにするかが、わかりません。
ご教示ください。
0973966
2008/01/08(火) 04:02:22ありがとうございます。>966ではできました。
もう少しお付き合い頂きたいのですが
好きなアルファベットがこんなふうに並んでた場合はどうなんでしょうか?
------------------------
名前:鈴木
性別:男
好きなアルファベット:A
好きなアルファベット:B
名前:佐藤
性別:男
好きなアルファベット:C
名前:田中
性別:男
好きなアルファベット:D
好きなアルファベット:E
好きなアルファベット:F
好きなアルファベット:G
……
------------------------
0974デフォルトの名無しさん
2008/01/08(火) 11:12:21> ありがとうございます。>966ではできました。
「できました」(笑)
0975デフォルトの名無しさん
2008/01/08(火) 11:52:230976デフォルトの名無しさん
2008/01/08(火) 12:48:54つまりあれか。俺がCPAN慣れてないから見つからなかったのな…。
0977デフォルトの名無しさん
2008/01/08(火) 15:29:54http://www.kt.rim.or.jp/~kbk/perl-5.8/perlretut.html
http://www.din.or.jp/~ohzaki/perl.htm#Character
(?:[\x81-\x9F\xE0-\xFC][\x40-\x7E\x80-\xFC]){3}
0978デフォルトの名無しさん
2008/01/08(火) 18:04:05配列の中身は、オブジェクトだったり、相互の参照があったり。
線形検索をかけてるルーチンがあるかのような遅さだ(perlでそんなバカなことはしないだろうが)。
単にパーシステントにしたいだけなら、やっぱりStorable?
あと、YAMLでオブジェクトの再構築はData::Dumperと全く同じでできるの?
0979デフォルトの名無しさん
2008/01/08(火) 18:26:50> 単にパーシステントにしたいだけなら、やっぱりStorable?
そう
0980デフォルトの名無しさん
2008/01/08(火) 21:37:05プログラムPGを作れ
プログラムの機能の条件
1、INDATAというファイルの中身を読みこんで処理するものであること
2、少なくとも一個のif文を使っている
3、for,while,foreachなどの繰り返しを少なくとも一個は使っている
4、少なくとも一個の配列を使っている
5、少なくとも一個の引数を使っている
6、以下の様に実行することでOUTDATAに結果が出力される
% KADAI3 <INDATA> OUTDATA
注:3は引数
0981デフォルトの名無しさん
2008/01/08(火) 21:44:25課題が出た報告ですか そうですか
0982デフォルトの名無しさん
2008/01/08(火) 21:51:520983デフォルトの名無しさん
2008/01/08(火) 22:14:520984デフォルトの名無しさん
2008/01/08(火) 22:18:08プログラムPGを作れ
プログラムの機能の条件
1、INDATAというファイルの中身を読みこんで処理するものであること
2、(ry
0985デフォルトの名無しさん
2008/01/08(火) 22:18:120986デフォルトの名無しさん
2008/01/08(火) 22:31:29> いや作成していただきたいんです
そういう時は、金額も併記すると交渉が早くまとまるよ。
0988970
2008/01/08(火) 23:15:04use 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;
0989デフォルトの名無しさん
2008/01/08(火) 23:20:08「嫌いなアルファベット」だとかはelsifの条件を||で繋いで書くとかね
やれデータ構造だと肩に力を入れなくても
push, pop, shift, unshift, keys, values, each, exists, defined
辺りを知っていれば、後は上記のようにif, elseの世界だよ ガムバレ
0990デフォルトの名無しさん
2008/01/08(火) 23:50:04去年の3月ごろにちょっと話題になってたから、アンテナ感度が低いのかも
ttp://blog.nomadscafe.jp/archives/000714.html
0991デフォルトの名無しさん
2008/01/09(水) 00:14:40Perlでリクに答えるスクリプトを作るスレ
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とかなんとか処理系のパスを書けばいい
まずは書いてみなよ
スレ梅代わりに、分かったところまで書いたらここに貼りゃいいから
0992973
2008/01/09(水) 01:02:11970様のおかげで書き方がわかりました。
重ね重ねありがとうございました。
0993デフォルトの名無しさん
2008/01/09(水) 01:19:40レス数が950を超えています。1000を超えると書き込みができなくなります。