Perlについての質問箱 37箱目at TECH
Perlについての質問箱 37箱目 - 暇つぶし2ch1:デフォルトの名無しさん
08/08/11 19:10:40
"The duct tape of the Internet" こと、Perlについての質問箱です。
"There's more than one way to do it" ということで、
Perlの奥深さについて皆で語り合い、追求してまいりましょう。

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

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

URLリンク(www.perl.org)
● 2008/08/11 現在の最新版(安定版): 5.10.0
● 2008/08/11 現在の開発版: 5.9.5

▼ 前スレ
Perlについての質問箱 36箱目
スレリンク(tech板)

リンク集は>>2-3
Perl 日本語処理の基礎の基礎 >>4
過去スレは>>5-6 あたり

2:デフォルトの名無しさん
08/08/11 19:11:01
[プログラミング自体の経験が無い奴はまずココを読め]
Perlプログラミング講座: URLリンク(www.site-cooler.com)

[本]
リャマ: URLリンク(www.oreilly.co.jp)
駱駝: URLリンク(www.oreilly.co.jp)
Effective Perl: URLリンク(www.ascii.co.jp) (修正)
クックブック: URLリンク(www.oreilly.co.jp)
Perl ベストプラクティス: URLリンク(www.oreilly.co.jp)
Perl Hacks: URLリンク(www.oreilly.co.jp)

[オンラインマニュアル]
最新のドキュメント: URLリンク(search.cpan.org)
perl5.8.xのドキュメント(一部): URLリンク(www.kt.rim.or.jp)
perl5.005_03 のドキュメント: URLリンク(www.kt.rim.or.jp)
日本語ドキュメント検索: URLリンク(www.cpan.jp) (停止中)
perldoc.jp: URLリンク(www.perldoc.jp)
perldoc.com: URLリンク(www.perldoc.com)

3:デフォルトの名無しさん
08/08/11 19:11:21
[モジュール]
CPAN.com: URLリンク(search.cpan.org)
河馬屋二千年堂: URLリンク(homepage3.nifty.com)

[テクニック]
Perlメモ: URLリンク(www.din.or.jp)
Perlのページ: URLリンク(homepage1.nifty.com)
Perlの小技: URLリンク(homepage3.nifty.com)

[Perl 5.8 Unicodeメモ]
URLリンク(www.rwds.net) (修正)
URLリンク(www.namazu.org)
URLリンク(www.lr.pi.titech.ac.jp)

4:デフォルトの名無しさん
08/08/11 19:11:45
#  [Perl 日本語処理の基礎の基礎]
# このレスは、Windows の ActivePerl で日本語処理を行う場合のテンプレートです。
# このレスの内容をそのまま、UTF8 形式のソースファイルに保存して下さい。
# 入出力ともシフトJIS形式のファイルまたはDOS窓を想定しています。
# まず、以下の行を先頭に入れて下さい。
use utf8;
use open IO => ":encoding(cp932)";
binmode STDIN => ":encoding(cp932)";
binmode STDOUT => ":encoding(cp932)";
binmode STDERR => ":encoding(cp932)"; # ※1
use Encode;
# 次に、あなたが実行したい処理の内容を入れて下さい。
$file = 'C:/なんたら/かんたら.txt';
open my $fh, '<', encode("cp932", $file) or die $! ; # ※2
print <$fh>;
# 以上の内容は、日本語処理が解らない人でも、とりあえず日本語処理ができてしまう
# おまじないです。条件が異なる場合の対処方法は、ご自分で勉強して下さい。
# 【注】※1.の行を入れると、DOS窓への日本語出力は簡便になりますが、
# ソースファイル名に非ANSI文字が含まれる場合にdie 文の出力が失敗します。
# ※2.OSに渡す文字列(ファイル名,dosコマンドのオプションなど)は、
# この例のようにcp932でエンコードする必要があります。

5:デフォルトの名無しさん
08/08/11 19:12:05
1 URLリンク(pc.2ch.net)
2 URLリンク(pc3.2ch.net)
3 URLリンク(pc2.2ch.net)
4 URLリンク(pc2.2ch.net)
5 URLリンク(pc5.2ch.net)
6 URLリンク(pc5.2ch.net)
7 スレリンク(tech板) (事故により消滅)
8 スレリンク(tech板) (事故により消滅)
9 スレリンク(tech板)
10 スレリンク(tech板)
11 スレリンク(tech板)
12 スレリンク(tech板)
13 スレリンク(tech板)
14 スレリンク(tech板)
15 スレリンク(tech板)
16 スレリンク(tech板)
17 スレリンク(tech板)
18 スレリンク(tech板)
19 スレリンク(tech板)
20 スレリンク(tech板)

6:デフォルトの名無しさん
08/08/11 19:12:26
[過去スレ2]
21 スレリンク(tech板)
22 スレリンク(tech板)
23 スレリンク(tech板)
24 スレリンク(tech板)
25 スレリンク(tech板)
26 スレリンク(tech板)
27 スレリンク(tech板)
28 スレリンク(tech板)
29 スレリンク(tech板)
30 スレリンク(tech板)
31 スレリンク(tech板)
32 スレリンク(tech板)
33 スレリンク(tech板)
34 スレリンク(tech板)
35 スレリンク(tech板)
36 スレリンク(tech板)

7:デフォルトの名無しさん
08/08/11 19:50:16
前スレ過去ログ保存
URLリンク(www.23ch.info)

8:デフォルトの名無しさん
08/08/11 19:51:56
ちなみに前スレ寿命は
2008/07/09 - 2008/08/11

9:デフォルトの名無しさん
08/08/11 20:05:29
さすがPerlだ 日付の計算も簡単簡単

10:デフォルトの名無しさん
08/08/11 22:00:19
javaでもできるんだぜ

11:デフォルトの名無しさん
08/08/11 22:29:09
前スレ985
> binmode STDOUT => ":encoding(cp932)";
> ↑もしかして、これって、シフトJISで出力する、って意味だったの?
yes. 丸数字とかはJIS X 0208規格外の文字だから、
ENCODING名としてはShift_JISじゃなくてcp932を用いる必要がある。
上のは、「標準出力への出力時には、Perlの内部形式(UTF-8)文字列を
cp932に変換せよ」という意味になる。

12:デフォルトの名無しさん
08/08/11 23:22:04
>>11
後は任せた!
俺? 俺はほら、なんかアレだよ、腹、そう腹がちょっとな。うん。
じゃあそゆことで! できればこの世でまた会おう!

13:デフォルトの名無しさん
08/08/12 03:52:06
>>11
 cp932、っていうのが、perl国の言葉で、
「シフトJIS」って意味だったのね。

14:デフォルトの名無しさん
08/08/12 03:52:44
シャアの別名がキャスバルみたいな。
限られた身内しか知らないみたいな。

15:デフォルトの名無しさん
08/08/12 04:13:02
違うよ。全然違うよ。
CP932 は狭義の Shift_JIS 領域外の拡張文字も含むよ。

16:デフォルトの名無しさん
08/08/12 05:37:07
>>13

>>15にもう少し付け足しすると、
そもそも「cp932」ってのは、「マイクロソフト コードページ932」のことで、いわゆるMS社独自の拡張文字セットのこと。

で何が問題かって、そのMSが独自の日本語文字コードを策定する時に、「シフトJIS」をベースに拡張したんだけど、
なにをどう間違えたのか知らないが、一部文字の内部コードに本来の「シフトJIS」とは異なるコードを
割り当ててしまったために、いくつかの混乱が起こった。(特に「~」(全角チルダ、波線)とか有名。ほかにもいくつかある。)

つまり「cp932」は「シフトJIS」の別名ではないのは当然として、含むとか含まないとかでもない、
全く別の文字コードの一つとして認識していたほうがよいかと思う。(まあ現状、ほとんど同一視されてるけど)

ちなみにWindowsの一般的なテキストエディタ(秀丸、TeraPad、メモ帳もか?)とかで編集する時、
保存コードが「Shift_Jis」あるは「SJIS」とかになってるけど、
正確に言えばこれは間違いで、本来なら「cp932」としなければならない。
コマンドプロンプトでの出力は、プロパティに「コードページ932」と出てる。(コマンドで chcp と打ってみれ)
(その横に括弧書きで「日本語Shift-JIS」ってなってるけど・・)

17:デフォルトの名無しさん
08/08/12 09:23:36
もともと同じものだしね。unicodeとの対応関係が違って定義されてしまっただけなので、それ自体でみれば区別できない。本当にこんな状態にした先人は何やってんだよって感じです。勉強して愕然としました。

18:デフォルトの名無しさん
08/08/12 14:30:52
>>16
知らないって事は恐ろしいな。平気でこんな事が書けるなんて・・・

19:デフォルトの名無しさん
08/08/12 14:40:05
このスレも完全に馬鹿が馬鹿に教えるスレに成り下がったな

20:デフォルトの名無しさん
08/08/12 14:53:53
へ~、と思って読んでしまった
実際は違うの?

21:デフォルトの名無しさん
08/08/12 15:16:33
WikipediaのShift_JISの項目を見る限りでは、MSは日本のPCでの符号化形式を
考えるときにShift_JISの策定に関わってたうちの一社

JISがずっと後にシフト符号化形式についての規格を取り決めたときに
それとは矛盾する形の仕様にしちゃったので、当時のデファクト(今でも
WindowsのCP932で使われているもの)との矛盾が発生してしまった

そういう具合に読めるね

22:デフォルトの名無しさん
08/08/12 16:24:46
>>16 の文章を読むと
「マウスの付いたパソコンしか触ったことが無い世代が増えたね~」
って感じがするな。

23:デフォルトの名無しさん
08/08/12 16:53:39
生半可な知識でうだうだ書くよりも、「ググレカス」のほうがよっぽど親切だな。

24:デフォルトの名無しさん
08/08/12 18:14:17
文字コード総合スレ part3
スレリンク(tech板)l50


25:デフォルトの名無しさん
08/08/12 18:51:15
””ダブルコーテーションの中で、
->
を使うときは、半角スペースをあけて、
- >
とすれば、問題無いの?

26:デフォルトの名無しさん
08/08/12 22:32:28
>>16
恥ずかしい奴が増えたなwwwwうぇwwっうぇえww

27:デフォルトの名無しさん
08/08/12 22:42:08
どう恥ずかしいのか、根拠を尋ねると即トンズラw

28:デフォルトの名無しさん
08/08/12 23:31:16
前にも出たよね、長々と説明するんだけど、デタラメってやつ。
やっぱり精神病なのかな?

29:デフォルトの名無しさん
08/08/13 00:51:34
>>27
>>16 は比較的よく勉強していると思います。
めげずに精進を続けて欲しいです。

それはそれとして、前々スレの中盤あたりから、
回答すべき質問とそうでない質問の選別について、
みなさんセンシティブなんですよ。
その辺の空気も勘案して頂きたいところではあります。

30:デフォルトの名無しさん
08/08/13 01:47:36
== 1.分かる
@array = ("hoge","huga","hohoho");
print @array; # 展開されて表示される

=== 2.分からない
@array = ["hoge","huga","hohoho"];
print @array; # 参照が表示される
print @{@array}; # エラー

=== 3.分かる
$array = ["hoge","huga","hohoho"];
print $array; # 参照が表示される
print @{$array}; # 展開されて表示される


参照勉強中ですが、これ2番目どうなってるんですか?
[ほげほげ]で帰ってくるのは無名配列の参照だから@arrayには代入できないと思ったらできるし
とおもったら@arrayの一つ目の要素に配列の参照が入ってるんですねprint $array[0]で参照がひょうじできましたありがとう

31:デフォルトの名無しさん
08/08/13 02:15:43
おもしろいとおもってるのかな…

32:デフォルトの名無しさん
08/08/13 02:38:11
そんなこといわないで

33:デフォルトの名無しさん
08/08/13 08:18:55
>>29
> >>16 は比較的よく勉強していると思います。
> めげずに精進を続けて欲しいです。

>>16は知らないことがあった場合、それを調べずに、思いつきの想像で補完する
異常者だから、精進はしないだろう。

34:デフォルトの名無しさん
08/08/13 10:02:58
正解は?ねえ正解はなんなの??

35:デフォルトの名無しさん
08/08/13 10:17:59
>>25
これは?

36:デフォルトの名無しさん
08/08/13 10:18:59
perlのコンソールレベルで、midiって鳴らせないの?

37:デフォルトの名無しさん
08/08/13 10:26:45
>>35
何か問題でも?

38:デフォルトの名無しさん
08/08/13 10:35:42
>>36
perlのコンソールレベルの意味がわからんが
インターフェースならMIDI::Music
ってぐーぐる先生が言ってた

39:デフォルトの名無しさん
08/08/13 10:37:35
ファイルの任意の行を読むのはどうすればいいのでしょうか?

40:デフォルトの名無しさん
08/08/13 10:48:36
ぐぐれ

41:デフォルトの名無しさん
08/08/13 10:56:13
>>37
いや、半角スペースさえ開ければ、
問題なく - >を使っていいのか、だめなのか、ってこと。

42:デフォルトの名無しさん
08/08/13 11:08:58
だからそもそも何が問題なんだよ
レスの内容が全く同じじゃ説明になってねえんだよこのナマコが

43:デフォルトの名無しさん
08/08/13 11:45:25
おちついて

44:デフォルトの名無しさん
08/08/13 11:46:04
>>41
大丈夫ですよ

次の方、質問どうぞ

45:デフォルトの名無しさん
08/08/13 12:06:26
>>44
逆に、->と、半角スペースをまったく空けずに
使うと、勝手にデリファレンスと解釈されてしまう
危険があるってことですよね?

46:デフォルトの名無しさん
08/08/13 12:55:04
URLリンク(www.google.com)

perlやべええ

47:デフォルトの名無しさん
08/08/13 13:02:11
>>41
そんなに気になるなら、
print "-" . ">";
とかすればいいだろ。

48:デフォルトの名無しさん
08/08/13 13:35:41
ちゃんとした変数のルールがぱっとでてこないけど
/\$([a-z0-9_]+)->[\[{]/iにマッチしちゃうと
アロー演算子として処理される可能性が高い

例えば以下は構文エラー
perl -e 'print "$test->{\n"'
perl -e 'print "$test->{}\n"'
perl -e 'print "$test->[\n"'
perl -e 'print "$test->[]\n"'


心配なら
my $arrow = '->';
print "${arrow}";
でいいんじゃね?







49:デフォルトの名無しさん
08/08/13 15:14:35
>>48
<q cite="URLリンク(perldoc.jp)">
識別子、つまり、英字か下線から始まってそれに英字、下線、
数字が続く文字列のことです。一部のケースにおいては ::
(あるいはやや古風な ') で分けられた識別子の並びであってもかまいません。
</q>

即ち use byte 相当の状態なら
/^[A-Z_a-z][0-9A-Z_a-z]*(?:(?:::|')[A-Z_a-z][0-9A-Z_a-z]*)*\z/

50:デフォルトの名無しさん
08/08/13 17:05:28
>>45
意図しないデリファレンスを避けたきゃ、変数名の範囲をブレースで囲めばいいだけだろ?
基本だぞ。>>48氏も一部で使ってるけど。
# 変な部分(作法の面で)はあくまでも例ということでご容赦。
$x = 'hoge' ;
$x->{hoge} = 'foo' ;
print "$x->{hoge}\n" ; # => foo が返る。ほんとは hoge->{hoge} を期待してたら↓
print "${x}->{hoge}\n" ; # => hoge->{hoge} (無用のデリファレンスを避けられる)


51:デフォルトの名無しさん
08/08/13 17:06:47
シングルコーテーションと.演算子を使うように心がければ何も悩む必要はない

52:デフォルトの名無しさん
08/08/13 18:32:06
┌────┐
│変数名─アドレス │
│                │
│   データ       │
└────┘
変数名が$hogeでデータがテステスの時
つまり$hoge = "テステス"の時、

print $hoge;だとデータ部分が表示されて
print \$hoge;だとアドレス部分が表示されるけど
print \\$hoge;も問題なく表示できると言うことは
この時内部的に\$hogeというアドレスをデータに持つリファレンスが生成されていて
その内部で生成されたリファレンスのアドレスが表示されていると言うこと?
つまりprint \\$hogeの裏側では↓こういうのが内部で行われてるんですか?

$hoge_reference = \$hoge;
print \$hoge_reference;

      ┌────┐
      │$hoge_r─\$hoge_r.│
      │                │
      │   \$hoge      │
      └──╂──┘
┌───╂─┐
│ $hoge ─ \$hoge │
│                │
│.    テステス     │
└────┘

53:デフォルトの名無しさん
08/08/13 19:23:54
>>52
> print $hoge;だとデータ部分が表示されて
> print \$hoge;だとアドレス部分が表示されるけど

ちがう

54:デフォルトの名無しさん
08/08/13 21:14:34
ちがわない

55:デフォルトの名無しさん
08/08/13 23:32:50
>>52
っ[Devel::Peek]

56:デフォルトの名無しさん
08/08/14 02:02:57
>>52
それであってるよ

57:デフォルトの名無しさん
08/08/14 17:55:33
print $hoge;
# $hoge の持つ値が表示される

print \$hoge;
# $hoge を指す参照を得て、その内部表現を文字列化したものが表示される

「データ部分」「アドレス部分」という表現には、この辺の理解不足感が漂っている。
>>52 がんがれ。

58:デフォルトの名無しさん
08/08/14 18:02:06
そこまで書かなかっただけだろ。

59:デフォルトの名無しさん
08/08/14 18:34:39
>>58
おまえの推測はどうだっていい。


60:デフォルトの名無しさん
08/08/14 18:41:43
質問自体は無視して語句の間違いの指摘に熱中する俺らはム板の鏡や!

61:57
08/08/14 20:12:44
>>60
質問自体は >>55,56 で解決だろうから放置。

語句の間違いは要点ではなくて、
その表現が出てくる背景を邪推してみた。

単に口下手というか慣れていないだけだったら
当方まったく的外れなのでスルー推奨。

>>53 の気持ちは分からないでもないけど、
「ちがう」で終わりではあんまりだろうと思い、
>>53 の感じたであろう、漠然とした「チガウ感」を
>>57 で言語化してみた。

余計なことだった。今は反省している気がする。

62:デフォルトの名無しさん
08/08/14 20:19:46
騙すのはいけないやな。

63:デフォルトの名無しさん
08/08/15 03:17:01
でもプログラムって
1文字違っただけで動かなくなるから
そういう性格の人が向いてるのかもね。

64:デフォルトの名無しさん
08/08/15 04:10:49
高校の数学をちゃんとやった人なら、
一つの値をもつものがスカラー、
複数の値を持つものがベクトル、
ということは覚えていますね。

、、、って参考書に書いてあるのだが、
英語読みだとベクター、日本語読みだと
ベクトルってことは、もしかして、
スカラーも、日本語読みで、スカトル、とかって
変な読みにされてた可能性もあるのかな。

65:デフォルトの名無しさん
08/08/15 04:13:49
my $hoge=q|a|;

say $hoge;
say \$hoge;

   ↓実行結果

a
SCALAR(0x1a9a6c4)

↑これはなに?

66:デフォルトの名無しさん
08/08/15 04:22:11
正規表現って、マッチと置き換え、そのほかに
なにか使い道ある?

(1)マッチ
(2)tr///使用の置き換え
(3)s///使用の置き換え

おおまかにわけて
この3つしかないとおもうんだけど。

67:デフォルトの名無しさん
08/08/15 04:32:37
system ('notepad.exe','abcde.txt');

これでメモ帳が開ける
感動

68:デフォルトの名無しさん
08/08/15 04:33:50
sysytem ('aaa.midi');

↑こんくらいのカンタンな文法で
midiを鳴らすってできない?

69:デフォルトの名無しさん
08/08/15 04:36:05
板違いです。

70:デフォルトの名無しさん
08/08/15 05:09:24
このスクリプト、思い付きをすぐ投げてくるだけじゃなくて
突っ込みどころを用意してくるから食いつく人が出るんだよね。

71:デフォルトの名無しさん
08/08/15 06:07:05
大手大企業に勤める俺が簡単に説明してやろう。
100人以上見てきたけど、この傾向だけは異論を許さない。


[クラス1]MARCH:テキストや本を見て仕事をする


[クラス2]旧帝大、早慶:テキストや本の原理を理解して仕事する。


[クラス3]東大、京大:テキストや本の原理を新たに創造する。

72:デフォルトの名無しさん
08/08/15 06:15:59
誤爆したと書かないことに異論を唱えたい

73:デフォルトの名無しさん
08/08/15 06:42:54
URLリンク(books.google.co.jp)

↑これで、ファイヤフォックスが起動して、
グーグルブック検索のページが開くよ!
すごいね!

74:デフォルトの名無しさん
08/08/15 06:44:07
>>73はまちがえた。

system ("C:/Program Files/Mozilla Firefox/firefox.exe","URLリンク(books.google.co.jp)
100&as_brr=0&btnG=Google+%E6%A4%9C%E7%B4%A2&as_epq=&as_oq=&as_eq=&as_brr=0&lr=lang_ja&as_vt=
perl&as_auth=&as_pub=&as_drrb=c&as_miny=&as_maxy=&as_isbn=");

↑これで、ファイヤフォックスが起動して、
グーグルブック検索のページが開くよ!
すごいね!

改行はエディタで手動でつないでね!

75:デフォルトの名無しさん
08/08/15 06:45:42
(1)
ところで、rubyのときは、IEを起動するには
win32APIを使わないとだめだって言われたんだけど、
なんでPerlはWin32APIを使わないでもファイヤフォックスを
起動できるの?

(2)
Perlもwin32APIを使えるの?
もし使うとしたらどういう時?
CD-ROMドライブのフタをあけたいときとか?

76:デフォルトの名無しさん
08/08/15 09:15:03
(3)
どうしてググらないの?どうして自分で調べようと努力しないの?

77:デフォルトの名無しさん
08/08/15 10:38:06
use feature qw( :5.10 );

my $a;
$a=<>;
say qq|$a|;

↑これでキーボードから入力してエンター押すと、
キーボードから入れた文字列が画面に表示されるんだけど、
<stdin>って書かなくてもいいの?

78:デフォルトの名無しさん
08/08/15 11:09:33
(4)
どうして自分で実際に試した、目の前の現実を信用できないの?

79:デフォルトの名無しさん
08/08/15 11:20:29
use utf8;
use open IO => ":encoding(cp932)";
binmode STDIN => ":encoding(cp932)";
binmode STDOUT => ":encoding(cp932)";
binmode STDERR => ":encoding(cp932)";
use Encode;

use feature qw( :5.10 );
$|=1;
#----------------------------------

my $a;
my $c=1;
my @d;
for ($c=1;$c<=7;$c=$c+1){
print "$c"."文字目"; #←●1
#print "$c文字目"; #←●2
$a=<>;
chomp $a;
push (@d,$a);
}

say qq|\n|;

my @b;
say q|ソートの結果は、、、|;
@b=sort @d;
say qq|@b|;
---------------------------
↑これで、●1は動くのですが、●2にするとエラーになります。
実質的に1と2は同じもののはずなのに、なぜでしょうか?

80:デフォルトの名無しさん
08/08/15 11:30:50
>>78
アスベスト吸って、肺に入って、
中皮腫になるまで、20年間ありますよね。

81:デフォルトの名無しさん
08/08/15 11:41:42
このスレって、年齢分布、どれくらい?

10台 ■
20台 ■
30台 ■■■
40台 ■■■■
50台 ■■■■■■■■

↑こんな感じ?

82:デフォルトの名無しさん
08/08/15 11:48:06
print "$c 文字目";
これだとエラー出ないんだよね。

print "$c文字目";
これだと、エラーになる。

どうも、
$c文字目
これ全部をスカラー変数だと思い込んでるみたい。
半角スペース空けないとだめなのかな。

83:デフォルトの名無しさん
08/08/15 12:00:25
>>50読め

84:デフォルトの名無しさん
08/08/15 12:02:07
>>79
>>82

use utf8;
use open IO => ":encoding(cp932)";
binmode STDIN => ":encoding(cp932)";
binmode STDOUT => ":encoding(cp932)";
binmode STDERR => ":encoding(cp932)";
use Encode;

$c文字目 = 100;
print $c文字目,"\n";

$文字目 = 200;
print $文字目,"\n";


85:デフォルトの名無しさん
08/08/15 12:03:42
$うんこ = 300;
print $うんこ,"\n";

86:デフォルトの名無しさん
08/08/15 20:25:17
今日、参考書を読んでいて、
use English
という、ステキ構文を発見した。

おまいら、ちゃんとこういう便利なものは
おしえてくれなきゃ

87:デフォルトの名無しさん
08/08/15 20:27:39
perlってさ、データーを放り込むのに

(1)<stdin>でキーボードから打つ
(2)<>でキーボードから打つ
(3)ファイル名を指定して、ファイルごと食わす
(4)引数で入れる perl abc.pl abcdeみたいな
(5)#!usr/local/bin/perlを指定して、perlを省略して食わすabc.pl abcdeみたいな
(6)ファイルごと食わして、その処理結果を別ファイルに出力する perl <a>bみたいな

以上の6つのやり方があるよね

88:デフォルトの名無しさん
08/08/15 20:56:02
落書きはチラシの裏にしろ

89:デフォルトの名無しさん
08/08/15 22:29:30
プロトタイプについて質問です。


通常、サブルーチンにプロトタイプを付けて記述し、コードの先頭付近で

 sub Func1( \@ ) ;

とでも書いておき、そのあと実際に呼び出すときは

 Func1( @array );

と書けば自動的に配列のリファレンスが渡されます。
また、このときスカラーなど間違った変数を渡すとエラーとなりますよね?


モジュール HogeHoge.pm のパッケージ HogeHoge 内に同様のサブルーチンを記述したとします。
このモジュールの先頭付近で

 package HogeHoge ;
 sub Func1( \@ );

と書いてみたのですが、うまく機能しているように見えません。
自動的にリファレンスが渡されるわけでも、別の変数を渡した時にエラーが起きるわけでもありません。
書いても書かなくても同じ挙動に見えます。

どのように記述するのが正しいのでしょうか?

90:デフォルトの名無しさん
08/08/15 22:45:49
プロトタイプは引数の型チェックをするために使うものではなく、
変則的な呼び出し方をする一部の組み込み関数を再定義するときだけ使うもの。
リファレンスを渡したいなら明示的にリファレンスを渡すほうがよい。

91:デフォルトの名無しさん
08/08/15 22:52:51
モジュール化する以上、自分が使うとも限らないですし(数ヵ月後の自分は他人だ)
エラーを出せるなら出して欲しいんですよね。


92:デフォルトの名無しさん
08/08/16 16:53:21
Perlで、listでなくてset(集合)のデータ型を提供するような
ステキなモジュールはありますか?
CPANを探しているんですが、なかなか見つからなくて・・・

Pythonに組み込みで存在するアレです

93:デフォルトの名無しさん
08/08/16 17:16:36
質問

use Win32::FileOp qw(ShellExecute);


ShellExecute('open', 'notepad.exe');

↑このコードをコピペして実行したら、
Can't locate Win32/FileOp.pm in @INC (@INC contains: C:/Per
at untitled1.pl line 1.
BEGIN failed--compilation aborted at untitled1.pl line 1.

というエラーが出ました。
ひょっとして、Win32::FileOpは標準で入っていないの?

94:デフォルトの名無しさん
08/08/16 17:42:56
>>89
=== HogeHoge.pm ===
package HogeHoge ;
use Exporter;
use vars qw(@ISA @EXPORT) ;
use subs qw( Func1(\@) ) ;
@ISA = qw(Exporter);
@EXPORT = qw(Func1 );

sub Func1 (\@){ print qq{42\n} ;}
1;
=== hoge.pl ===
use HogeHoge ;
my @arr = (1) ;
Func1 @arr ;
# my $var = 1 ;
# Func1 $var ;
=== 実行 ===
perl hoge.pl
42

95:デフォルトの名無しさん
08/08/16 18:57:09
>>93
また質問中が湧いたか
そのくらいてめぇで調べろ、ぼけ


96:デフォルトの名無しさん
08/08/16 20:01:15
>>92
URLリンク(search.cpan.org)
union intersection complement 辺りの思いついた語で CPAN 漁ってて見つけたもの。

Python 知らないしこれを使ったこともないので素敵かどうかはわかりませんが。

97:デフォルトの名無しさん
08/08/16 21:29:04
@a=<stdin>;

↑これやったら、永遠にキーボード入力の
フェーズから、抜けられない?

98:デフォルトの名無しさん
08/08/16 21:32:56
EOFを送れ。
UNIXならCtrl+D, WinならCtrl+Z(多分)

99:デフォルトの名無しさん
08/08/16 22:02:16
古い参考書読んでたら、

「Perlでは残念だがらユニコードは使えません」

とかって書いてある。いったいいつから
使えるようになったんだ?

100:デフォルトの名無しさん
08/08/16 22:03:10
use diagnostics;

↑これって普通に使うの?
テンプレには記載がないようだけど。

101:デフォルトの名無しさん
08/08/16 22:07:29
URLリンク(www.donzoko.net)

これはいったいなんだよ
わろたよ

102:92
08/08/16 23:49:15
>>96
おおおっ、いい感じのモジュールですね
標準的な操作もきっちりサポートされてますし
サンクスです

>>100
strictやwarningsのプラグマと違って、
運用コードでは要らないかと
自分の場合、開発コードでも要否は微妙です

103:デフォルトの名無しさん
08/08/17 01:43:51
>>99
んなもん調べりゃすぐにわかると思うの。
自分の欲しい情報なのに、自分で調べずに他人に探させようとする質問には答えたくないの。

>>100
使いたかったら使えばいいと思うの。
マニュアル読んで有益かどうか判断がつかないなら試してみればいいと思うの。
「普通」どうかなんて、どこで誰が何やってるかによって変わると思うの。

で、「普通」を知ってどうしたいの?

104:デフォルトの名無しさん
08/08/17 09:17:40
>>103
そんなもん、なるべくデフォルトにあわせるのは
当然じゃないですか。

昔富士通のパソコン買ってひどい目にあったんだから。

105:デフォルトの名無しさん
08/08/17 09:20:44
ところで引数って

abc.pl d e f g
みたいにコマンドラインから入力するときに
渡すけど、これってスペースで区切られたら、
「ひとつの引数」
って認識ですよね。いまの例だと
dとeとfとgが引数。

だと、もしかして、perlってスペースを含む
文字列や数字は引数として渡すことはできないの?

たとえば
a b (半角のa、半角のスペース、半角のb)
を一つの引数としてコマンドラインから渡そうとしても、
14才のperlタンが勝手に、
「あーこれは一つの引数ねーホエー」
とかって勝手に処理してしまうんですよね?

106:デフォルトの名無しさん
08/08/17 09:59:08
いま使ってるエディターで、デバッグモードってのがあって、
それを使うと

Loading DB routines from perl5db.pl version 1.3
Editor support available.

Enter h or `h h' for help, or `perldoc perldebug' for more help.

main::(untitled6.pl:7): binmode STDIN => ":encoding(cp932)";

DB<1>

↑こんなのが出てくる。これってどう使えばいいんだろう?

107:デフォルトの名無しさん
08/08/17 10:06:33
perlってさ、clsってないんだね。
ゲーム作れないジャン。

108:デフォルトの名無しさん
08/08/17 10:29:38
自己レス
過去ログ読んだらあったわ

system q|cls|;

これでCLSできる。やりー

109:デフォルトの名無しさん
08/08/17 10:41:31
use feature qw( :5.10 );
use Time::HiRes 'sleep';
$|=1;
#----------------------------------

system q|cls|;
sleep(1);
my @a;
@a=('a','b','c','d','e');
my $b;
foreach $b (@a){
say $b;
sleep(1);
}

↑これで、画面をclsで消して、
キレイにしてから、ゆっくりと文字を出力できるよ。
感動。

110:デフォルトの名無しさん
08/08/17 10:53:13
use warnings;
use strict;
use diagnostics;

use utf8;
use open IO => ":encoding(cp932)";
binmode STDIN => ":encoding(cp932)";
binmode STDOUT => ":encoding(cp932)";
binmode STDERR => ":encoding(cp932)";
use Encode;

use feature qw( :5.10 );
use Time::HiRes 'sleep';
$|=1;
#----------------------------------
system q|cls|;

my @a;
@a=('ささやき','えいしょう','いのり','ねんじろ!');

my $b;
foreach $b (@a){
sleep(1);
say $b;
}

sleep(3);
say qq|\n\n勇者は灰になりました\n|;

↑やった!ウイザードリーだ!

111:デフォルトの名無しさん
08/08/17 11:05:25
>105
ここはPerlの質問スレだぜ?

112:103
08/08/17 11:09:45
>>104
富士通さんの製品がどう関係してるのかは知らないけど、
マジレスすると、Perl のデフォルトは、当たり前だけれど何も use しない状態。
「デフォルト」を「比較的多くの人が採用しているやり方」という意味で使っているなら、
標準モジュールや CPAN モジュールを読んで統計取るなりすればいいじゃない。
そして自分にとって有益であるか、または必要であるなら、
誰が使っていなくても使えばいいじゃない。

「よいとされているコーディングスタイル」を扱った書籍はいくつもあるし、
perlstyle マニュアルページにも情報があるんだけれど、
>>100 はどうやらそれらを調べていないようなので、
そーゆー質問は「自助努力の足りない教えて君」扱いされるの。

113:103
08/08/17 11:13:34
>>105
> だと、もしかして、perlってスペースを含む
> 文字列や数字は引数として渡すことはできないの?

できるの。


> 「あーこれは一つの引数ねーホエー」
> とかって勝手に処理してしまうんですよね?

ちがうの。

114:103
08/08/17 11:19:06
>>106
> Enter h or `h h' for help, or `perldoc perldebug' for more help.

help を見るには(DB<>プロンプトで) h と入力するか h h と入力するか、またはもっとくわしい help は perldebug マニュアルページを見れ

って書いてあるの。見てから質問して欲しいの。
てゆーか見てればこんな質問出てこないの。

115:103
08/08/17 11:33:11
>>107-110
日記は自分のブログにでも書いて欲しいの。
少なくともこのスレにはそういうのいらないの。


116:デフォルトの名無しさん
08/08/17 11:45:57
>>103のようなチンポしゃぶりがいる限り、寄生虫は出現しつづける。

117:103
08/08/17 12:32:20
>>116
だってかわいそうなんだもの。
この子がこのまま社会に出るなんて、ぞっとするんだもの。

118:デフォルトの名無しさん
08/08/17 13:58:33
>>117
社会に出て来ることを前提にするからそうなるわけで
社会が受け入れを拒めば良い。ニートも珍しくない時代だぜ。


119:デフォルトの名無しさん
08/08/17 14:00:35
>>117はすでに問題の寄生虫に依存している。



120:デフォルトの名無しさん
08/08/17 14:03:36
>>117
歪んだ持論で100に粘着したり、
「ぐぐれカス」で済むところをねちねち言ったり、
自治しようとしたり。

お前さんのウザさは、107と変らんよ。

121:103
08/08/17 16:33:09
>>118
ニートが社会に拒まれてそうなるというのは新説な気がするの。
どちらにしろそういう事例は少ないほうがいいと思うの。
でもこのスレでやるべきことじゃないとは思うので反省してる。

>>119
誰かボクを隔離して欲しいの。
でもこれ以上迷惑になるいけないのでがんばって自分で克服します。

>>120
ウザくてごめんなさい。
持論が歪んでるのは自覚があるので鵜呑みは危険と言っておくの。

ボクが言うのもなんだけど、みなさん気にせずPerlのお話しましょう。

122:デフォルトの名無しさん
08/08/17 17:08:03
なんかすごく怖くなってきた

123:デフォルトの名無しさん
08/08/17 18:19:19
>>110
これで、文章が表示されるのと合わせて、
音楽を鳴らしたいんだけど、
(本物のウイザードリーみたいに)
Perlだと実装はものすごく面倒なの?

124:デフォルトの名無しさん
08/08/17 18:27:00
みんな聞いてくれ!
スレリンク(php板:556番)
で、質問がでていたので、
スレリンク(php板:560番)
と、オレ様が、かっこよく回答しちゃったぜ!
ちなみに、あってるかどうかは、知りません

125:デフォルトの名無しさん
08/08/17 18:27:01
がんばって、あなたなら出来るわ

126:デフォルトの名無しさん
08/08/17 18:33:02
合ってないところがいいな。

127:デフォルトの名無しさん
08/08/17 18:46:30
統失で10年くらい入院したあと退院してPerlに目を付けたという感じか?

128:デフォルトの名無しさん
08/08/17 19:58:01
>>123
Win32::Sound

129:デフォルトの名無しさん
08/08/17 22:00:22
perldoc に関する質問です。

ある単語 foo に関する perl のドキュメントを読みたいが、

perldoc foo → No documentation found for "foo"
perldoc -f foo → No documentation for perl function `foo' found
perldoc -m foo → No module found for "foo"
perldoc -q foo → No documentation for perl FAQ keyword `foo' found

となるとき、すべての perl ドキュメントから foo を検索して、
どのドキュメントを見ればよいか表示するような機能はないでしょうか?

例えば __PACKAGE__ を調べようとしても上の4つではだめで、
最終的には perldoc perl の出力を眺めて当たりを付けて、

perldoc perldata

に辿り着きましたが、当たりを付けるまでに手間がかかります。

zsh のマニュアルの man zshall のように、インストールされているすべての
ドキュメントを連結表示するとかでもいいのですが。


130:デフォルトの名無しさん
08/08/17 22:36:17
aaa
aaaa
aaab
aaaaa
aaaab

参考書読んでて、
文字列ソートすると、こういう順番に
なります、と書いてあって、どうしても理解できなくて、
ホームページの正誤表みたら、誤植だった。
ただしくは
aaa
aaaa
aaaaa
aaaab
aaab
だった。なんでbが先にくるかなあ?と
1時間悩んだ。

131:デフォルトの名無しさん
08/08/17 22:48:22
>>129
力技。
find /usr/lib/perl5/5.10/pods -name '*.pod' | xargs grep -i KEYWORD | less
あとはGoogle DesktopやWindows Searchでドキュメントの領域を検索対象にするとか。


132:デフォルトの名無しさん
08/08/17 23:25:23
>>128
なんかすげー難しそう
1行書いたら音が出るみたいのを
イメージしてたんだけど、
HSPとかRPGツクールとかだと
音出すなんて簡単だったんだけど、
Perlでは難しいってことかな?

133:デフォルトの名無しさん
08/08/17 23:31:27
>>131

ありがとうございます。find | xargs grep | less 系のやり方をする
ことにしました。(あるいは同様のコマンド)


134:デフォルトの名無しさん
08/08/17 23:36:25
>>129
これってぼくも誰も作ってないのかなと思ってるんだけど、
やっぱり誰も作ってないのかい。

135:デフォルトの名無しさん
08/08/17 23:43:32
検索してたらこんなものを見つけてしまった

353 名前:名無しさん 投稿日:2001/02/08(木) 12:40
Perlで音を出すことって出来ないでしょうか。
処理が終了したときにちーんと鳴らしたいのですが。

URLリンク(www.angelfire.com)

136:デフォルトの名無しさん
08/08/18 00:05:14
>>128
やってみた。
かんたんだった。

use Win32::Sound;
Win32::Sound::Volume('100%');
Win32::Sound::Play("file.wav");
Win32::Sound::Stop();

↑これを書くだけで、できた。
Win32::Soundは最初から入っていた。

137:デフォルトの名無しさん
08/08/18 00:26:36
Win32::MIDIって使い方がよくわからんな。
midiを鳴らすときは、必ずWin32::MIDIでないとだめなの?
それとも、midiもWin32::Soundでいけるの?

138:デフォルトの名無しさん
08/08/18 00:54:45
perlでmidiファイルを鳴らす方法がまじでわからんわ。
midiファイルを指定して、すぐに鳴らすとかできないのかな?

139:デフォルトの名無しさん
08/08/18 01:00:59
>>134
順序が逆だっちゃ。
大量のドキュメントに対して grep などによる全文検索だけでは不便だから perldoc のセクション特定用の各オプションがある。

140:デフォルトの名無しさん
08/08/18 02:04:19
>>139
> 順序が逆だっちゃ。

これは順番の問題ではない。不便な全文検索が問題なら不便でない全文検索が
求められるだけのこと。

141:デフォルトの名無しさん
08/08/18 02:38:01
ま、いずれにせよ、「それを欲しい者がそれを作る」のが基本だべさ。

142:103
08/08/18 04:34:08
>>140
全文検索自体が不便つーことでなく、単純な全文検索だとどこからでもパターンを拾ってきちゃうから、-f だの -q だのがあんだべ、って話。
パターンがどのファイルのどこにあるか知るだけなら find, grep で特に不便もないし、それ用の Perl スクリプトを書いても2分てとこだろ。

143:デフォルトの名無しさん
08/08/18 04:37:30
>>142
> パターンがどのファイルのどこにあるか知るだけなら

そんなのじゃ不便過ぎるだろ。


144:デフォルトの名無しさん
08/08/18 07:43:42
不便に思ったことないんだがどんな使い方がしたいんだ?

まさか初めてのPerlすら持ってない奴の戯れ言じゃないだろうな……

145:デフォルトの名無しさん
08/08/18 07:49:29
子供はHSPでも使ってろ

HSPには可変長配列は無いがな!!(まさに外道)

146:デフォルトの名無しさん
08/08/18 12:55:44
アセンブリを外道と言うな。

147:デフォルトの名無しさん
08/08/18 15:27:11
夏だなあ

148:デフォルトの名無しさん
08/08/18 15:43:15
確実にここではないと思うのですが、どこなのか分からなくてスミマセン。

perl書くときに $ とか %#"'() など良く打つと思いますがshift押さずに入れるように
するようなソフトや方法はありますでしょうか?

数字はテンキーがあるのでキーボードの1~9の範囲は全部記号にしたいのですが。

149:デフォルトの名無しさん
08/08/18 16:39:16
>>134
もう数年前になるけど、大学の研究室に、Perl関係のドキュメントを
インクリメンタルに全文検索でひけるソフトがあった。

Rubyで書かれていたけどw


150:デフォルトの名無しさん
08/08/18 17:10:00
active perlでのforkについてです

子プロセスの上限を決めてforkで処理するのに、
pidをpushしていって、上限を超えたらいちばん古い子プロセスをwaitpidしていますが、
たまたまそいつが遅いと他のプロセスはとっくに終わってるのに先頭のを待ち続ける、
というはめになります

pidのリストのうち、どれか一つ終わったら、という処理をさせるには
どうすればいいですか

151:デフォルトの名無しさん
08/08/18 17:31:18
>>150 $SIG{CHLD} じゃダメ?

152:デフォルトの名無しさん
08/08/18 17:31:28
>>150
っ[Parrallel::ForkManager]

153:デフォルトの名無しさん
08/08/18 17:51:40
>>148
スキャンコードをリマップすることにより可能。
方法は OS 等により異なる。使用 OS の板・スレで聞くといい。

154:デフォルトの名無しさん
08/08/18 18:05:26

勉強してみます

155:デフォルトの名無しさん
08/08/18 18:05:41
154=150

156:デフォルトの名無しさん
08/08/18 18:41:09
WAVEを鳴らすのは、カンタンにできたんだけど、
midを鳴らす方法がわからない。
MP3については、mediaplayerなんとか、っていうモジュールを
使えばいいみたいなんだけど、ppmでダウンロードのリストに入ってない。

157:デフォルトの名無しさん
08/08/18 18:43:28
数字をランダムジェネレートして、
アルファベットの小文字と大文字
a-z,A-Zにchrを使って変換して表示する
プログラムを作ろうと思ったんだけど、
65-120だと、まんなかに、余計な記号が入ってしまう。

この場合、if 95<x<98 then redo
でいいのかな?
もし記号の数字だったら、ルーレットをまわした結果を
破棄して、もう一度ルーレットをまわすって言う。

158:デフォルトの名無しさん
08/08/18 18:45:00
ようは、randで、65-95、かつ95-120の数字がほしい、
って指定できればいいんだけど、できないんだよね。

他の言語だとできるの?

159:デフォルトの名無しさん
08/08/18 18:46:09
>>158
まちがえた。

○ようは、randで、65-95、かつ98-120の数字がほしい、

160:デフォルトの名無しさん
08/08/18 19:19:20
>>157 発想を変えてみる
@str = (a..z,A..Z);
print $str[rand(@str)];


161:デフォルトの名無しさん
08/08/18 20:25:45
>>160
なんもプリントされないんだけど。

162:デフォルトの名無しさん
08/08/18 21:08:40
こうですか?

$x = int(rand(52));
print chr(($x + ($x % 2) * 63+ 130)/2);


163:デフォルトの名無しさん
08/08/18 21:17:41

my $a;

do {
$a=int(rand(123-65)) +65;
say "fault!";
} while ($a<=96 or $a>=91);


print $a;


↑これやると無限ループになる。なんで?

164:デフォルトの名無しさん
08/08/18 21:20:53
>>163
自己解決した。
orじゃなくてandだった。

こんな難しいバグも一人でデバッグできるオレ様の単価は
120万円/月くらいですか?

165:デフォルトの名無しさん
08/08/18 21:29:18
my $a;
my $b;
for ($b=1;$b<=8;$b=$b+1){
do {
$a=int(rand(123-65)) +65;
} while ($a<=96 and $a>=91);


print chr($a)," ";
}


↑やったーパスワード発生器できたよー

166:デフォルトの名無しさん
08/08/18 21:34:31
system q|cls|;
my $a;
my $b;
for ($b=1;$b<=8;$b=$b+1){
do {
$a=int(rand(123-65)) +65;
} while ($a<=96 and $a>=91);

sleep(0.5);
print chr($a)," ";

}
print "\n";

↑こっちのほうが、ちょっとかっこいいかな?

167:デフォルトの名無しさん
08/08/18 21:46:46
今、考えてるのは、
配列に、3つの要素が入ってるとして、
その3つの要素を連結して、一つの文字列にして、
スカラー変数にいれるということ。

@a=('a','b','c')
だとして、
$b="abc"
にしたいということ。

自分で考えるから、おまいら、絶対に正答を書くなよ!
いいか、絶対に書くなよ!

168:デフォルトの名無しさん
08/08/18 21:50:53
sub genpass {
    my @chars = (0..9, "A".."Z", "a".."z");
    join "", map { $chars[rand(@chars)] } 1..8;
}
print genpass(), "\n";

169:デフォルトの名無しさん
08/08/18 21:55:05
>>168
こ、これは、、、
スカウターの数字が、、、
パールレベル12を超えてるだと?!

170:デフォルトの名無しさん
08/08/18 22:01:36
これ以上このスレに常駐するなら、あぼーんするからコテつけてくれ。

171:デフォルトの名無しさん
08/08/19 00:11:06
use feature qw( :5.10 );
use Time::HiRes 'sleep';
$|=1;
#----------------------------------

system q|cls|;
my $a,$b,@c,$e;

for ($e=1;$e<=5;$e=$e+1){ #外側のforループ
for ($b=1;$b<=3;$b=$b+1){ #内側noforループ
do {
$a=int(rand(123-65)) +65;
} while ($a<=96 and $a>=91); #do-while文


push(@c, chr($a));#生成したランダム文字を配列にプッシュ

}

my $d;
$d=join ("",@c);#配列に格納されている文字をスカラー変数に代入

say "$d";#文字を出力
@c=();#配列を初期化
}
#----------------------------------------

↑やったー
ランダムな3連文字列を5回出力することに成功
あとはソート部分のロジックだけだー

172:デフォルトの名無しさん
08/08/19 00:14:45
>>168
実を言うと、

>print genpass()

ここがわからなかったりする。
無名サブルーチンの呼び出し?
サブルーチンを呼び出して、その返り値を
プリントしている?

173:デフォルトの名無しさん
08/08/19 00:22:56
randの引数に、配列を入れるってのは、ありなのか?

174:デフォルトの名無しさん
08/08/19 00:25:31
ありだよ。

175:デフォルトの名無しさん
08/08/19 00:25:54
レベル低い質問ばっかりだな

176:デフォルトの名無しさん
08/08/19 00:26:48
>>175
妬むなよ!


177:デフォルトの名無しさん
08/08/19 00:27:05
レベル低い煽りばっかりだな

178:デフォルトの名無しさん
08/08/19 00:28:28
そりゃ、初心者の廚が常駐してんだもん、
レベルの高い質問になるわきゃねえ。

まあ、夏休みが終るまでの我慢我慢。

179:デフォルトの名無しさん
08/08/19 00:44:47
夏休みであって欲しいとか小中学生であって欲しいとは思う。

180:デフォルトの名無しさん
08/08/19 01:03:15
>>168
見ればみるほどすごいわ
天才だろこれ

181:デフォルトの名無しさん
08/08/19 01:53:07
>>180
grepやmapは暗黙的なloopを構成できるので、
馴れればすぐにそれっぽく書けるようになるよ。

182:デフォルトの名無しさん
08/08/19 01:56:59
さーせん、xmlの変更処理で、簡単で短いコードを教えてください。
検索処理ではなく、変更処理っす、文字列でなく、xml文章として扱って変更するタイプ。
入力xmlは、標準入力かファイル名、出力するxmlは標準出力
処理前xml
<xml? ....ありきたり>
<root:yesroot>
<!-- subtree -->
<subt e='befoore' />
</root:yesroot>

変更後xml
<xml? ....ありきたり>
<root:yesroot>
<!-- subtree -->
<subt ele='after' />
</root:yesroot>

自分で作るにあたって参考にしたサイトは、
URLリンク(www.ibm.com)( 1 - 3)
なんですが、どうも簡単。ってレベルじゃないと”感じ”ました。
javac,c,python,rubyでやっても同じじゃん。みたいな。

183:デフォルトの名無しさん
08/08/19 02:11:33
>>181
みっともないやつだな

184:デフォルトの名無しさん
08/08/19 02:59:31
>>182
> 検索処理ではなく、変更処理っす、文字列でなく、xml文章として扱って変更するタイプ。

Perl は入力をほとんど常にバイト列として扱います。
XML として扱いたいなら XML::* モジュール郡を使ってください。

> javac,c,python,rubyでやっても同じじゃん。みたいな。

そういうことなら Perl にこだわる必要もないのでは?

185:デフォルトの名無しさん
08/08/19 10:54:11
CGIレベルでなくて、純粋なコンソールレベルの
perlの入門書を探しているんだが、あんまりないね。
結城さんのは読んだし、すぐわかるperlは今読んでるし。

186:デフォルトの名無しさん
08/08/19 14:08:22
Perl初めて塾 やさしいPerl [表計算的処理編]
ミニマルPerl
Perlクックブック Volume 1

等々あるけど、べつに結城本でもテキスト処理はカバーしてるよ。
CGIも処理の大半はテキスト処理だし

187:デフォルトの名無しさん
08/08/19 14:19:56
何でこんな変な文字列になるのですか?

$a = "\Q声";
print $a # => \申コ

188:デフォルトの名無しさん
08/08/19 14:24:45
\Q ... \E は英数字以外の文字にバックスラッシュを追加する

189:デフォルトの名無しさん
08/08/19 14:37:28
>>188
そうなんだ
サンクス

190:デフォルトの名無しさん
08/08/19 17:11:25
>>172
ヒント:

sub hogehoge(){
'Hello World!!';
}
print hogehoge(); #Hello World!!

191:デフォルトの名無しさん
08/08/19 19:53:40
>>190
なにか、名前はついてるんですか?
「サブルーチンの、無宣言呼び出し」とか。
名前がわからないと、本で調べることもできないし。

たぶん、このサブルーチンの呼び出し方は
入門書レベルでは解説ないですよね?

&をつけて呼ぶ方法しかのってないのが普通だと思う。

192:デフォルトの名無しさん
08/08/19 20:09:01
本が古いだけなんじゃ

193:デフォルトの名無しさん
08/08/19 20:31:06
ラクダ本だと「裸のワード」ってよばれてる。
$, @, & とかなくてクォーテーションで囲まれてない文字列をどう解釈するか。

@list = (hoge, hage);
print $list[1];

とかね。

194:デフォルトの名無しさん
08/08/19 20:41:57
>>191
>&をつけて呼ぶ方法しかのってないのが普通だと思う。
…いつの時代の人ですか?

195:デフォルトの名無しさん
08/08/19 21:02:35
…誰も突っ込まんから一応突っ込むが、
>>168はごくごく普通のサブルーチン
>>190はプロトタイプ付きのサブルーチン(引数を取らないと宣言している)

本人は解ってて書いてるのかも知れんが、
sub hoge(){
 my $dat = shift ;
 …
}
とかやる奴が出てきそうで怖い

ってここまで書いて初心者スレじゃない事を思い出した。ご丁寧に書く必要なかったな

196:デフォルトの名無しさん
08/08/19 21:30:42
初心者スレとかあるの?

197:デフォルトの名無しさん
08/08/19 22:03:03
webprogにあるよ

198:デフォルトの名無しさん
08/08/19 22:46:49
>>195
微妙に難しいな。
いや解説してくれたのはありがたいんだけど。
プロトタイプってレベル2だろ。

199:デフォルトの名無しさん
08/08/19 23:16:23
あっち池。

Perlコーディング初心者質問スレ Part 58
スレリンク(php板)
くだすれPerl(超初心者用)2
スレリンク(php板)


200:デフォルトの名無しさん
08/08/20 00:14:27
>>199
一時期そちら方面でもお見かけしたのですけれど、
どうも、その…、回答者の質がお気に召さないご様子でして、
大変光栄なことに、数を撃てばなにがしかの情報が引き出せて、
かつ適度に遊んでもらえるこちらに居を定められた模様なのですよ。

個人的に殿下には、同じあちらでも下記スレをおすすめ申し上げたい。
スレリンク(php板)l50

201:デフォルトの名無しさん
08/08/20 00:39:07
何度同じサイクルを回れば気が済むんだよ、チンポしゃぶりどもが。

202:デフォルトの名無しさん
08/08/20 00:54:32
おまえもな

203:デフォルトの名無しさん
08/08/20 01:09:57
おまえもな


204:デフォルトの名無しさん
08/08/20 01:17:11
おれらもな

205:デフォルトの名無しさん
08/08/20 01:17:56
おまえだけだよ

206:デフォルトの名無しさん
08/08/20 01:24:36
いやいやおまえもだろ

207:デフォルトの名無しさん
08/08/20 02:58:59
もういいです

208:デフォルトの名無しさん
08/08/20 14:06:12
いやいやよくない

209:デフォルトの名無しさん
08/08/20 15:22:53
こういうのははっきりさせとかないとな

210:デフォルトの名無しさん
08/08/20 20:06:37
正規表現って、
s///と、
tr///と、
m///と、
3つの種類しかないの?

211:デフォルトの名無しさん
08/08/20 20:13:12
つ split(//)

別にこれらが正規表現な訳では無い
これらのパターンマッチ関数で正規表現を使用しているという事

212:デフォルトの名無しさん
08/08/20 20:38:24
質問age

hoge.plは処理の中でlocaltimeを取得するんですが、hoge.pl自体の改修はせずに
実行時にlocaltimeを指定してやることは可能でしょうか?

別のhogehoge.plを作って、その中で指定した値をlocaltimeとしてhoge.plに渡して実行
みたいなことができるとベストなんですが。

213:デフォルトの名無しさん
08/08/20 22:30:23
意味不明

214:デフォルトの名無しさん
08/08/20 23:05:42
>>212
が言いたいのは、たぶん、
hogehoge.plの中味で、
$a=123456;
とかを指定。
そんで、
localtime=$a;
とかにする。そんで、
hoge.plを実行するときに、引数で渡す。

perl hoge.pl localtimeとか。
そしたら、hoge.plが、引数として渡された
localtimeを食って、localtimeとして実行する。

こんなイメージだと思う。違ってたら言って。

215:212
08/08/21 00:00:51
>>214
すいません、ちょっと違います。

hoge.plは純粋にlocaltimeを取得するだけで
引数をlocaltimeとして扱うという機能はありません。
例えば、実行するとそのときの時刻をテキストに書き込む、といった感じです。

実行したときの実際の時刻とは違う時刻を取得させたいのですが
hoge.pl自体を改修せずに実現できないものかと考えております。

216:デフォルトの名無しさん
08/08/21 00:28:35
最初から、そのhoge.plが、
引数を食うような設計になってないと、
無理なんじゃないかな。

217:デフォルトの名無しさん
08/08/21 00:33:33
ビルトイン関数をユーザ定義関数で置き換えることって出来なかったっけ?

218:デフォルトの名無しさん
08/08/21 01:13:12
# hogehoge.pl

chomp( my $the_world = `time /t` );
my $you_want = '00:00';
system( 'time', $you_want ) and die;
system( 'perl', '.\\hoge.pl' ) and die;
system( 'time', $the_world ) and die;

# そんなことやってると、もっと恐ろしいものの片鱗を味わうことになる。
# 今のうちにやめとけ。俺は止めたからな。

219:デフォルトの名無しさん
08/08/21 01:50:57
ビルトイン関数のオーバーライドはできるよ

220:デフォルトの名無しさん
08/08/21 02:25:11
localtime($hogehoge::hogetime) とか hogehoge::hogetime() にするのが本当に無理な状況なら
権限がないので書き換えられないと書いてそうなんだけどな。

221:デフォルトの名無しさん
08/08/21 13:06:25
URLリンク(www.nicovideo.jp)

これってperlでもできるのかな?

222:デフォルトの名無しさん
08/08/21 17:19:21
ああ

223:デフォルトの名無しさん
08/08/21 18:22:30
Q.「~はPerlでも可能ですか?」
A.「できます」

ほとんどの "~" について上記の答が返ってきます。
"~" が「電気ストーブの作成」である場合等、いくつかの例外を除いて。

224:デフォルトの名無しさん
08/08/21 18:28:57
>>221
電気ストーブ作りたいならここ参考にね☆
スレリンク(php板)

225:デフォルトの名無しさん
08/08/21 22:11:55
なんか質問の趣旨が誤解されてるようですが、
perlで同じ物作れるか?って質問でなくて、
perlでソースコード組むときに、このシステム使って
ネット経由でペアプログラミングしたりとか、
自分のコーディングを録画して中継したりとか
できるのかな?って意味だったのですが。

226:デフォルトの名無しさん
08/08/21 22:15:18
うむ

227:デフォルトの名無しさん
08/08/21 22:15:21
ああ

228:デフォルトの名無しさん
08/08/21 22:36:43
URLリンク(kazato.run.buttobi.net)

perl版のこういうの作らない?

                while

文字列の長さを取得する     ループを作る

みたいなの

229:デフォルトの名無しさん
08/08/21 22:37:33
>>226
ちょっとperlでソースコード書いて、
>>221のシステムでうぷしてもらえませんか?

230:デフォルトの名無しさん
08/08/22 04:29:53
>>228
作っていいぞ。

>>229
うpっていいぞ。

231:デフォルトの名無しさん
08/08/22 10:20:37
ばかなんじゃないの

232:デフォルトの名無しさん
08/08/22 14:42:37
おまえもな



233:デフォルトの名無しさん
08/08/22 15:14:57
おまえもな

234:デフォルトの名無しさん
08/08/22 15:17:41
   ∧_∧  / ̄ ̄ ̄ ̄ ̄
  ( ´∀`)< オマエモナー
  (    )  \_____
  | | |
  (__)_)

235:デフォルトの名無しさん
08/08/22 15:55:27
言い出しっぺの法則。
自分が欲しいものは自分で作れ。

236:デフォルトの名無しさん
08/08/22 16:35:25
>>235
言い出しっぺの法則は、「言い出しっぺがやらない限り誰もやらない」だ。

237:デフォルトの名無しさん
08/08/23 00:02:15
>>236
言いだしっぺの法則は、「お前がやれ」って返って来る法則のことじゃないのか?

238:デフォルトの名無しさん
08/08/23 00:10:39
>>237
いなかっぺ大将は、「キクしゃん、ハナしゃんと西一の三角関係」を描いた物語ですよ確か。

239:デフォルトの名無しさん
08/08/23 00:49:44
>>238
違うダス!
わしとキクしゃんの恋愛物語なんダス!

240:デフォルトの名無しさん
08/08/23 08:37:58
かなりのおっさんがいる?

241:デフォルトの名無しさん
08/08/23 17:41:35
にぎりっぺ

242:デフォルトの名無しさん
08/08/23 18:58:42
ActivePerl v5.10.0 を使用しています。

LWP::UserAgent を使用して、たとえば URLリンク(mixi.jp) に接続すると、
Client-SSL-Warning: Peer certificate not verified がレスポンスヘッダに出てくるのですが、
これを解消するためにはどうすればよいのでしょうか。

243:デフォルトの名無しさん
08/08/23 19:16:50
Crypt::SSLeayを入れる

244:デフォルトの名無しさん
08/08/23 19:19:37
Crypt::SSLeay は 0.57 が入っていました。

245:デフォルトの名無しさん
08/08/23 21:01:55
OSはWindows2000でActivePerlについての質問です。

よくCPANから○○をとってきてインストールしろとか
みますが、Activeperlを使っている人は、PPMで
インストールできるモジュールしか使えないのでしょうか?
PPMのインストールのメニューに出てくるという意味です。

246:デフォルトの名無しさん
08/08/23 21:07:55
PPMを起動すると、
URLリンク(kazato.run.buttobi.net)
こんな画面がでてきて、ほしいファイルを右クリして
インストールする仕組みになっています。
これって誰が管理しているか知りませんが、
たぶんactivestate社がやってるんですよね。
で、PPMのメニューに出てこないものは
インストールできないのかなと。

247:デフォルトの名無しさん
08/08/23 21:09:17
最近perlも飽きてきた。
どの入門書読んでも、だいたい同じこと書いてあるから。

で、今日はレファレンスについて勉強してみようと思いますが、
グーグルで検索するときに、レファレンスなのでしょうか?
それとも、リファレンスなのでしょうか?

248:デフォルトの名無しさん
08/08/23 21:17:47
ぐぐれカスとも言えない新技だな

249:デフォルトの名無しさん
08/08/23 21:51:20
>>247
両方ぐぐれよ。
あるいはreferenceで。

250:デフォルトの名無しさん
08/08/23 22:12:34
>>245
やってやれないことはないけど、気合と根性が必要。
俺はPPMに無いものはCPANからアーカイブを取ってきてMinGW+nmakeでインストールしてる。
が、Windowsには類似のAPIがない、UNIXべったりのモジュールには苦戦してる。
(同じ機能はあってもAPIの仕様が全然違う)

251:デフォルトの名無しさん
08/08/23 23:53:26
セーブファイルをネット上に保存する、ってのは
かんたんにできるのかな。

アップローダーみたいな、、、っていうのかな?

print (FILE www.abc.com/abc.txt);

みたいな。

252:デフォルトの名無しさん
08/08/23 23:56:31
以下のように①とかそういうのを全部変換したくて延々書いているのですが、
速く処理出来るようにするにはどのようにしたらよいのでしょうか?

$str=~s/Ⅰ/1/g;
$str=~s/Ⅱ/2/g;
$str=~s/Ⅲ/3/g;
$str=~s/Ⅳ/4/g;
$str=~s/Ⅴ/5/g;
$str=~s/Ⅵ/6/g;
・・・
$str=~s/①/(1)/g;
$str=~s/②/(2)/g;
$str=~s/③/(3)/g;
・・・


253:デフォルトの名無しさん
08/08/23 23:58:38
アロー演算子っていうのは、
ハッシュのレファレンスを表すときにしか
使わないんですか?

254:デフォルトの名無しさん
08/08/24 00:01:07
>>252
コーディングの行数を減らしたいってこと?
コンピューターの処理速度を速くしたいってこと?

255:デフォルトの名無しさん
08/08/24 00:03:32
$str=~tr/Ⅰ-Ⅹ/1-10/g;
$str=~tr/①-⑩/(1)-(10)/g;

これだと動かないかな。

256:デフォルトの名無しさん
08/08/24 00:15:10
use strict 'refs';

↑これって書かないと動かないの?
それとも、use strictを書けば、その中に含まれるの?

257:デフォルトの名無しさん
08/08/24 00:37:44
ha??

258:デフォルトの名無しさん
08/08/24 00:44:24
>251
自分のパソコンと相手のパソコンが繋がれてあったとして、
こちらのパソコンを操作するだけで相手のパソコンのHDDに書き込むことができるか?という問いに近い。

>252
ローマ数字に対応してるかどうか分からんけど、Unicode::Normalizeとかは?



ギャル文字の正規化めんどくせぇなあ……(ぼやき)


259:デフォルトの名無しさん
08/08/24 00:44:35
>>254
処理速度のほうです。

>>255
有り難う御座います。
$str=~tr/①-⑩/(1)-(10)/;
$str=~tr/①-⑨/1-9/;

上の方法では出来ず、下の方法では出来ました。
括弧を付ける方法とかあるんでしょうか?

260:側近中の側近 ◆0351148456
08/08/24 00:54:15
>>259
(っ´▽`)っ
$str=~tr/①-⑩/\(1\)-\(10\)/;
ではどうだ?

261:デフォルトの名無しさん
08/08/24 01:26:01
>260
そーゆーことじゃなくね?

262:デフォルトの名無しさん
08/08/24 01:53:33
# tr/// が、正規表現とは関係がなく、また文字列を置き換えるものでもないという点は FAQ にも程があるんでこれ以上は自分で調べてもらうとして。

sub to_arabic_number {
my $str = $_[0];
my @circles = qw/① ② ③ ④ ⑤ ⑥ ⑦ ⑧ ⑨ ⑩
⑪ ⑫ ⑬ ⑭ ⑮ ⑯ ⑰ ⑱ ⑲ ⑳/;
my @romanU = qw/Ⅰ Ⅱ Ⅲ Ⅳ Ⅴ Ⅵ Ⅶ Ⅷ Ⅸ Ⅹ/;
my @romanL = qw/ⅰ ⅱ ⅲ ⅳ ⅴ ⅵ ⅶ ⅷ ⅸ ⅹ/;

my $i = 1;
foreach (@romanL) {
$str =~ s/$_/$i/g;
$i++;
}
$i = 1;
foreach (@romanU) {
$str =~ s/$_/ $i/g;
$i++;
}
$i = 1;
foreach (@circles) {
$str =~ s/$_/ ($i)/g;
$i++;
}
return $str;
}

263:262
08/08/24 01:58:58
P.S. >>260 は釣りなのかネタなのか知らんが、武士の情けで見逃してやるから人生やり直して来い。

264:デフォルトの名無しさん
08/08/24 02:08:50
>>262
さすがにそのコードは人に見せられるレベルじゃないだろ…

265:デフォルトの名無しさん
08/08/24 02:10:41
>>262
有り難う御座います。
処理速度は遅いような気がするのですがどうでしょうか。

266:デフォルトの名無しさん
08/08/24 02:14:28
>>262よりは>>252のほうがいいと思うよ

267:デフォルトの名無しさん
08/08/24 02:20:31
>>262は嫌がらせ。


268:デフォルトの名無しさん
08/08/24 03:10:52
use feature qw( :5.10 );
use Time::HiRes 'sleep';
system q|cls|;
#----------------------------------
my @a;
@a=localtime;
sleep(.5);
say "\@a=@a[0..8]";
sleep(.5);
say "scalar(localtime)=",scalar(localtime);
sleep(.5);
say "localtime=",localtime;
sleep(.5);


localtimeという関数はホンマおもしろいなー
3通りもの出力があるんだから。

269:デフォルトの名無しさん
08/08/24 03:49:57
oracleにselect文を実行したときの取得レコード件数が知りたいんですが何か方法ありますか?
phpだとmysql_num_rows()とか便利なのあるんですけど、perlだとわかんないorz

270:デフォルトの名無しさん
08/08/24 04:00:20
エスパー期待してるんですか?

271:デフォルトの名無しさん
08/08/24 04:06:30
しゃぶりついてくるやつ期待してるんだろう。



272:デフォルトの名無しさん
08/08/24 04:17:54
いや、だから、
oracleにselect文を実行したときの取得レコード件数を
知るための関数でしょ?

273:デフォルトの名無しさん
08/08/24 04:18:41
ところで、ファイルに引数を食わせるときに、
スペース混じりの引数を食わせるには、
どうしたらいいですか?

274:デフォルトの名無しさん
08/08/24 04:42:39
URLリンク(www.aritia.org)

ここ読んでたら、なんか
日本語のファイル名も扱える
みたいじゃないですか。
どうやるの?

275:デフォルトの名無しさん
08/08/24 04:48:27
use feature qw( :5.10 );
system q|cls|;
#----------------------------------
"abcde" =~ m/b(.)d/ ;
say "$1";


↑これを実行すると、c、と出てきますが、
ここの$1は、ソースコードの、どこまで有効なの?

ずーっと後ろまで?

276:262
08/08/24 05:01:37
>>265
遅いよー。
括弧を考えず、一桁でいいなら tr/// のが高速。
でも文字列単位の置換、文字数の異なる置換に対応できない。
速度的には、サブルーチンにせず >>266 の言うように全部インラインで書いたほうがマシ。

@circle_patterns = ();
foreach (@circles) {
push @circle_patterns, qr/$_/;
}
# (以下必要なセットで繰り返す)
# とあらかじめ準備しておいて、
# 置換ループに入ったら、

$i = 1;
foreach (@circle_patterns) {
$str =~ s/$_/($i)/;
$i++;
}
# (以下必要な...略)
# などとやればちょっとは速くなる気がする。

置換対象が行数の多いファイルなら、一気読みで $str にひとつにまとめて突っ込んでしまうのも手。
データの傾向やらで効果的な最適化は変わるだろうから、いろいろ試して比較してみてね。

277:デフォルトの名無しさん
08/08/24 05:01:39
>>262
w

278:デフォルトの名無しさん
08/08/24 05:04:26
Win32::Soundとかっていう書き方、あるじゃないですか。
これってPerlの世界でのみ、通用するものなの?

それとも、一度おぼえたら、他の言語にいっても通用するの?

279:デフォルトの名無しさん
08/08/24 05:13:04
$str=~ s/[①-⑩]/($&)/g;
$str=~ tr/①-⑨/1-9/;
$str=~ tr/Ⅰ-Ⅸ/1-9/;
$str=~ s/[⑩Ⅹ]/10/g;


280:デフォルトの名無しさん
08/08/24 05:15:05
$str=~ s/[①-⑩]/($&)/g;
$str=~ tr/①-⑨Ⅰ-Ⅸ/1-91-9/;
$str=~ s/[⑩Ⅹ]/10/g;


281:デフォルトの名無しさん
08/08/24 05:16:29
>>276は嫌がらせの激遅コード


282:262
08/08/24 05:18:44
>>279
GJ
せっかくだからさらにちょっとだけ性能改善。
# 最近の perl では $& のオーバーヘッドってどうなってんだろね?

$str=~ s/([①-⑩])/($1)/g;

283:デフォルトの名無しさん
08/08/24 05:33:01
sでも文字クラスって使えるんだ?

284:デフォルトの名無しさん
08/08/24 05:54:56
>>269
$sth -> rows;
のことか?

285:デフォルトの名無しさん
08/08/24 08:47:06
うちのバイト募集に>>262みたいのが来たら、即座に却下だな。

つーか、ゴミでスレを埋め尽くすのはいいかげんやめておくれ。

286:デフォルトの名無しさん
08/08/24 11:02:53
初心者です。

配列かなんかに保持しておいて、ループさせるという考え自体は悪くない……ですよね?
よほど速度がクリティカルになる状況じゃなきゃ、そこまで酷いとも思えないし。

287:デフォルトの名無しさん
08/08/24 12:10:50
私初心者だけどクリティカルな状況でなければさほど酷くもなかろう
と言われましても。

288:デフォルトの名無しさん
08/08/24 12:13:55
こんなのはいかが

my @circles = qw/① ② ③ ④ ⑤ ⑥ ⑦ ⑧ ⑨ ⑩ ⑪ ⑫ ⑬ ⑭ ⑮ ⑯ ⑰ ⑱ ⑲ ⑳/;
my @romanU = qw/Ⅰ Ⅱ Ⅲ Ⅳ Ⅴ Ⅵ Ⅶ Ⅷ Ⅸ Ⅹ/;
my @romanL = qw/ⅰ ⅱ ⅲ ⅳ ⅴ ⅵ ⅶ ⅷ ⅸ ⅹ/;
my %hash = ();
%hash = (%hash, map { $circles[$_-1] => "($_)" } 1..20);
%hash = (%hash, map { $romanU[$_-1] => $_, $romanL[$_-1] => $_ } 1..10);

sub to_arabic_number {
    my $str = shift;
    $str =~ s/([①-⑳Ⅰ-Ⅹⅰ-ⅹ])/$hash{$1}/ge;
    $str;
}

289:デフォルトの名無しさん
08/08/24 12:22:13
>>288
[参考になる+11]

290:デフォルトの名無しさん
08/08/24 12:54:50
>>288
やるならとことん逝こうぜ。個人的には%hashを全書き換えしてるのが気になる。

my @nums = (
[qw(① ② ③ ④ ⑤ ⑥ ⑦ ⑧ ⑨ ⑩ ⑪ ⑫ ⑬ ⑭ ⑮ ⑯ ⑰ ⑱ ⑲ ⑳)],
[qw(Ⅰ Ⅱ Ⅲ Ⅳ Ⅴ Ⅵ Ⅶ Ⅷ Ⅸ Ⅹ)],
[qw(ⅰ ⅱ ⅲ ⅳ ⅴ ⅵ ⅶ ⅷ ⅸ ⅹ)]
);
my %hash = map {
my $num = $_;
map {$num->[$_ - 1] => "($_)"} 1..(scalar(@$num))
} @nums;
my $re = join("", map {$_->[0].'-'.$_->[$#$_]} @nums);

sub to_arbic_number {
local $_ = shift;
s/([$re])/$hash{$1}/geo;
return $_;
}


291:デフォルトの名無しさん
08/08/24 13:01:27
-------------
>>276
>>288
ありがとうございます。参考になります。
eって遅くなるのかと思って試してませんでした。
文字数によってはeを利用したほうが速くなりそうですね。
単純に-で繋げて表現出来ない文字列も多いので、eが有用というのは私的には!!でした。
色々試してみます。ありがとうございます。

-------------
>>280
>>282
ありがとうございます。そういう方法もあるのですね。一つ一つ書いていくより
かなり速くなりました。
⑩-⑳の場合が無いのでまだ速度を比べられないのですが、この場合はどのよう
にしたらよいのでしょうか?

trではやはり2文字になるのでダメで、一つ一つ書いていく方法しか思い浮かば
ないのですが、方法はないのでしょうか?


292:デフォルトの名無しさん
08/08/24 13:04:26
■■学校を作ろう!■■
VIP発でサイトを作ろうと思うんだ。(詳しくはWikiを見てくれ)
パートスレになるんでパー速(GEP)に移動している。
今スタッフを募集しているから、来てくれないか?

■Wiki
URLリンク(www36.atwiki.jp)
■募集スタッフ
プログラム担当(特にErlang、Perl)
デザイナー(サイト上のアイコン、ロゴなど)
WEBデザイナー(サイトデザイン案に沿って、htmlやCSSを書ける)
他にも宣伝担当なども募集している。
■スレ
URLリンク(ex14.vip2ch.com)

293:デフォルトの名無しさん
08/08/24 13:07:34
見てもらったらわかるが、IRC・スレともに過疎って今にも潰れそうだから行かないほうがいいぞ

294:デフォルトの名無しさん
08/08/24 14:16:48
>287
具体的に何が悪いかを指摘せずに、ソースだけ書かれても
後から見た人は困るって意味さ

295:デフォルトの名無しさん
08/08/24 15:46:25
$str=~ s/([①-⑨])/($1)/g;
$str=~ s/([⑩-⑲])/(1$1)/g;
$str=~ tr/Ⅰ-Ⅸ①-⑨⑩-⑲/1-91-90-9/;
$str=~ s/Ⅹ/10/g;
$str=~ s/⑳/20/g;


296:デフォルトの名無しさん
08/08/24 15:54:45
>>286
君はプログラミングは諦めて他の道へ進んだ方がいい

297:デフォルトの名無しさん
08/08/24 16:06:28
>296
質問スレで質問しちゃだめなん?

298:デフォルトの名無しさん
08/08/24 16:13:24
>>296
っていうか、来ないでくださいって感じ。

299:デフォルトの名無しさん
08/08/24 16:19:48
>>295
そういう方法がありましたか。まったく思いつかなかったです。
試してみます。有り難う御座います。

>>286
考え自体は全然悪くないと思います。
スピードよりも見やすさのほうが通常は大事だと私は思います。
どうやって見やすくかつ速く出来るかで悩みます。

でもどっちを優先するかは時と場合によります。

300:デフォルトの名無しさん
08/08/24 18:55:13
モジュールWWW::Mechanizeを使って、クッキーの送信と受信をしたいんだけどどうすればいいの?

301:デフォルトの名無しさん
08/08/24 20:24:11
質問です。Perlでファイルのアップロードをしようとして
フォームから値を送るサンプルを弄くってるのですが
my $local = $q->param('upfile');
my $fname = basename($local,"");
my $path = '.file';
my $newfile = "$path/$fname";

こういう感じでbasenameを使って、ウィンドウズ環境から上げると
パスが
.file/C:\Documents and Settings\Admin\デスクトップ\hoge.txt
となってしまい、ちゃんとアップできません。
他のサンプルとかでもこうやってるようなのですが

みなさんはどうやってるのですか。

302:デフォルトの名無しさん
08/08/24 20:30:13
すみません
my $path = '.file';

my $path = './file';
です

303:デフォルトの名無しさん
08/08/24 23:33:29
>>301
$local =~ tr|\\|/|g;
# or
$fname =~ s/(?:\\|\/)([^\\\/:*?"<>|]+?$)/$1/;
# 思いつきで書いた。どっちもその場しのぎ。当然テストなんかしてない。

304:デフォルトの名無しさん
08/08/25 00:40:39
>>303
まあ tr に g オプションはないよな

305:303
08/08/25 01:06:49


306:デフォルトの名無しさん
08/08/25 01:40:11
まぁ、trを正規表現と勘違いしてるやつ多いよな……。

307:デフォルトの名無しさん
08/08/25 01:52:09
yでおk

308:デフォルトの名無しさん
08/08/25 06:35:23
perlちょっと飽きたかも。
入門書読んでも、どの本も
同じことしか書いてないし。

だいたい,スカラー変数の説明から始まって、
配列、ハッシュ、ループ、プリント文、あとなんだ、
サブルーチン、正規表現、こんな感じ。

あとはコンテキストがどうたらこうたら。
演算子の優先順位がどうとか。

309:デフォルトの名無しさん
08/08/25 06:39:17
あとは、if文、それと、正規表現で取得した文字列の再利用の方法とか。
あと入出力。それと、変数のスコープとか。
ファイルからの入力、ファイルへの出力。
再帰、引数利用の引数渡し。

それ以上難しいのは、グロブ、レファレンス、パッケージ、
モジュール、二次元配列、二次元ハッシュとかかな。


基本は1ヶ月もやれば覚えてしまうね。目新しさがないというか、
飽きる。「ああまたこれか」みたいな。

310:デフォルトの名無しさん
08/08/25 06:40:40
あと、->があったとき、
レファレンスとして使われている可能性と、
オブジェクト指向での記述として使われている可能性と、
2つあるの?

311:デフォルトの名無しさん
08/08/25 06:47:10
今なんか、おもしろそうな機能を発見したぜ

$\

use English: $OUTPUT_RECORD_SEPARATOR / $ORS

[入出力関連] 出力時の行末文字

デフォルト値は NULL です。
$\ の使い方

$\ = "\n";
print "Hello Perl World !";

↑これを使うと、行末文字を変更できるのだ
ということは「にょ」とかもできるはず。さっそくやってみよう。

312:デフォルトの名無しさん
08/08/25 06:49:15
$\ = "にょ";
print "おはよう";

さっそくやってみたぞ
実験結果

おはようにょ

成功!みごと成功したようだ!

313:デフォルトの名無しさん
08/08/25 07:32:03
>>308,309
飽きる原因
・理解してるのに同じ事を繰り返してる
・理解出来ないのに同じ事を繰り返してる
どっちも馬鹿には違いないがw

つか、入門書を何冊も読んでる時点で相当の馬鹿

>>311,312
チラウラカスうぜぇ

314:デフォルトの名無しさん
08/08/25 07:34:56
>・理解出来ないのに同じ事を繰り返してる
 ↓
何度も同じことを繰り返してるのに理解出来ない

の方が良かったな
失敬

315:デフォルトの名無しさん
08/08/25 08:19:00
スペースキーを押したら、次のメッセージが出る、
っていうのは,Perlでは実装できない?

Cのときはできたんだけど。scanfだっけ?

316:デフォルトの名無しさん
08/08/25 09:57:01
なんか、
スレリンク(prog板:297番)
このレベルの話があって、漏れは一回読んで意味がすぐ理解
できたんだけど、
スレリンク(prog板:298番)
みたいに、理解できない人もいるみたいなんだけど、
これってコミュニケーション障害?

317:デフォルトの名無しさん
08/08/25 10:45:32
>>316
俺もわからん。あんたがエスパーなんだろう。
というか板違い甚しい。他所でやってくれ。

318:デフォルトの名無しさん
08/08/25 11:02:52
1~4 を 0、5~9 を 10、11~14 を 10、15~19 を 20 といった具合に、
四捨五入したいのですが、どのように記述すればいいのでしょうか。

If 文でこつこつ書いて、あまりの多さにめげてしまいました。

319:デフォルトの名無しさん
08/08/25 11:45:56
>>318
sub round10 {
int(($_[0] + 5) / 10) * 10;
}

320:デフォルトの名無しさん
08/08/25 13:11:34
これ5を代入すると0になるな

321:デフォルトの名無しさん
08/08/25 13:31:10
効率いいかしらないけど・・・
print round(10);
sub round {sprintf('%.1f',($_[0] / 100 ))*100}


322:321
08/08/25 13:34:06
結構古いバージョンから問題なく動いてるコードなんだけど
そもそもsprintfって四捨五入するの保証してるのか不明デス



323:318
08/08/25 16:21:26
ありがとうございます。50行ぐらいあったコードがなくなってすっきりしました。

324:デフォルトの名無しさん
08/08/25 17:16:13
うちの環境だと、>>319は正当が出て、
>>321は、print round 15 すると答えが10が返る。
# ま、原因は浮動小数点の処理にあるのは明白なんだけど。
>>321氏は「その環境では上手く行ってたとしても別環境では上手く
行かない事がある」程度には認識した方が良いかと。

>>323
何故に50行?ベタ実装してもそんなに行は食わないだろ?
sub round {
 my $t = chop ( my $i = shift ) ;
 my %h = map{ $_, $_ < 5 ? 0 : 10 } 0..9 ;
 ( $i || 0 ) * 10 + $h{$t} ;
}
printf "%d->%d\n", $_ ,round $_ for 0 .. 30 ;

325:デフォルトの名無しさん
08/08/25 19:10:41
読めねーw

326:デフォルトの名無しさん
08/08/25 20:47:39
>>299

$str=~ s/([①-⑳])/($1)/g;
$str=~ s/([①-⑳])/ord($1)-ord('①') + 1/eg;
$str=~ s/Ⅰ-Ⅹ/ord($1)-ord('Ⅰ') + 1/eg;

>>318
$data=~ s/(\d*)(\d)/$1 * 10 + (($2 < 5) ? 0 : 10)/e;

327:デフォルトの名無しさん
08/08/25 21:02:28
>>326
$str=~ s/([①-⑳])/'(' . (ord($1)-ord('①') + 1) . ')'/eg;

でいい気がするんだが

328:デフォルトの名無しさん
08/08/25 21:12:57
>>318
sub round($) {
return $_[0] % 10 >= 5 ? int($_[0]/10+1)*10 : int($_[0]/10)*10;
}


329:326
08/08/25 21:17:50
>>327
そだね

あと、ミス
× $str=~ s/Ⅰ-Ⅹ/ord($1)-ord('Ⅰ') + 1/eg;
○$ str=~ s/[Ⅰ-Ⅹ]/ord($1)-ord('Ⅰ') + 1/eg;

330:326
08/08/25 21:28:07
さらに、ミス、スマソ
× $str=~ s/Ⅰ-Ⅹ/ord($1)-ord('Ⅰ') + 1/eg;
○ $str=~ s/[Ⅰ-Ⅹ]/ord($1)-ord('Ⅰ') + 1/eg;

331:デフォルトの名無しさん
08/08/25 21:41:15
全部クラス化した方が効率いいだろ。

@num{ord('①')..ord('⑳')} = 1..20;
@num{ord('Ⅰ')..ord('Ⅹ')} = 1..10;
$str =~ s/([①-⑳Ⅰ-Ⅹ])/$num{ord($1)}/eg;


332:デフォルトの名無しさん
08/08/25 21:44:09
あ、上のやつは()つけといてくれ。。。見逃した。
・・・=map{"($_)"}1..20

333:デフォルトの名無しさん
08/08/25 21:48:50
>>324
一応、自己(嫌悪)レス。
sub round{ my $t = chop ( my $i = shift ) ; ( $i || 0 ) * 10 + ( $t < 5 ? 0 : 10 ) ; }

334:デフォルトの名無しさん
08/08/25 22:20:40
質問です。

perlを勉強し始めて間も無い物です。
MacOSX 10.5でLWPを使った簡単なマクロツールを使っているのですが、

Terminalにログをだらだらと表示する画面では無く、
viや、CPANを実行した時の様な専用画面が表示されるようにしたいと考えています(exitを打ち込んだから、shellに戻る様なイメージ)。

ぐぐるにもどう言った言葉で表現すればいいのか分からないので、
困っています。ヒントだけでも良いので押しえてください。
よろしくお願いいたします。

335:デフォルトの名無しさん
08/08/25 22:34:13
>>334 Curses

336:デフォルトの名無しさん
08/08/25 22:50:49
>>335
ありがとうございます!!
当スレの過去ログ等も調べさせて頂き、
色々見てみたのですが、インストールは出来そうだけど、
perlとどう対話(?)させれば良いのかが分からないです…。

もし私のような初心者にも分かりやすいサイト等があったら
お教え頂けますでしょうか。

337:デフォルトの名無しさん
08/08/25 22:52:30
ググれよ

338:デフォルトの名無しさん
08/08/25 23:07:33
すみません、ぐぐってます…。
ググっても分からないぐらいのレベルなんです。

とりあえず、インストールは終わったんですがね。
検索ワードをCurses.pmに買えてやってみます。

339:デフォルトの名無しさん
08/08/25 23:45:31
>>326
あぁ。そういう方法もありますか。よくこんな方法思いつきますね。
見れば、なぁんだと思うけどなかなか思い浮かばないですね。

でもこれだと>>288 のやり方(をサブルーチンとか外して効率化したの)とスピード
は変わらないですね。
逆にord使う分だけ遅くならないのかなーと・・・。

でもアイデアは面白いと思いますので参考にしたいと思います。

有り難う御座います。


340:デフォルトの名無しさん
08/08/26 00:06:30
>>338です。
色々調べた結果難しそうなので、今回はチャレンジするのをやめました。
screen(?)を上手く使った方法を考えたいと思います。
お騒がせいたしました。

341:デフォルトの名無しさん
08/08/26 00:49:26
>>334
CPANを読めよ

342:デフォルトの名無しさん
08/08/26 00:50:40
スレリンク(newsplus板:1番)
これみたら2ちゃんは一日に2億アクセスあるみたいですが、2億行の
アクセスログも、Perlだったら、スイスイ取り扱いできますよね。

343:デフォルトの名無しさん
08/08/26 01:00:12
URLリンク(serif.hatelabo.jp)

344:デフォルトの名無しさん
08/08/26 01:51:42
use feature qw( :5.10 );
system q|cls|;
#----------------------------------

my $a,$b;
$a=10;
$b=3;
my $c;
say $c=$a/$b;
say $c*3;

このコードを実行したら、10になった。
一方、電卓で計算したら、9.99999999999、、、になった。
なんで?

345:デフォルトの名無しさん
08/08/26 01:57:28
電卓が安物だから。

ちゃんとしたやつなら10になる。

346:デフォルトの名無しさん
08/08/26 04:18:11
perl のコードを実行できる電卓があるんか?

347:デフォルトの名無しさん
08/08/26 04:50:07
バカは消えろ

348:デフォルトの名無しさん
08/08/26 22:08:06
rarファイル(パスワードつき)をperlから操作したいのですが
CPANでモジュールを探したところ、
Archive::Rarではオプションでパスワードを扱えなくて
Archive::Rar::Passthroughでないとダメみたいです。
ところが、このモジュールは使用OS(Windows)には入りません。
エラーが出ないことを前提に、直接rar叩いちゃった方が楽ですか?

349:デフォルトの名無しさん
08/08/26 22:14:21
>>348
楽ですか?っていうかほかにやり方ないんならそうするしかないじゃん
何が聞きたいの?

350:デフォルトの名無しさん
08/08/26 23:39:38
前に弄った時は、 Win32::API で unrar32.dll を読み込んで使ってた。

351:デフォルトの名無しさん
08/08/27 01:40:15
${変数名}

こんな書き方があることを30分前に知った。
お前ら、ちゃんと教えてくれなきゃだめだろ。

352:デフォルトの名無しさん
08/08/27 01:55:11
シンボリックリファレンスの仕様は非推奨です。

353:デフォルトの名無しさん
08/08/27 02:10:06
$a=あ;

print "$aい";

こんなとき、こっちの意図は

「あい」

という出力なのに、perlが勝手に
$aい

という変数だと誤解して、エラーになる、
こういうときに、
${a}
と書くと、エラーにならない。

今読んだ本にそう書いてあるんだけど。
これがシンボリックリファレンスなの?

354:デフォルトの名無しさん
08/08/27 02:11:45
Perlを学び終えたとき、次に学ぶ言語として
最適なのはどれ?

Ruby?
PHP?
Phtynon?
C?

355:デフォルトの名無しさん
08/08/27 03:37:37
DBMにURLとアクセス時間を100万件くらい記録したファイルがあって
これをアクセス時間でソートしたリスト(テキストファイル)を作りたいんですが、
あまりメモリに負担をかけずにやるにはどうやるのがいいですか?

DBMはこんな感じで使ってました。
use DB_File;

tie %u, 'DB_File', 'url', O_RDWR|O_CREAT, 0644, $DB_BTREE;

$u{$url} = $last_modified;

356:デフォルトの名無しさん
08/08/27 03:43:28
ActivePerl(Perl 5.10.0) でData::Aliasを動かせている人っていますか?

ppmリポジトリでも軒並みテストにFAILしているし、
自分の環境(VC++ Express 2008)でも一緒でした
配布物内のREADMEには動く節が書かれていますが……orz

Data::Alias以外の方法で同様なことを実現するには、
素直にサブルーチンを掘ってリファレンスで受け渡しするしかなさそうで、
ちょっと難儀しています

357:デフォルトの名無しさん
08/08/27 11:49:49
>>353
それはシンボリックリファレンスとは違う。
分からないことがあったら「ググる」という事を覚えようね。

あと、できるだけ、

  print $a, "い";

って書き方を習慣付けておいた方が
後々、他の言語にも移行しやすいよ。

358:デフォルトの名無しさん
08/08/27 12:42:21
前から疑問だったのですが、

print $a. "い";
print $a, "い";

では異なるんでしょうか。

359:デフォルトの名無しさん
08/08/27 12:47:09
>>358
明らさまに異なる。
print $h = $a. "い" ;
print @a = ( $a, "い" ) ;

360:デフォルトの名無しさん
08/08/27 12:49:42
% cat hoge.pl
use Benchmark;

open DEVNULL, ">", "/dev/null" or die $!;
$x = "hogehogehoge";

timethese(
undef,
{
dot => sub { print DEVNULL $x. "hoge" },
comma => sub { print DEVNULL $x, "hoge" },
}
);
% perl hoge.pl
Benchmark: running comma, dot for at least 3 CPU seconds...
comma: 3 wallclock secs ( 3.42 usr + -0.00 sys = 3.42 CPU) @ 2453425.44/s (n=8390715)
dot: 4 wallclock secs ( 3.19 usr + 0.02 sys = 3.21 CPU) @ 1753933.96/s (n=5630128)

361:デフォルトの名無しさん
08/08/27 12:51:21
結果は同じ。おそらく内部処理が違うだろうけど気にするほどでも無い。
文字列の足し算をするか、しないか。どっちが効率がいいか考えればわかるよね?

あと、print 文のときはソレでいいけど、代入文とかのとき
$b = $a. "い"; とは書けるけど
$b = $a, "い"; はダメ。

362:デフォルトの名無しさん
08/08/27 12:59:10
なんという低レベルスレ・・・・

363:デフォルトの名無しさん
08/08/27 13:02:37
英語ソフトを日本語化する作業をしています。大量の置換スクリプトを書いてます。

s/"qwertyuiop@[asdfghjkl;:]zxcvbnm"/"たていすかんなにらせちとしはきくまのりれけむつさそひこみもねるめろ"/;

こんな長い置換を、2行に折り曲げて書く方法って無いでしょうか?

s/"qwertyuiop@[asdfghjkl;:]zxcvbnm"/
"たていすかんなにらせちとしはきくまのりれけむつさそひこみもねるめろ"/;

って書くと改行が混じるんですよね。

364:363
08/08/27 13:04:22
投稿ミス

置換パターンに @ とか [ ] とか出てくるのは忘れてください。
テケトーにキーボードを叩いただけですから。
本来はふつうの英文です。

365:デフォルトの名無しさん
08/08/27 13:36:33
>>363
やり方あるはずだよ。
なんかのオプションをつけるはず。
s/●/○/rとか。
そのrとかのオプションの名前は忘れたけど。
「正規表現中の改行を無視する」
ってオプションだと思う。
こないだ読んだ本に書いてあった。

366:デフォルトの名無しさん
08/08/27 13:38:02
>>363
っ[x]

367:デフォルトの名無しさん
08/08/27 13:39:55
最近の
「マニュアルを見るのは賎民のやること」
という風潮には目を覆うものがあるな。

368:デフォルトの名無しさん
08/08/27 13:42:52
xかなあ。

> パターン中の空白文字(半角スペース、
>Tab文字、改行文字)と、「#」から行末まで
>の文字列を無視する。
> 「[]」内の文字は、無視されない。

369:デフォルトの名無しさん
08/08/27 13:49:22
>>361
それは結果がたまたま同じだっただけだ。
man perlvar の $, を100ぺん読み直せ

370:デフォルトの名無しさん
08/08/27 13:51:31
お尋ねします。
「○○もしくは△△を含む」は「○○|△△」でできますが、
「○○および△△を含む」はどうするのでしょうか?
つまりand検索です。
要素が二つとは限らず可変なのですが、どうするのが効率が良いのでしょうか?


371:デフォルトの名無しさん
08/08/27 14:20:11
>>370
っ[?=]

372:デフォルトの名無しさん
08/08/27 14:29:36
>>370
っ[ブール代数]

373:デフォルトの名無しさん
08/08/27 16:00:48
>>366
アリ!バッチリです。これで仕事がはかどります。

374:デフォルトの名無しさん
08/08/27 17:06:01
もう見てもいないだろうけど
my $hoge = q{hoge} ;
$hoge =~ s{hoge}
# これでも良くね?
{foo} ;
print $hoge . "\n" ;



次ページ
最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch