- 1 名前:デフォルトの名無しさん mailto:sage [2008/04/20(日) 16:01:21 BE:176880454-DIA(100004)]
-
"The duct tape of the Internet" こと、Perlについての質問箱です。 "There's more than one way to do it" ということで、 Perlの奥深さについて皆で語り合い、追求してまいりましょう。 CGIについての質問は板違いです。WEBプログラミング板でどうぞ。 CGIとPerlの区別がつかない人もWEBプログラミング板に行ってください。 ( WEBプログラミング板 pc11.2ch.net/php/ ) CGIの質問は答えが Perlと全然関係ない話に帰着する場合が 多かったりするのでWEBプログラミング板に行って聞いたほうが得ですよ。 このスレでは(CGI以外の)純粋にPerlのみに関係する質問を取り扱っていこうと思います。 スレ違いの質問にはスルーか、速やかな誘導をお願いします。 www.perl.org/get.html ● 2008/04/20 現在の最新版: 5.10.0 ● 2008/04/20 現在の開発版: 5.9.5 ▼ 前スレ Perlについての質問箱 34箱目 pc11.2ch.net/test/read.cgi/tech/1199977642/
- 296 名前:290 mailto:sage [2008/06/02(月) 19:33:01 ]
- >>291-294
ありがとうございます。解決しました。 perlじゃなくてshellの問題でしたね。すいません。 294氏のイメージは理解しやすかったです。
- 297 名前:デフォルトの名無しさん mailto:sage [2008/06/02(月) 21:15:52 ]
- binmode(STDOUT);
と指定したものをテキストモードに戻すにはどうしたらよいでしょうか?
- 298 名前:デフォルトの名無しさん mailto:sage [2008/06/02(月) 21:40:55 ]
- binmode(STDOUT, ":crlf");
perlfunc読めよ糞が
- 299 名前:デフォルトの名無しさん [2008/06/02(月) 22:59:05 ]
- ↑
キミ、後輩を育てられないタイプだね。
- 300 名前:デフォルトの名無しさん mailto:sage [2008/06/02(月) 23:06:24 ]
- うん。自分でもそう思う。
でも、いまのところ自営業で後輩いないからなんとかなってる。
- 301 名前:デフォルトの名無しさん mailto:sage [2008/06/02(月) 23:11:36 ]
- 相手に糞とか言う輩は、殆どの場合己がそうだから。
- 302 名前:デフォルトの名無しさん mailto:sage [2008/06/02(月) 23:31:02 ]
- 相手をくそとか言う輩は,ほとんどの場合周囲からくそと言われてるから。
- 303 名前:デフォルトの名無しさん mailto:sage [2008/06/03(火) 00:41:30 ]
- >>301
> 相手に糞とか言う輩は、殆どの場合己がそうだから。 調査不可能なことを断言する嘘つきの出現です。
- 304 名前:デフォルトの名無しさん mailto:sage [2008/06/03(火) 02:06:42 ]
- 断言してないような
- 305 名前:デフォルトの名無しさん [2008/06/03(火) 02:30:56 ]
- 質問してもいいでしょうか?
winxp sp2を使っていて、activeperlを入れています。 パソコンのボリュームの調整をするコードを書きたいのですが、 perlからでもそういうのはいじれるのでしょうか? メイン音量・WAVE、あと、wmpなど音楽再生ソフトの音量もいじりたいです。 どこか参考になるサイトなどありますでしょうか?
- 306 名前:デフォルトの名無しさん mailto:sage [2008/06/03(火) 03:48:25 ]
- なんでperlで?
VBでも使った方が良くね?
- 307 名前:デフォルトの名無しさん mailto:sage [2008/06/03(火) 07:37:39 ]
- >>305
どうしてもPerlでやりたいなら、Win32APIをつかえば? それ以上は、Perl関係ない。
- 308 名前:デフォルトの名無しさん [2008/06/03(火) 17:03:21 ]
- use utf8;
binmode STDOUT, ':encoding(cp932)'; このコードを他のOS環境で使うためには :encoding(cp932) を手作業で書き換えてもらってるんですが 自動取得することはできますか? そのOSのデフォルトのコードページとかエンコードとかを 自動取得することは出来ますか?
- 309 名前:デフォルトの名無しさん mailto:sage [2008/06/03(火) 17:32:59 ]
- >>308
「そのOSのデフォルトのコードページとかエンコードとか」というのが そもそも不明。
- 310 名前:デフォルトの名無しさん [2008/06/03(火) 18:18:44 ]
- >>308
OSごとにデフォで使われてる文字コードを完璧に判定することはできない。 同じ記述なら一括で置き換えればいいだけだし 共通する部分なら最初に開発した段階で 定数なり関数なり作ってそこに定義しておくべきだった。
- 311 名前:デフォルトの名無しさん mailto:sage [2008/06/03(火) 19:03:49 ]
- >>308
OS名や環境変数で、ある程度は判別できるだろうね。
- 312 名前:デフォルトの名無しさん mailto:sage [2008/06/03(火) 20:04:39 ]
- >>311
> OS名や環境変数で、ある程度は判別できるだろうね。 「そのOSのデフォルトのコードページとかエンコードとか」が存在するかどうか とか、それを守っているのかとか、そもそも一貫性があるのかとか はいちいち調べないとね。
- 313 名前:デフォルトの名無しさん mailto:sage [2008/06/03(火) 20:21:42 ]
- 出力の話なんだから環境変数LANGみて空ならCP932にするだけで
ほぼ解決しないかな?
- 314 名前:デフォルトの名無しさん [2008/06/03(火) 21:48:18 ]
- 中国とかフランスとかドイツの Windows って、環境変数 LANG に何て設定してあるの?
- 315 名前:デフォルトの名無しさん [2008/06/03(火) 22:25:52 ]
- そもそもUNIX系OSには「OSのデフォルトのコードページとかエンコード」なんて概念自体無いわけだが。
LANGはOSのデフォじゃなくて、「その人が端末に表示したいエンコード」。 端末装置はユーザごとに異なるのが当たり前・・・というUNIXの基本を忘れてるよ。 んで、メンド臭いなら全部 UTF8 にしたら? 今時のWindowsのメモ帳ならUTF8開けるよ。
- 316 名前:デフォルトの名無しさん mailto:sage [2008/06/03(火) 22:29:21 ]
- Unix環境なら
use open ":locale"; とかでよきに計らってくれるようだが Win32だと良い方法はないかも
- 317 名前:デフォルトの名無しさん [2008/06/03(火) 22:32:43 ]
- > use open ":locale";
これも駄目。 何故なら、プロセスの実行環境と、その出力を閲覧するユーザのlocaleが一致する保証は無いから。
- 318 名前:デフォルトの名無しさん mailto:sage [2008/06/03(火) 22:36:41 ]
- >>317
それが「いい」か「だめ」かはケースバイケースでしょ。 それで少なくとも伝統的なUnixのI18N/L10Nプログラムと同じ動作にはなる。 Cでsetlocale(LC_CTYPE, "")するのとほぼ同じだから。 無論、設定ファイルや何かでオーバーライドできるようにすることが 望ましいけどね。
- 319 名前:デフォルトの名無しさん mailto:sage [2008/06/03(火) 22:37:25 ]
- >>313
他国語版使ったこと無いから知らんけど、cp932が有効なのが そもそも日本語版Windowsだけなんじゃないかな。 >>314 中国はbig5?(と思ったら、Windowsでは、GB2312(cp936)らしい??) フランス等ラテン語件はlaten-1(ISO-8859-1)なんじゃね?(cpだと1252) >>316 VCからなら、locale取得したり、変更したりする関数があったハズ。 Win32APIから叩けそうな気がするけど、どうなんだろ。 まあ、日本語環境のみで使用するってんなら、>>313でええかも。
- 320 名前:305 [2008/06/03(火) 23:32:11 ]
- >>306
CGIでPerlをかじりました。 実行ファイルにしてしまえば(自分のパソコンにはperl入ってるので不要ですが)Perlで問題ないと思いました。 Perlではwindowsを操作するようなプログラムはかけないなんてことはないと思ってたんですが。 特に簡単なのなら言語なんてほとんどなんでもいいのかと。 >>307 win32apiとやらを調べてみます。
- 321 名前:デフォルトの名無しさん [2008/06/04(水) 01:36:05 ]
- >>315
UNIXのメモ帳で端末のエンコードが変更できるんですか? エンコードの概念が無いなら、いったいどうやって漢字を表示するんでしょう? テキストファイルをopenするのに、いったい何のコードでデコードすればいいんでしょう?
- 322 名前:デフォルトの名無しさん mailto:sage [2008/06/04(水) 02:00:32 ]
- >>321
> UNIXのメモ帳で端末のエンコードが変更できるんですか? 「UNIXのメモ帳」という謎の概念が提示されました。
- 323 名前:デフォルトの名無しさん mailto:sage [2008/06/04(水) 02:01:13 ]
- viとemacsの戦い
- 324 名前:デフォルトの名無しさん mailto:sage [2008/06/04(水) 02:02:10 ]
- ああ、いるんだよ。別なOSを「別なWindows」だと思ってるやつ。
- 325 名前:デフォルトの名無しさん mailto:sage [2008/06/04(水) 02:08:47 ]
- しばらく俺の雇用は安泰だな
- 326 名前:デフォルトの名無しさん mailto:sage [2008/06/04(水) 04:11:02 ]
- まあ、確かにメモ帳ライクな外見&操作を意識したテキストエディタはあるけどな。
それならUNIXのメモ帳と言っても何ら差し支えは……。
- 327 名前:デフォルトの名無しさん mailto:sage [2008/06/04(水) 05:04:24 ]
- >>322
> > UNIXのメモ帳で端末のエンコードが変更できるんですか? これ全体が謎なんだな。
- 328 名前:デフォルトの名無しさん mailto:sage [2008/06/04(水) 07:03:52 ]
- >>320
Perlもモジュールだなんだでいろいろ出来るようにはなったけど 基本はテキスト処理をするための言語だぜ? ちょっとじかじったくらいなんだったら それに適した言語をかじり直したほうがたぶん早いよ
- 329 名前:デフォルトの名無しさん mailto:sage [2008/06/04(水) 08:25:15 ]
- >>320
win32apiをPerlから使うのは結構面倒なので、場合によるだろうけど、>>305をみると、Perlでコーディングする意味はないと思う。 やってで気ないことはないけど、適材適所ってヤツがある。 VBだと金がかかるという場合、もしVista使ってるならサイドバーガジェットという選択肢もあるかな。
- 330 名前:デフォルトの名無しさん mailto:sage [2008/06/04(水) 10:48:24 ]
- >>319
ちょっとやってみた感じだと、ActivePerlでもPOSIXモジュールのsetlocale()は 機能する模様(実際にはMSVCRTのsetlocale()を呼んでいるのだろう) use POSIX qw(locale_h) $old_locale = setlocale(LC_CTYPE, ""); とかやると、Japanese_Japan.932とかいう文字列が帰ってくる。 .の後ろがコードページのはず。 cygwinみたいにロケールが完全に腐ってる環境ではどうしようもないけどな。
- 331 名前:デフォルトの名無しさん mailto:sage [2008/06/05(木) 00:25:55 ]
- >>323
おーっと、ここで 「ed・はるみ」 が乱入w
- 332 名前:デフォルトの名無しさん mailto:sage [2008/06/05(木) 05:42:10 ]
- 帰れカス
- 333 名前:デフォルトの名無しさん mailto:sage [2008/06/05(木) 10:17:09 ]
- Kwaliteeってなんですか?
- 334 名前:デフォルトの名無しさん mailto:sage [2008/06/05(木) 15:09:00 ]
- $ ed
hello, world ? help ? quit ? exit ? q ? ? ? --help ? -help ? fuck ?
- 335 名前:デフォルトの名無しさん mailto:sage [2008/06/05(木) 16:18:29 ]
- ワロた
- 336 名前:デフォルトの名無しさん [2008/06/05(木) 20:11:12 ]
- open FILE, '<:utf8', "unko.txt";
read FILE, my $content, (stat FILE)[7]; close FILE; この (stat FILE)[7] の部分が、見た目が汚く感じるんですが もっと美しい書き方はありませんか? read FILE, my $content, 9999999999; とか、死んでもイヤです。 どっかのクソ言語の ReadAll メソッドみたいなのが欲しいです。
- 337 名前:デフォルトの名無しさん mailto:sage [2008/06/05(木) 20:13:08 ]
- open my $file, '<:utf8', "unko.txt";
my $content = do{local $/; readline $file} close $file;
- 338 名前:デフォルトの名無しさん mailto:sage [2008/06/05(木) 21:12:54 ]
- -s FILE
- 339 名前:デフォルトの名無しさん mailto:sage [2008/06/05(木) 21:16:32 ]
- >>336
っ[File::Slurp]
- 340 名前:デフォルトの名無しさん mailto:sage [2008/06/06(金) 00:13:26 ]
- my $content = join("",<FILE>);
- 341 名前:デフォルトの名無しさん [2008/06/06(金) 00:39:53 ]
- >>338
そっか、それがあったか。それ使わせてもらいます。感謝感謝。 あとの残りはクズですね。
- 342 名前:デフォルトの名無しさん mailto:sage [2008/06/06(金) 00:46:36 ]
- 全部読むなら$/をクリアするのが常套手段だろ。
- 343 名前:デフォルトの名無しさん [2008/06/06(金) 00:59:50 ]
-
OBJS = ${CSRC:.c=r30} .c.r30: ${CC} $< Makefile中の$<をPerlを使って置換してCCに渡すことは可能でしょうか? $<に含まれているスラッシュを\\に置き換えるために $< =~ s|/|\\\\|g このような置換を行いたいです。 環境はCygwinPerl5.8.8です。
- 344 名前:デフォルトの名無しさん mailto:sage [2008/06/06(金) 01:00:03 ]
- >>341
どうやって使うの?
- 345 名前:デフォルトの名無しさん [2008/06/06(金) 01:11:15 ]
- sub write {
($fileName, $text) = @_; open(FH, "+>$fileName"); print FH $text; close(FH); } こんな感じでファイルを出力するコード書いたのですが、 サブルーチン経由だとなぜか動きません サブルーチンなしだと正しくファイルが書き出されました なにがおかしいのでしょうか
- 346 名前:デフォルトの名無しさん mailto:sage [2008/06/06(金) 01:21:24 ]
- writeという標準関数があるから
- 347 名前:デフォルトの名無しさん mailto:sage [2008/06/06(金) 01:52:38 ]
- >>346
writeという標準関数の存在しりませんでしたが 今回はなぜこのコードが動かないかについてよろしくお願いします というのも、同じ仕様(関数名,引数,戻り値)を複数の言語で記述してみてるだけなのです
- 348 名前:デフォルトの名無しさん mailto:sage [2008/06/06(金) 02:11:42 ]
- 組み込み関数を再定義するためにはお作法がある。writeが再定義可能かは知らん。
perlsub読むか、親切に解説してくれるおせっかいが通りかかるのをまて。
- 349 名前:デフォルトの名無しさん mailto:sage [2008/06/06(金) 02:23:57 ]
- あ、なるほど そういう意味でしたか
文法自体はあってるんですね ありがとうございます
- 350 名前:デフォルトの名無しさん [2008/06/06(金) 02:35:57 ]
- &writeでもだめなのかな。
- 351 名前:デフォルトの名無しさん mailto:sage [2008/06/06(金) 08:19:33 ]
- >>349
ほかにどういう意味だと思ったんだ?
- 352 名前:デフォルトの名無しさん mailto:sage [2008/06/06(金) 08:22:01 ]
- >>343
makeのsubstやpatsubst関数じゃだめ?
- 353 名前:デフォルトの名無しさん mailto:sage [2008/06/06(金) 08:33:28 ]
- perlを始めたばかりなのですが、
foreachやwhile等で、何回目のループかをカウントしているような 変数は無いでしょうか? 自前で用意すればいいだけなのですが、そのような変数が無いかと思い 質問させて頂きます。
- 354 名前:デフォルトの名無しさん mailto:sage [2008/06/06(金) 11:20:21 ]
- あったとしても、時前で用意した方が他の人も読み易いんじゃないかな。
- 355 名前:デフォルトの名無しさん mailto:sage [2008/06/06(金) 11:57:16 ]
- そういえば、不精なPerlのハッカーたちは、foreachを使わずに全てforを使う……だなんて
どこかに書かれてたような気がするけど、実際どう? 自分は使い分けてる。
- 356 名前:デフォルトの名無しさん mailto:sage [2008/06/06(金) 12:02:27 ]
- 自分は for かな後ろ見りゃわかるし。
foreach で (;;) とかやらなきゃどっちでも良いとは思う。
- 357 名前:デフォルトの名無しさん mailto:sage [2008/06/06(金) 12:08:14 ]
- forもforeachも一緒じゃないの?ただのシンタックスシュガーかと思ってたけど
- 358 名前:デフォルトの名無しさん mailto:sage [2008/06/06(金) 12:17:35 ]
- >>357 それを前提として書いたつもり。
a) for my $n (0..9) {} b) foreach (my $n=0; $n<10; $n++) {} a は許容できるが、b は嫌かなってこと。
- 359 名前:デフォルトの名無しさん mailto:sage [2008/06/06(金) 12:21:56 ]
- for しか使わね。それと、C type の for は使わね。
- 360 名前:デフォルトの名無しさん mailto:sage [2008/06/06(金) 12:29:16 ]
- 俺も同じくforのみ
- 361 名前:デフォルトの名無しさん mailto:sage [2008/06/06(金) 13:32:56 ]
- どうでもいい。
んで、暗黙のループカウンタなんてあったら言語仕様としてきもい
- 362 名前:デフォルトの名無しさん mailto:sage [2008/06/06(金) 15:39:58 ]
- C言語の const 変数の様なのは定義できないでしょうか? perl 5.8です。
- 363 名前:356 mailto:sage [2008/06/06(金) 16:14:23 ]
- んー、やっぱforだけとかの人のほうが多いのね。
まさにPerlスタイル。 >362 use constantとかはー?
- 364 名前:デフォルトの名無しさん mailto:sage [2008/06/06(金) 17:02:47 ]
- use Readonly ;
>>361 $. は?w
- 365 名前:デフォルトの名無しさん mailto:sage [2008/06/06(金) 17:07:46 ]
- つまりキモイってことですよPerlはw
- 366 名前:デフォルトの名無しさん mailto:sage [2008/06/06(金) 17:19:32 ]
- 柔軟な頭を持ってない奴が負け惜しみを言ってますw
- 367 名前:デフォルトの名無しさん mailto:sage [2008/06/06(金) 17:23:44 ]
- ゴミを美味いと思う自分の狂った味覚を「柔軟さ」と主張する人生ですかw
- 368 名前:デフォルトの名無しさん mailto:sage [2008/06/06(金) 17:31:57 ]
- 君がゴミだと思って捨てていた部分は実は高値で取引される珍味でした。
- 369 名前:デフォルトの名無しさん [2008/06/06(金) 17:56:23 ]
- >>362
Cライクにやりたいなら use constant NAME => 'hoge'; ただし Perlでベアワードはメンドくさい。 "my name is NAME" とやっても展開されないから "my name is ".NAME とするしかない。 *NAME = \'hone'; これを使えば "my name is $NAME" で展開できる。 *C_STR = \'xxxx'; # 文字列定数。参照は $C_STR *C_NUM = \100; # 数値定数。参照は $C_NUM *C_ARRY = [1,2,3]; # 配列定数。参照は @C_ARRY *C_ASSOC = {k1 => v1,k2 => v2}; # ハッシュ定数。参照は %C_ASSOC
- 370 名前:デフォルトの名無しさん mailto:sage [2008/06/06(金) 18:04:39 ]
- >>368
まぁ、珍の字はニュアンスぴったりだと思うよ。 Perlの仕様を漢字一字で表せといったら、珍・奇・醜・糞あたりが有力だろうし。
- 371 名前:デフォルトの名無しさん [2008/06/06(金) 18:44:43 ]
- forは数値カウンタのときやCライクな使い方のとき。
配列から読み取るってときはforeachにしてるな。こっちはPHPぽい方で
- 372 名前:デフォルトの名無しさん mailto:sage [2008/06/06(金) 18:45:22 ]
- >>370
あれ?なんでわざわざこのスレに?
- 373 名前:デフォルトの名無しさん mailto:sage [2008/06/06(金) 18:50:29 ]
- ・上にあがってるから
・Perlを盲目的に全肯定するキチガイだけが住人ではないから
- 374 名前:デフォルトの名無しさん mailto:sage [2008/06/06(金) 19:03:32 ]
- 誰も全肯定なんてしとらんがな・・・
- 375 名前:デフォルトの名無しさん mailto:sage [2008/06/06(金) 19:41:58 ]
- それを言ったら、誰も負け惜しみなんて言ってないよな。
- 376 名前:デフォルトの名無しさん mailto:sage [2008/06/06(金) 20:34:35 ]
- >>373
ゲテモノだってのは認識しとる。
- 377 名前:デフォルトの名無しさん mailto:sage [2008/06/06(金) 21:41:28 ]
- >>352
レスありがとうございます。 substを使ってうまくいきました。 ありがとうございました。
- 378 名前:デフォルトの名無しさん mailto:sage [2008/06/06(金) 22:15:29 BE:477576296-DIA(100004)]
- まず匿名の臆病者は自分の (好きな|メインの) Lightweight Language を言えよ
- 379 名前:デフォルトの名無しさん mailto:sage [2008/06/06(金) 22:52:56 ]
- BER圧縮された数値(オフセット値、ID)のビット列に対し、
二分探索法を行なっている実装例ってありませんかね?
- 380 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 01:02:59 ]
- そういうのはCでやった方が
- 381 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 14:17:18 ]
- >>378
できるよ。 以上。 ↓次どうぞ
- 382 名前:デフォルトの名無しさん mailto:sage [2008/06/08(日) 00:21:35 ]
- ↑おつかれさまでした
- 383 名前:デフォルトの名無しさん [2008/06/08(日) 19:02:55 ]
- 他のファイルに変数を設定したファイルを用意し、
そのファイルを読み込み設定された変数を利用したいのですが、 どのようにすれば実現できますか?
- 384 名前:デフォルトの名無しさん mailto:sage [2008/06/08(日) 19:05:01 ]
- そのようにすれば
- 385 名前:デフォルトの名無しさん mailto:sage [2008/06/08(日) 19:13:01 ]
- そういうふうにプログラムすりゃいいでしょ
- 386 名前:383 mailto:sage [2008/06/08(日) 19:14:47 ]
- すみません。
サンプルコードなど頂けませんでしょうか?
- 387 名前:デフォルトの名無しさん mailto:sage [2008/06/08(日) 19:16:05 ]
- do "configs";
- 388 名前:デフォルトの名無しさん mailto:sage [2008/06/08(日) 19:17:30 ]
- D'OH !
- 389 名前:383 mailto:sage [2008/06/08(日) 19:19:09 ]
- reqireでできました。
阿呆しか答えてくれないので、聞く手間をかけずに調べれば良かったですね。
- 390 名前:デフォルトの名無しさん mailto:sage [2008/06/08(日) 19:26:32 ]
- reqireなんてあったか?
- 391 名前:383 mailto:sage [2008/06/08(日) 19:26:33 ]
- >>389は私ではありません。
requireも試してみたのですが、変数の値が継承されないようで うまくできませんでした。 >>387 ありがとうございます。 試してみたのですが、requireと同じように変数の値が継承されません。 doと言うものを調べたのですが、while文のdoしかなかなか見付からず 使い方が悪いのかも知れません。 すみませんが詳しく教えて頂けるとありがたいです。
- 392 名前:デフォルトの名無しさん mailto:sage [2008/06/08(日) 19:28:41 ]
- まず自分で調べる手間をかけずにいきなり聞くという方法で何か学ぼうとするのもなんだかなあ…。
何かを知ろう学ぼうとするなら知る学ぶ為の正しい手段を取るべきだと思うけどなあ…。
- 393 名前:デフォルトの名無しさん mailto:sage [2008/06/08(日) 19:42:06 ]
- >>391
perlfunc嫁
- 394 名前:デフォルトの名無しさん mailto:sage [2008/06/08(日) 19:49:07 ]
- 何ができないと言っているのかがわからない
- 395 名前:デフォルトの名無しさん mailto:sage [2008/06/08(日) 19:59:13 ]
- 1行ずつ読み込んでdoじゃだめなわけ?
- 396 名前:デフォルトの名無しさん mailto:sage [2008/06/08(日) 20:18:32 ]
- doはファイル名を引数に取るわけだが
|

|