2ちゃんねる ★スマホ版★ ■掲示板に戻る■ 全部 1- 最新50  

■ このスレッドは過去ログ倉庫に格納されています

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

1 :デフォルトの名無しさん:2011/10/30(日) 14:44:20.41
CGI についての質問は板違いです。WEB プログラミング板でどうぞ。
CGI と Perl の区別がつかない人も WEB プログラミング板に行ってください。
(WEB プログラミング板: http://hibari.2ch.net/php/ )

このスレでは(CGI 以外の)純粋にPerlのみに関係する質問を取り扱っていこうと思います。
スレ違いの質問にはスルーか、速やかな誘導をお願いします。

"The duct tape of the Internet" こと、Perl についての質問箱です。
"There's more than one way to do it" ということで、
Perl の奥深さについて皆で語り合い、追求してまいりましょう。

http://www.perl.org/get.html
● 2011/10/30 現在の最新版: 5.14.2

▼ 前スレ
Perlについての質問箱 48箱目
http://hibari.2ch.net/test/read.cgi/tech/1313840197/
リンク集は >>2-3辺り
Perl 日本語処理の基礎の基礎 >>4辺り

2 :デフォルトの名無しさん:2011/10/30(日) 14:45:15.61






               Perlは死んだ







3 :デフォルトの名無しさん:2011/10/30(日) 14:45:36.91





       さようなら! 過去の言語!







4 :デフォルトの名無しさん:2011/10/30(日) 14:45:52.85
[プログラミング自体の経験が無い奴はまずココを読め]
Perl プログラミング講座: ttp://www.site-cooler.com/kwl/perl/

[本]
リャマ: ttp://www.oreilly.co.jp/books/9784873114279/
駱駝: ttp://www.oreilly.co.jp/books/4873110963/
Effective Perl: ttp://ascii.asciimw.jp/books/books/detail/4-7561-3057-7.shtml
クックブック: ttp://www.oreilly.co.jp/books/4873112028/
Perl ベストプラクティス: ttp://www.oreilly.co.jp/books/4873113008/
Perl Hacks: ttp://www.oreilly.co.jp/books/9784873113142/

[オンラインマニュアル]
最新のドキュメント: ttp://search.cpan.org/dist/perl/
perldoc.jp: ttp://perldoc.jp/
perldoc.perl.org: ttp://perldoc.perl.org/

5 :デフォルトの名無しさん:2011/10/30(日) 14:46:10.22
今は日本語処理はEncodeモジュール一択


Jcode関係は過去のやり方です。

6 :デフォルトの名無しさん:2011/10/30(日) 14:46:42.49
[モジュール]
CPAN.com: ttp://search.cpan.org/
河馬屋二千年堂: ttp://homepage3.nifty.com/hippo2000/

[テクニック]
Perl メモ: ttp://www.din.or.jp/~ohzaki/perl.htm
Perl のページ: ttp://homepage1.nifty.com/nomenclator/perl/
Perl の小技: ttp://homepage3.nifty.com/hippo2000/perltips/index.htm

[Perl 5.8 Unicodeメモ]
ttp://www.rwds.net/kuroita/program/Perl_unicode.html (修正)
ttp://www.namazu.org/~tsuchiya/perl/perl-5.8.html
ttp://www.lr.pi.titech.ac.jp/~abekawa/perl/perl_unicode.html

7 :デフォルトの名無しさん:2011/10/30(日) 14:47:28.43
# [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 でエンコードする必要があります。

8 :デフォルトの名無しさん:2011/10/30(日) 14:48:11.67
なんかへんなのに割り込まれちった。まあいいや。

9 :デフォルトの名無しさん:2011/10/30(日) 14:49:17.18
Encodeモジュール (現在のPerl文字コードの標準)
http://search.cpan.org/dist/Encode/

UNICODEでわからなくなったらここを読め
http://perldoc.jp/docs/perl/5.8.1/utf8.pod
http://perldoc.jp/docs/perl/5.10.0/perlunifaq.pod

10 :デフォルトの名無しさん:2011/10/30(日) 14:50:21.93
1レスで理解できるutf8フラグ

utf8フラグとい名前がまずかったね。
文字列フラグなどという名前だったらよかった。

文字列フラグはPerl固有のものだから
Perlコード外部から渡されるのは文字列ではない。
文字列でなかったらなにか?それはバイナリ。

バイナリを文字として扱いたければ、文字に変換しないといけない。
それがdecode。

ではソースコードに書いてあるのは、文字かバイナリか。
それはuse utf8を使えば文字で、そうでない場合はバイナリ。

話はこれだけ。

11 :デフォルトの名無しさん:2011/10/30(日) 14:50:36.62
use Encode;
while(<>){
  chomp;
  my @row = split(/,/, $_);
  for my $row (@row){
    Encode::from_to($row,'utf8','sjis');
    print $row;
  }
}


12 :デフォルトの名無しさん:2011/10/30(日) 14:53:48.76
古いPerlにまどわされないために

モダンPerlの世界へようこそ
http://gihyo.jp/dev/serial/01/modern-perl/0001

13 :デフォルトの名無しさん:2011/10/30(日) 14:54:42.28
バイナリと文字列は同じものなので区別なく扱えるのがUNIXやPerlの利点。
Windowsだとそうはいかない。

14 :デフォルトの名無しさん:2011/10/30(日) 14:55:54.27
> バイナリと文字列は同じものなので

文字列には、文字数というものがあるので
文字とバイナリは違います。

15 :デフォルトの名無しさん:2011/10/30(日) 14:58:04.92
OSに関係なく、少なくとも文字列はバイナリデータに含まれます。

16 :デフォルトの名無しさん:2011/10/30(日) 14:59:33.85
そしてバイナリデータを文字列のように扱えるのなら覚えることが
減るので利用者として楽です。

17 :デフォルトの名無しさん:2011/10/30(日) 15:00:07.72
・バイナリ

ビット(バイト)が並んだもの。それ以外に情報を持っていない。


・文字列

バイナリに様々なメタ情報が追加されたもの。
文字コード情報がが固定、もしくは内包されている。
データの終端情報を持っている。
1文字という概念がある。1文字は多バイト、または可変バイトで構成されている。
バイト単位での操作は行わない。

18 :デフォルトの名無しさん:2011/10/30(日) 15:05:07.88
つまんないこと言ってないで、Data::Dumper 答えてやれよ

19 :デフォルトの名無しさん:2011/10/30(日) 15:14:41.24
テキストデータとバイナリデータの違いは何かという普遍的な議論へ

20 :デフォルトの名無しさん:2011/10/30(日) 15:18:01.66
文字列フラグというければ、chr($n) で $n < 255 のときとそうでない
ときでフラグがつく、つかないが変わる、ということからすると、latin-1
リテラルで Unicode 文字列をあらわすというのは今でも、それが perl
の正しい文字列の扱い方ということになるとおもう。

21 :デフォルトの名無しさん:2011/10/30(日) 15:19:34.86
>>20
日本語でおk

22 :デフォルトの名無しさん:2011/10/30(日) 15:22:16.34
>>20
だから、そういうへんな挙動がないEncodeモジュールを
使ってくださいと書いてあるんだよ。
http://perldoc.jp/docs/perl/5.8.1/utf8.pod

> utf8::encode($string)
>
> 論理キャラクタを、8ビットシーケンス表現に、PerlのUTF-Xエンコーディングに、
> (適切に)変換します。何も返しません。 Encode::encode_utf8()と同じです。
> 次のことに注意してください。レガシーのバイトエンコーディングを、
> Unicode にする変換に使うべきではありません:そのためには、Encode を使って下さい。

23 :デフォルトの名無しさん:2011/10/30(日) 15:47:51.88
>>17
そこに書いた「文字列」を「文字列インスタンス」「文字列オブジェクト」
と書換えるのなら構わないけど、一般的な言葉の「文字列」をその定義に
しちまうのはどうよ?

そうでないと今、見えているものが文字列じゃなくなっちゃうぞ。

24 :デフォルトの名無しさん:2011/10/30(日) 15:57:16.10
> そうでないと今、見えているものが文字列じゃなくなっちゃうぞ。

なんで? データの終端情報は微妙だけど、

ここに書いてある文字を読むためには、ShiftJISという文字コード
まで含めてやっと文字列として読めるだろ?

そしてその1文字が何バイトであるかなんて考えないだろ?


25 :デフォルトの名無しさん:2011/10/30(日) 16:23:16.44
そもそも紙に手書きしたものも文字列だし、印刷した場合でも文字列。
パピルスに書かれたものも、粘土板に刻まれたものも、木簡に書かれた
ものも文字列と言われてきたのだから、これからもそうしたほうがいい
と思う。

       (それともお前が全部燃やしたいの?)

・(ひとが扱う)文字列

バイナリに様々なメタ情報が追加されたもの。
→ コンピュータ導入前から人間は文字列は使っているわけで、"バイナリ"
 は無関係。コンピュータがデジタルではなった場合も然り。

文字コード情報が固定、もしくは内包されている。
→ 同じ理由で文字コード情報は文字列の定義に関係がない。

データの終端情報を持っている。
→ バイナリデータだって終端情報を持っていることがある。

1文字という概念がある。
→ 確かに。でももしかしたら1文字の概念があやふやだったり、なかったり
 するようなもの(言語?)もあるかもしれない。

1文字は多バイト、または可変バイトで構成されている。バイト単位での
操作は行わない。
→ これまたコンピュータ上/内の話。コンピュータの有無やその構造・方式
 と文字列の定義は無関係。

26 :デフォルトの名無しさん:2011/10/30(日) 16:26:32.52
>>25
意味がわからん。
今はコンピュータ上の文字の表現の仕方の話だろ。

手書きしたものとか言い出したら、
文字はバイナリではない(分子かなんかカ?w)ということになるだろ。

なに関係ありそうで関係ないものの話持ちだしてんだかw
こいつは頭が悪いと認定してよさそうだ。

27 :デフォルトの名無しさん:2011/10/30(日) 16:29:44.06
What is Unicode?
ttp://www.unicode.org/standard/WhatIsUnicode.html

Fundamentally, computers just deal with numbers. They store letters
and other characters by assigning a number for each one.

ってあるようにコンピュータは文字を扱うわけではない。

28 :デフォルトの名無しさん:2011/10/30(日) 16:33:21.15
バイナリだけでは、それを文字として認識することは不可能。
文字コード情報が別に必要になる。

ASCIIだって、ASCIIコードという情報がなければ、
アルファベットですら文字として認識できない。
たとえばASCIIコードでABCDと書いてあるように見えても、
これはASCIIではなくUTF32ですといわれれば別の文字になるしね。
文字を文字として認識するためには、文字コード情報が必要不可欠。

C言語とかこの文字コード情報が文字列にくっついていないから
(そもそもC言語には文字はあっても文字列はないんだが)
文字として表示するためには人間が文字コードのことを考慮する必要があった。

最近の言語では、文字とバイナリは区別され、文字には文字コード情報が内包されている。
そのため、人間がいちいち文字コードは何か? と考える必要がなくなった。
PerlのUTF8フラグもその一つ。

29 :デフォルトの名無しさん:2011/10/30(日) 16:35:11.85
>>27
中途半端に持ってくるなよ

基本的に、コンピュータは数字だけを扱います。彼らはそれぞれに番号を割り当てることによって、
文字や他の文字を格納する。ユニコードが発明される前に、これらの番号を割り当てるための
さまざまなエンコーディングシステムの何百ものがあった。単一の符号化に十分な文字が含まれていないことができます:
例えば、欧州連合(EU)だけではそのすべての言語をカバーするいくつかの異なるエンコーディングが必要です。
であっても英語のような単一言語の単一の符号化は、共通使用されているすべての文字、句読点、技術記号のための十分でした。

お互いに、これらの符号化システムは、また競合。つまり、二つのエンコーディングは、2つの異なる文字に対して同じ番号を使用して、
または同じ文字に異なる番号を使用することができます。任意のコンピュータ(特にサーバ)さまざまなエンコーディングを
サポートする必要があります。まだいつでもデータが異なるエンコーディングやプラットフォーム間で受け渡され、データは常に破損の危険性を実行される。


30 :デフォルトの名無しさん:2011/10/30(日) 16:36:46.56
>>29からも解るように、

「2つの異なる文字に対して同じ番号」を割り当てるわけ。
つまり番号からでは、どの文字かどうかはわからない。
そこで使用されるのが、エンコーディング(文字コード)

番号を文字として認識するには、文字コード情報が必要不可欠

31 :デフォルトの名無しさん:2011/10/30(日) 16:47:39.58
ここがPerlスレなのは承知してるけど、文字列はPerlだけのものじゃないだろ?
例えばPerlで処理した後にPythonで処理したり、お前の母ちゃんが処理したり
することもあるだろ?

32 :デフォルトの名無しさん:2011/10/30(日) 16:49:32.04
>>31
そういう場合は文字を一旦バイナリに変換する。
そして他の言語でバイナリとして読み取ったものを
その言語用の文字列として変換するんだよ。

33 :デフォルトの名無しさん:2011/10/30(日) 16:51:39.46
どうしてもバイナリと対比させたいんだなw

34 :デフォルトの名無しさん:2011/10/30(日) 16:53:22.73
お前の母ちゃんバイナリ扱えるのか、ちょっと感心した。

35 :デフォルトの名無しさん:2011/10/30(日) 17:01:38.82
もしかして、テキストエディタと
バイナリエディタの区別がつかない人?

バイナリのまま、文字列を操作するのは大変だろw
だからテキストエディタで文字列として解釈させて・・・
でも元がバイナリ(文字コードデータが含まれてない)だから、
たまに自動判定できなくて・・・

こんなことを、いちいち言わないとわからないのかな?

36 :デフォルトの名無しさん:2011/10/30(日) 17:03:36.76
だからコンピュータに自動判定させるなって。

37 :デフォルトの名無しさん:2011/10/30(日) 17:04:24.27
コンピュータは文字(文字列も)扱えないんだからさ。

38 :デフォルトの名無しさん:2011/10/30(日) 17:05:30.40
>>37
そんな事言ってるのはお前だけw

39 :デフォルトの名無しさん:2011/10/30(日) 17:08:56.05
文字(文字列)を扱っているのはお前で、お前のコンピュータが文字を
扱っているわけではない。もし今会話している相手がコンピュータ
だっていうならチューリングテスト合格だと思うぞ。

40 :デフォルトの名無しさん:2011/10/30(日) 17:13:07.05
コンピューター一般においての文字列(テキストデータ)として話してる人と、
プログラミング言語での文字列型に格納されてる文字列について話してる人がいるかかみ合わないのでは?

41 :デフォルトの名無しさん:2011/10/30(日) 17:15:24.89
perlのutf8フラグの話が発端なんだから
プログラミング言語での文字列型に格納されてる文字列
以外の話をしている人は、なんなんだろうね。

42 :デフォルトの名無しさん:2011/10/30(日) 17:16:08.13
(△△△クラスの)文字列オブジェクトって言ってくれれば、言っている
ことにすべて同意する。

43 :デフォルトの名無しさん:2011/10/30(日) 17:19:41.78
>>42
ここはperlスレ。
perlにおいて文字列オブジェクトとは
変数の値にUTF8フラグがついたもの。

44 :デフォルトの名無しさん:2011/10/30(日) 17:21:30.96
>>41
格納される前は、格納されるものを何て呼べばいいの?

そこを議論しているつもり。
確かに格納される前の話はPerlと無関係かもしれないけれど、説明したり
するときにどうしてもそれを表わさないといけないよね?

45 :デフォルトの名無しさん:2011/10/30(日) 17:27:06.39
つ ソース文字列

46 :デフォルトの名無しさん:2011/10/30(日) 17:29:28.39
A) 文字列にはソース文字列が格納されている
B) 文字列オブジェクトには文字列が格納されている

47 :デフォルトの名無しさん:2011/10/30(日) 17:32:28.52
文字列にはリテラルの語感があるので、A) が不自然に感じる。

48 :デフォルトの名無しさん:2011/10/30(日) 17:32:45.56
>>44
これでも読んでください。

http://perldoc.jp/docs/perl/5.10.0/perlunitut.pod
・テキスト文字列(文字の文字列)
テキスト文字列、または 文字の文字列 は文字からなります。
バイト列はここでは無意味で、エンコーディングがあります。 各文字は単に文字です。
テキスト文字列は Unicode 文字列 とも呼ばれます; なぜなら、Perl では テキスト文字列は Unicode 文字列だからです。

・バイナリ文字列(バイト文字列)
バイナリ文字列、または バイト文字列 はバイト列からなります。
ここでは、文字はなく、単にバイトだけがあります。
外側の世界(現在の Perl プロセスの外側のあらゆるもの) との通信はバイナリで 行われます。

・エンコード
エンコード は テキスト から バイナリ への変換です

・デコード
デコード は バイナリ から テキスト への変換です。

49 :デフォルトの名無しさん:2011/10/30(日) 17:45:18.83
質問:二次元配列の、最後の配列要素の最後の要素を参照するにはどうすればいいでしょうか。

例:
@array = (
[1,2,3,4,5],
[6,7,8,9,10],
[11,12,13,14,15]
);

希望:上記2次元配列の中味が分からないという状況で、15という一番最後の数字を取得したい。
状況:@{$array[$#array]}で最後の配列要素[11,12,13,14,15]を取り出せることまで分かりました。
その後、いろいろ試したんですが、うまくいきません。[-1]は使えないみたいですし……。
ご教授お願いします。

50 :デフォルトの名無しさん:2011/10/30(日) 17:46:16.62
なんてことはない、
B) ≒ C) 文字列変数に文字列が格納されている
ってこと。

Perlの場合は文字と数値を区別しない変数なので文字列変数ってもの
がなかったわけで、ついでにバイナリストリングと文字列の区別も
なかった。区別がない方が便利なこともあるし、システム的に区別が
あった方が便利なこともある。

でも入れるものと入れられるものを区別できないと困るし、単語が
今までの用法と異なるのも混乱の元。

51 :デフォルトの名無しさん:2011/10/30(日) 17:50:42.92
print (@{$array[-1]})[-1];

52 :デフォルトの名無しさん:2011/10/30(日) 17:53:32.26
print $array[-1][-1];

53 :デフォルトの名無しさん:2011/10/30(日) 17:56:44.75
arrayって
あ〜れぇ〜って読むの?
それとも、ありぃ〜?って読むの?

54 :デフォルトの名無しさん:2011/10/30(日) 18:36:16.81
アレィ

55 :デフォルトの名無しさん:2011/10/30(日) 19:08:21.20
A') 数値にはソース数値が格納されている
B') 数値オブジェクトには数値が格納されている

数値にはリテラルの語感があるので、A') が不自然に感じる。

56 :デフォルトの名無しさん:2011/10/30(日) 19:16:27.45
変数に数値(数値オブジェクト)が格納されている。
変数にバイナリ値が格納されている。
変数に文字列が格納されている。

これでいいじゃん

57 :デフォルトの名無しさん:2011/10/30(日) 19:19:04.01
>>51
>>52
ありがとうございます。
[-1]だと何故かダメなんです。表示されません。

58 :デフォルトの名無しさん:2011/10/30(日) 19:21:36.92
>>57
-1 が使えない状況がおかしい。
使えないというコードそのままさらしてみ?

59 :デフォルトの名無しさん:2011/10/30(日) 19:26:15.90
>>56
格納される前は?
これから格納しようかと思っているものの名称は?

60 :デフォルトの名無しさん:2011/10/30(日) 19:29:41.19
>>59
要するに変数の右辺だろ?

変数に入れたからって、右辺の状態が
変更されるわけ無いだろ。

変数に入れるまでもなく、
数値、バイナリ値、文字列、ついでにオブジェクトだよ。

61 :デフォルトの名無しさん:2011/10/30(日) 19:30:26.03
×要するに変数の右辺だろ?
○要するに変数への代入式の右辺だろ?

62 :デフォルトの名無しさん:2011/10/30(日) 19:33:40.77
右辺といってる時点でもうスクリプトの中の話になってるしw

63 :デフォルトの名無しさん:2011/10/30(日) 19:39:29.07
え? スクリプト外?
なら答えは>>48に書いてあるじゃん。

> 外側の世界(現在の Perl プロセスの外側のあらゆるもの) との通信はバイナリで 行われます。

はい、バイナリです。


64 :デフォルトの名無しさん:2011/10/30(日) 19:40:01.46
おれ、この流れすきwww

65 :デフォルトの名無しさん:2011/10/30(日) 19:41:51.30
スクリプトの外には出たものの、まだコンピュータの中だな。
がんばれ!!!

66 :デフォルトの名無しさん:2011/10/30(日) 19:42:32.36
>>65
お前何のはなししてるの?

67 :デフォルトの名無しさん:2011/10/30(日) 19:47:05.38
1レスどころか66レスまでひっぱるutf8フラグ

68 :デフォルトの名無しさん:2011/10/30(日) 19:56:22.11
utf8フラグがあるべきところ

69 :デフォルトの名無しさん:2011/10/30(日) 20:00:49.05
{
no utf8;

70 :デフォルトの名無しさん:2011/10/30(日) 20:09:50.87
おまえらいいかげんにしろ
文字の話は↓こっちに移ったんだろうがよ

Perlについて
http://hibari.2ch.net/test/read.cgi/tech/1217851121/

71 :デフォルトの名無しさん:2011/10/30(日) 20:18:25.73
>>58
環境はHTML出力なので、
あまり周辺を広げるとスレ違いになりそうなんすが、

my @current_month = calendar($mon,$year); #@current_monthに対象月の日にちデータを二次元配列で格納。
print @{$current_month[-1]}[-1]; #対象月の最終日を表示。

試したもの↓
print "$current_month[-1][-1]";
print "@{$current_month[-1]}[-1]";
print "@{$current_month[$#current_month][-1]}";
print "$current_month[$#current_month][-1]";

""を外してみてもダメでした。


72 :デフォルトの名無しさん:2011/10/30(日) 20:22:21.56
calendar が1次元配列で返せば解決

73 :デフォルトの名無しさん:2011/10/30(日) 20:34:39.89
「初めてのPerl 第3版」(ちょと古い)をひと通り読んで、
モジュールの作り方とか載ってないので、次の本を探
しています。

だいたいPerlの書き方はわかったので、リファレンスを
兼ねた本がいいと思い、「プログラミングPerl 第3版」
を検討していますが、内容的には古くないでしょうか?
2002年というのがどうにも気になりまして。

あとできればマルチバイト文字にも配慮した本だと
いいのですが望み薄ですか?
shiftjisのテキストファイルを扱うときに、日本語処理に
随分手間取ったので。(Encodeモジュールを使いました)




74 :デフォルトの名無しさん:2011/10/30(日) 20:41:09.19
>>72
週ごとに区別する都合で2次元配列なんです。
いろいろ手間をかければ月の最終日が何日なのかは参照できると思いますが、
一発でアクセスできる方法があればなと……。

75 :デフォルトの名無しさん:2011/10/30(日) 20:43:04.65
@{$current_month[-1]} は最終週を返しているか確認した?

76 :デフォルトの名無しさん:2011/10/30(日) 20:46:39.12
use Data::Dumper ;
して、
print Dumper \@current_month ;
の結果が想定通りかまず調べろ。
実際には一次元が返ってたとか、undef が
返ってたとかあるだろ。


77 :デフォルトの名無しさん:2011/10/30(日) 20:47:28.97
print (grep(/\d/,@{$current_month[-1]}))[-1];

78 :デフォルトの名無しさん:2011/10/30(日) 20:50:38.36
一週間は7日固定で作られていて、最終週の後半は undef で
埋まっているに一票。

79 :デフォルトの名無しさん:2011/10/30(日) 22:30:04.75
>>78
今日はもうコードをチェックしませんが、恐らく真理です……。
calendarモジュールから取得した日にちデータを、
実際のカレンダーのように、日〜土までを一行として表組みしてます。
仮に月曜日でその月が終わるとすると、火〜土までは空白セルとして表示するようになってます。

……とすると配列の最後尾にアクセスするんじゃなくて、
undefでない最後の有効値にアクセスするように書けばいいってことですよね。
いちいちループ使ってその配列の後ろからundefかそうでないかを調べていったほうが早いでしょうか。
一発で最後の有効値にアクセスする方法ってあります?

80 :デフォルトの名無しさん:2011/10/30(日) 22:39:28.14
>>79
77氏がその質問を予見してて、答えの一案を書いてるだろ。


81 :デフォルトの名無しさん:2011/10/30(日) 23:04:38.66
undef かもしれないものに直接 /\d/ はダメじゃね
use strict; use warnings; もしてないであろう>>79なら平気かしらんが

82 :デフォルトの名無しさん:2011/10/31(月) 00:22:08.94
>>73
続・初めてのPerl 改訂版
まるごとPerl! Vol.1

それに腐っても鯛、
プログラミングPerl 第3版
は、読む価値がある
でもその前に
プログラミングPerl 第2版
を薦めておく

83 :デフォルトの名無しさん:2011/10/31(月) 00:27:31.33
オライリーだからいいって言ってるだけで
実際は読んでないんだろうなw

84 :デフォルトの名無しさん:2011/10/31(月) 01:41:52.11
>>79
欲しいのは「二次元配列の最後の(undefではない)要素の値」なのか、
「その年・月の末日の日付」なのか、どっち?

後者ならその配列の値を参照する以外にも取得方法はあると思うが。

use Date::Calc qw(Days_in_Month);
print Days_in_Month($year,$mon);

とか。

まあ>>77の方法でもいいだろうけど。

85 :デフォルトの名無しさん:2011/10/31(月) 03:05:19.57
Imager.pmで画像のリサイズをしています。
例えば、480×320pxの画像を、400×400pxの枠内に収めたいとき、
cropするだけだと、400×300pxとなってしまいます。
これを、上下50pxずつ白い背景を付け足して、400×400pxの画像に
したいのですが、方法をご存知の方がいたら是非教えてください。

86 :デフォルトの名無しさん:2011/10/31(月) 04:48:48.11
>>79
俺だとこうするかなぁ。行頭の空白全角にしてるけど:

my $last_day = (
  grep { defined $_ }
  map { @{$_} }
  @current_month
)[-1];

87 :デフォルトの名無しさん:2011/10/31(月) 08:37:42.50
>>18
Data::Dumperは出力結果をevalすると元に戻るというのも趣旨の1つ。
そのため、元がテキスト文字列だったものをevalしてもテキスト文字列
に戻るように、"\x{ff84}"という記法で出力している。

88 :デフォルトの名無しさん:2011/10/31(月) 12:31:48.72
>>77 >>84 >>86
ありがとうございました。
>>86の方法で解決です。

ちなみにuse strict;use warnings;どっちもしてます。

89 :デフォルトの名無しさん:2011/10/31(月) 13:28:43.74
use warnings して warnings の出力ちゃんと見てればあんな質問する前に原因に気づけてるはずなんだよ……
大方、CGI でしか動かしてなくてしかも CGI::Carp を使ったデバッグすらしてない、とかなんだろうけど。

90 :デフォルトの名無しさん:2011/11/01(火) 17:59:02.82
perlのソート関数ってどんなソート方法が使われているんですか?
1000個の配列を大きい順に並びかえるようなソートだと
自作関数だと1000*1000回のループになっちゃうんだけど、これより速いですか?

91 :デフォルトの名無しさん:2011/11/01(火) 18:01:00.07
訂正:1000*(1000ーn)回のループです

92 :デフォルトの名無しさん:2011/11/01(火) 18:21:27.17
http://perldoc.perl.org/functions/sort.html
http://perldoc.perl.org/sort.html

93 :デフォルトの名無しさん:2011/11/03(木) 00:28:27.70
#!/usr/bin/perl -w

use encoding "utf8"
use Encode;
use strict;

print encode('shiftjis',"テストテスト");

こんな感じのソースを書いて、UNIXサーバに送って
TeraTerm(SJIS設定)で実行すると文字化けする
んですが、何が問題なのでしょう?

TeraTermをutf8設定にして、encodeなしでで表示させれば、
うまく表示されるんですが、SJISのファイルが多いので、TeraTermの
設定はSJISにしておきたいと思っています。

もちろん上記ソースはUTF8で保存してます。







94 :デフォルトの名無しさん:2011/11/03(木) 00:53:08.42
http://blog.livedoor.jp/dankogai/archives/51221731.html

use encoding;は、jperlなど、かつて存在したL10Nされたperl用に
書かれたレガシースクリプトを、モダンperlで動かすときのためのおまじないです。

スクリプトはUTF-8で書き、use utf8;する
のがモダンPerlのあり方です。

95 :デフォルトの名無しさん:2011/11/03(木) 01:15:50.78
>>94
おー ありがとうございます。
ソースが職場なので、あとで確認してみます。

この辺の漢字圏の文化を踏まえたPerlの本が
あると良いのですけど、ありませんかね?



96 :デフォルトの名無しさん:2011/11/03(木) 01:28:38.23
漢字とか知らないけど
モダンperlについて調べたほうがいい。
ネットは古臭いコードで溢れてる。

97 :デフォルトの名無しさん:2011/11/03(木) 01:38:26.41
ユーザが繰り出すモジュールで最先端が変化するってのも
これまた奇特な言語だな


98 :デフォルトの名無しさん:2011/11/03(木) 02:28:27.58
Perlは管理する団体がないからね。
Perlの標準ライブラリとは、ユーザが作ったモジュール。
それが利点でもあるが、メンテナが一個人だったりするわけで
その人の気分で仕様が変わり、互換性が低い部分がある。

99 :デフォルトの名無しさん:2011/11/03(木) 03:51:43.51
CJKV日中韓越情報処理 ケン ランディ、小松 章、逆井 克己
文字コード「超」研究 改訂第2版 深沢千尋

まだあるけどね

100 :デフォルトの名無しさん:2011/11/03(木) 10:42:18.14
Windows 2000、Activeperl 5.8 の環境で、
use Socket;
socket(・・・);
connect(・・・);
な感じでインターネット上のwebサイトからページを取得してるんだけど、
サイトの応答が遅いとき、応答が帰ってくるまでCPU負荷が100%近くになる。

これって何が原因でしょうか。
まあ、PCのスペックはWin2000を使っているというあたりで想像いただけるとは思いますがしょぼいです。

Activeperlのバージョン上げれば直るのかな…

101 :デフォルトの名無しさん:2011/11/03(木) 15:09:06.33
>>83
お薦めだけでも300冊位思いついちゃってレスがまんどくさく
なっちゃったんだろうなw

102 :デフォルトの名無しさん:2011/11/03(木) 19:29:28.98
>>100
WEB プログラミング板へ
http://hibari.2ch.net/php/


103 :デフォルトの名無しさん:2011/11/03(木) 19:34:23.06
とあるサイトで、ファイルのオープンは3つの引数を指定してオープンするのを強く推奨していました。
理由はセキュリティ的に脆いかららしいのですが・・・

いったい、どうセキュリティ的に脆いのでしょうか?

104 :デフォルトの名無しさん:2011/11/03(木) 20:40:50.01
DBI で長ったらしい SQL を複数行で書きたいのですがどうすればいいですか?
my $dbh = $DBI->connect(引数);
my $sth = $dbh->prepare("SELECT なんちゃらかんちゃら 〜 超長ったらしい 〜;"); # ←ここ!
$sth->execute();
$sth->finish();
$dbh->disconnect();

>>103
OS コマンドインジェクション

例えば次のような open 関数呼び出しは危険。
open($fh, $filename);
この状態だと $filename = ";halt"みたいにして外部コマンドを実行できる。
対策として、
open($fh, "<$filename");
open($fh, "<", $filename);
sysopen($fh, $filename, O_RDONLY);
みたいにすると OS コマンドを実行できなくなる。

105 :デフォルトの名無しさん:2011/11/03(木) 20:40:53.11
>>102
ありがとうございます。
行ってみます。

106 :デフォルトの名無しさん:2011/11/03(木) 20:52:34.55
>>104
$sql = <<"_SQL_";
SELECT foo FROM table WHERE 〜
_SQL_
$sth = prepare( $sql );

107 :103:2011/11/03(木) 20:54:27.16
>>104
なるほど〜
任意の外部コマンドが実行されてしまう可能性があるって事だったのですね・・・
わかりました、これからは3つ引数でオープンする事にします。
ありがとうございます。


ちなみに、sql文は、

my $sth = $dbh->prepare(
  "SELECT なんちゃらかんちゃら ".
  "FROM 超長ったらしい ".
  "WHERE うんたらかんたら"
);

の、ように、俺は分割してます。

108 :デフォルトの名無しさん:2011/11/03(木) 20:56:25.03
>>106
まちがった。
$sth = $dbh -> prepare( $sql );
だす。

109 :デフォルトの名無しさん:2011/11/03(木) 21:07:44.04
(my $sql = <<END_SQL) =~ s/\n//g;
SELECT foo
FROM table
WHERE ...
END_SQL

110 :104:2011/11/03(木) 21:13:42.72
>>106>>107-108
ありがとうございます!
確かにヒアドキュメントとか文字列の結合を使えばできますねw
Cから乗り換えたばかりなのでなかなか思いつきませんでした。

111 :104:2011/11/03(木) 21:14:08.56
>>109もありがとうございます。

112 :デフォルトの名無しさん:2011/11/04(金) 23:07:23.16
>>94
use utf8でうまく漢字が出るようになりました!
ありがとうございました。



113 :デフォルトの名無しさん:2011/11/05(土) 01:05:25.23
>>87
うわ、ありがとうございます、よくわかりました。
前スレで答えてくれた方もありがとうございました。

114 :デフォルトの名無しさん:2011/11/05(土) 10:51:18.81
>>104
折り返して書く小細工で極低頻度に発症するバグで呼び出されることも
あるのでそのまま1行で書くのもまた一興。

115 :デフォルトの名無しさん:2011/11/05(土) 14:07:20.20
mooseのisaってStr,Intってあるけど、両方入ってくる可能性がある場合はどうしたらいいですか?

116 :デフォルトの名無しさん:2011/11/05(土) 14:28:06.53
isa => 'Str|Int' のようにすれば複数指定できる。
ただし、この場合は Str だけでおk。
http://search.cpan.org/perldoc?Moose::Util::TypeConstraints#Default_Type_Constraints

117 :デフォルトの名無しさん:2011/11/05(土) 14:42:47.56
なるほど、Str|Intのほうが分かりやすくて親切かもと思ったけど、Strがある時点でNumも許容されちゃうからダメですね。
ありがとうございました。

118 :104:2011/11/05(土) 16:49:36.33
>>114
ありがとうございます。
参考にさせていただきます。

119 :デフォルトの名無しさん:2011/11/06(日) 21:30:26.49
正規表現で /$self->method/とやっても$selfだけ展開されちゃってて、教えてもらったのが
@{[$self->method]} なんですが、これってどういう理屈で動いてるんでしょうか?

120 :デフォルトの名無しさん:2011/11/06(日) 21:46:06.94
my $arrayref = [ $self->method ];
/@{$arrayref}/

121 :119:2011/11/07(月) 01:10:07.93
えぇぇ、、、、それはなんか微妙ですね、、、、
他に分かりやすい方法ってないんでしょうか。

122 :デフォルトの名無しさん:2011/11/07(月) 01:53:17.22
>>119
なんだか変な方法で展開してるね・・・
${self->method}で十分だと思うんだけど・・・
わざわざ、$self->methodの値を配列のリファレンスにして、
それをデリファレンスしてる・・・
意味があるんだろうか・・・俺も教えてほしい

123 :デフォルトの名無しさん:2011/11/07(月) 02:06:16.44
>>122
おもしろくないぞ。

124 :デフォルトの名無しさん:2011/11/07(月) 02:08:02.26
print "${\( some_func() )}"

125 :デフォルトの名無しさん:2011/11/07(月) 02:19:10.91
if ($string =~ $self->method) {
  ...
}


126 :デフォルトの名無しさん:2011/11/07(月) 02:57:07.87
>>123
いや、まじめなんだけど・・・
それが配列リファレンスだったとしても、
@{$self->method}で十分だと思うし・・・

どういう事なのですか?教えてください

127 :デフォルトの名無しさん:2011/11/07(月) 03:46:57.00
まず>>122、${hoge} と ${self->method} とでは ${ } の意味合いが違う。
前者は $hoge だが、後者は self->method の戻り値をスカラーリファレンスと見做してデリファレンスするという意味になる。
しかし self->method なんてものは元々の話に出ていないので、見当違い。

次、>>126。$self->method の戻り値は配列リファレンスじゃなくて単品の文字列だから、
@ で配列にデリファレンスする前に [ ] で囲って要素1つの配列リファレンスに仕立ててあげる必要があるわけ。

128 :デフォルトの名無しさん:2011/11/07(月) 05:50:46.03
>>127
あぁそっか、大きな間違いをしてた
$self->methodはサブルーチンのリファレンスだったね

しかし変な評価の仕方だな〜って思って見なおしたけど、
言われてみれば、この形・・・
CGIとかでHTMLをヒアドキメントで書いた時、
その中で関数を実行する時に、この形書いた事があったや・・・
勉強になりました

129 :デフォルトの名無しさん:2011/11/08(火) 00:01:09.30
ファイルポインタを指定した行の先頭に移動させるにはどうしたらいいんですか?
seekだとバイト数でしか指定できないし

$count=0;
while(<IN>){
$count++;
if($count==$gyousuu){
last;
}
}

これだとファイルの行数が多いほどループ回数が多くなるから重くなる
だからいっきに飛びたいんです

130 :デフォルトの名無しさん:2011/11/08(火) 01:03:30.79
>>129
そもそも何行目かってのは
改行コードが何回出たかを数えないと特定不能

先頭から順番に読んで改行を数えるか
ファイル丸ごとリストに読んでから添字で飛ぶかしかない

ぶっちゃけそのままの方法が最善じゃないか?

131 :デフォルトの名無しさん:2011/11/08(火) 01:07:09.14
>>129
@list = <$fh>;
とかやって配列で扱う
pushとpopでぽぽぽぽーん


132 :デフォルトの名無しさん:2011/11/08(火) 01:10:56.87
>>129
$countとかいう不気味なカウンタ付けてるのが気になる
行数カウントなら自前で用意しなくても $. がある
相当な素人っぽいから、そこらの本やらサイトやらperldocやらを読んでみたほうがいい


133 :デフォルトの名無しさん:2011/11/08(火) 11:49:25.93
>>129
メモリに制約がないなら>>131でいいんじゃないの?

>>132
$.を使ったってやることは一緒でしょ。

134 :デフォルトの名無しさん:2011/11/08(火) 12:17:14.78
>>132
おれはperl歴6年だぜ

135 :デフォルトの名無しさん:2011/11/08(火) 12:35:36.94
>>134
たったの6年でドヤ顔されても困るんだがw

136 :デフォルトの名無しさん:2011/11/08(火) 14:32:42.45
>>129
適当なサイズのバッファ単位で読めば read(2) の回数は減るかもしれない。
http://perldoc.jp/docs/perl/5.10.1/perlfaq5.pod#How32do32I32count32the32number32of32lines32in32a32file63
http://www.din.or.jp/~ohzaki/perl.htm#File_Tail
http://perldoc.jp/func/read
http://perldoc.jp/func/seek
http://perldoc.jp/func/sysread
http://perldoc.jp/func/sysseek

自前で逐一書きたくなければ代わりにやってくれる道具を使う。
http://perldoc.perl.org/Tie/File.html
http://perldoc.jp/docs/modules/DB_File-1.805/DB_File.pod#DB_RECNO

もしくはファイルフォーマットを固定長レコードに変えて位置を計算で出せるようにする。

137 :デフォルトの名無しさん:2011/11/08(火) 18:07:15.44
>>134
俺は13年だぜ(キリッ

しかし別に13年ずっとperlじゃないから、
ぜんぜん詳しくなく普通くらいなんだぜ!

138 :デフォルトの名無しさん:2011/11/08(火) 18:23:51.81
出ました『普通』!!
『普通』ってどれくらい?

139 :デフォルトの名無しさん:2011/11/08(火) 18:34:57.86
>>137-138
http://hibari.2ch.net/prog/

140 :デフォルトの名無しさん:2011/11/08(火) 18:45:57.57
>>138
print "hello world"; (ドヤ

141 :デフォルトの名無しさん:2011/11/09(水) 13:44:58.03
文字列を直接スカラー変数にする方法はどのようにするのでしょうか?

$array = [ "a", "b", "c" ];
$hash = { a => "1" };
$scalar = ?? #my $string = "a"; $scalar = \$string; を一度にやりたい

142 :デフォルトの名無しさん:2011/11/09(水) 13:55:48.82
my $string = "a";
my $scalar = \$string;
print $scalar."\n" ;

my $ref = \("a") ; # ココ!!
print $ref."\n" ;

こういうの?


143 :デフォルトの名無しさん:2011/11/09(水) 13:59:40.48
単一の文字列リテラルに対してなら括弧いらんぞ

144 :デフォルトの名無しさん:2011/11/09(水) 14:51:26.01
>>143
どうしてこういうヤツは例を上げれないの?
質問スレにお前は必要なの?

145 :デフォルトの名無しさん:2011/11/09(水) 15:21:46.02
こういうことかな。めったに使わない気はする。
 $ref = \ "a"
 print $$ref;
スカラーリテラルへのリファレンスなんて生成できるのか。
Perl 本体のドキュメントにそういう例は見当たらない(あったら教えて)が、
『プログラミングPerl』(Vol.1)「8.2.1 逆スラッシュ演算子」に一つだけ
 $constref = \186_282.42;
という例がある。

146 :デフォルトの名無しさん:2011/11/09(水) 15:52:40.17
perlの本とかにはねーなー
でもC言語なら説明があるっしょ
文字列はアドレスを値として持つ式だ、とかの


147 :143:2011/11/09(水) 16:03:25.19
perlref にこんなんあるよ。
 $refrefref = \\\"howdy";
 print $$$$refrefref;

無名スカラーリファレンスそれのみを単独で使うシーンはあまりないが、
モジュールなどで通常の文字列と区別するための印として使うことがままある。
たとえば DBIx::Class::Row の update メソッドは、通常、
 $row->update({ last_modified => '2011-11-09 00:00:00' });
のようにして使い、値は SQL 側で安全な文字列として扱えるよう自動的にクオートされるが、
 $row->update({ last_modified => \'NOW()' });
のようにスカラーリファレンスを渡した時はクオートしないという仕様にすることで、
大きくコードを変えずに SQL の NOW() 関数を実行することもできるようになっている。

148 :デフォルトの名無しさん:2011/11/09(水) 16:04:04.42
この本にありそうかな?
「すぐわかるオブジェクト指向Perl」 深沢千尋 2008
http://www.supee.jp/sop/contents.html

2-4 名もないスカラー~無名スカラーリファレンス
のところがそれっぽい
ただ、「スカラー変数のリファレンスはあまり役に立たない 」とズバリ書かれてる

でもその後に無名配列、無名ハッシュ、そして無名関数と続いて、
最後にはクロージャに行きつくはずだから、
無名スカラーのリファレンスは、かならず説明しなきゃーならないモンなんだろう


149 :141:2011/11/09(水) 16:25:07.58
おお、たくさん議論されている。
ありがとうございます。
普段使う分にはあんま意味なさそうですよね。

今回やりたいことは、モジュールの引数が文字列のリファレンスを要求される場合に一発で書きたいと思っていました。

150 :デフォルトの名無しさん:2011/11/09(水) 16:34:45.07
定数を作るのに役立つと、どっかのサイトで見た記憶がある

*PI = \3.14;
print $PI;
$PI = 3; # エラー


151 :デフォルトの名無しさん:2011/11/09(水) 16:37:00.27
>>145 >>150
http://perldoc.jp/docs/perl/5.10.0/perlmod.pod#Symbol32Tables
> シンボルテーブルの別の使い方は、「定数」スカラを生成するためのものです。
> *PI = \3.14159265358979;

constant プラグマやプロトタイプ宣言による定数は関数なので文字列中に埋め込みにくい。

#!/usr/bin/perl -w
use strict;
sub CONST () { 'foo' }
our $Const; *Const = \'foo';
print join ' ', 'bar', CONST, $Const, "baz\n";
print "bar ${\ CONST() } $Const baz\n";
$Const = 'quux'; # Modification of a read-only value attempted at ...

152 :デフォルトの名無しさん:2011/11/09(水) 16:43:53.86
スカラ変数にblessするのをどっかで読んだがどこかは忘れた

153 :デフォルトの名無しさん:2011/11/09(水) 16:56:53.79
定数なら内部フラグを操作する関数を利用する手もあるね

my $PI = 3.14;
Internals::SvREADONLY($PI, 1);

154 :デフォルトの名無しさん:2011/11/09(水) 19:16:06.96
定数は関数にするってのはマズいのか?

155 :デフォルトの名無しさん:2011/11/09(水) 19:23:28.50
ちょっと何言ってるかわかんないです。

156 :デフォルトの名無しさん:2011/11/09(水) 20:00:34.56
>>155
sub HOGEHOGE() { 10; }

157 :デフォルトの名無しさん:2011/11/09(水) 21:34:30.76
>>154
遅くならない?

158 :デフォルトの名無しさん:2011/11/09(水) 21:40:42.08
>>157
コンパイル時に展開されるので速くはなっても遅くはならない。
http://perldoc.jp/docs/perl/5.10.0/perlsub.pod#Constant32Functions

159 :デフォルトの名無しさん:2011/11/10(木) 00:12:17.58
パ・パ・パパッパ〜Perlライス

160 :デフォルトの名無しさん:2011/11/11(金) 09:42:44.41
インストールされているモジュールの一覧を確認したいと思っています。
しかし下記を実行しても
use lib
した
'./local1/lib'や'./local2/lib'
にインストールしているモジュールが出力されないようです。
use lib
で設定したパスも検索できるようにするにはどのようにしたら良いのでしょうか?

#!/usr/bin/perl
use lib (
'./local1/lib',
'./local2/lib',
);

use ExtUtils::Installed;

my $ei = ExtUtils::Installed->new;
print for $ei->modules;

161 :デフォルトの名無しさん:2011/11/11(金) 12:57:46.22
>>160
http://search.cpan.org/dist/ExtUtils-Install/lib/ExtUtils/Installed.pm#new

162 :160:2011/11/11(金) 17:14:09.51
>>161
new()の所で設定できるんですね。
解決しました。ありがとうございます。

163 :デフォルトの名無しさん:2011/11/11(金) 21:37:08.92
my $output = `/bin/ls -ls`
とやって、$outputの中身を一行ずつ処理したいのですが、どう書けばいいですか?
while (<>) {
一行ずつ処理;
}
みたいな感じです。



164 :デフォルトの名無しさん:2011/11/11(金) 22:37:48.75
>>163
my @output = `/bin/ls -ls`;
これで、配列outputの各要素に1行ずつ格納できる。
それをどう処理するかは、outputの扱い次第。

165 :デフォルトの名無しさん:2011/11/11(金) 22:44:29.58
>>163
while(<>) での <> をダイアモンド演算子と呼ぶ。
普通のファイルハンドラならダイアモンド演算子の部分を
<FH>とか<$fh>などと書けばいいのであるが、
$outputというスカラで受け取ってはどう書くのが分からない……のだとする。

とすれば>>164の言う通り結果を配列で受け取って、

for (@output) {
    #処理($_が使える、$.は使えない)
}

のように、forで配列を書いて一行ずつ処理すればいい。

166 :デフォルトの名無しさん:2011/11/11(金) 22:51:06.82
>>163
my @output = `/bin/ls -ls`;
foreach my $temp ( @output ){
# $tempが配列の各要素として扱える。
}

167 :デフォルトの名無しさん:2011/11/11(金) 23:30:30.31
質問者ではないんだけど、リストコンテキストだから丸飲みってことだよね。
普通のファイルハンドルみたいに一行ずつメモリに読み込めないのだろうか。

168 :デフォルトの名無しさん:2011/11/11(金) 23:40:02.37
open my $fh, '-|', '/bin/ls -ls';
while (<$fh>) {
print "$. : $_";
}

169 :デフォルトの名無しさん:2011/11/11(金) 23:44:03.07
great!
thank you for the quick response.
you guys are awesome!


170 :デフォルトの名無しさん:2011/11/11(金) 23:57:57.17
Glad to help you. I wish this was StackOverflow so that I could get a +1 or more.

171 :デフォルトの名無しさん:2011/11/12(土) 11:49:12.12
日本語でおk

172 :デフォルトの名無しさん:2011/11/12(土) 12:30:04.70
>>169は中学生?

173 :デフォルトの名無しさん:2011/11/13(日) 12:38:46.79
http://www.nicovideo.jp/watch/*にアクセスしたあと
10秒以内に5回
http://flapi.nicovideo.jp/api/getflv/sm*
にアクセスするようにしたいんだけど

174 :デフォルトの名無しさん:2011/11/13(日) 12:57:35.48
>>173
そうか。

175 :デフォルトの名無しさん:2011/11/13(日) 13:04:51.13
どうやればいいのかさっぱりわからん

176 :デフォルトの名無しさん:2011/11/13(日) 13:35:57.05
>>17
できたよ。

sugoi_program.bat

wget http://www.nicovideo.jp/watch/*
wget http://flapi.nicovideo.jp/api/getflv/sm*
wget http://flapi.nicovideo.jp/api/getflv/sm*
wget http://flapi.nicovideo.jp/api/getflv/sm*
wget http://flapi.nicovideo.jp/api/getflv/sm*


177 :デフォルトの名無しさん:2011/11/14(月) 10:40:12.47
my $val = 1 / 3;
say $val; # 0.333333333333333
say $val * 3; # 1

これを1ではなく、0.999999999999999として扱いたい場合どうすればいいでしょうか

178 :デフォルトの名無しさん:2011/11/14(月) 10:55:43.44
>>177
どっかの桁で四捨五入する。

179 :デフォルトの名無しさん:2011/11/14(月) 11:32:28.67
Math::BigInt
Math::BigFloat

180 :デフォルトの名無しさん:2011/11/14(月) 13:08:33.54
UTF8の文字列を[0-9a-z_]+のみに変換して、それを元に戻したいです。

my $word = 'フルーツ'; #UTF8
$word = unpack('H*', $word); #$wordは「d5ebfcc4」
$word = pack('H*', $word); #←では$wordが元に戻らない。
とかやってみましたがうまくいかず、そもそもやり方がわかりません。
標準関数のみで実装する方法があれば教えてください。

181 :180:2011/11/14(月) 15:56:56.41
今まで試行錯誤続けて、いったんUTF8フラグを外すとちゃんと動作しました。

182 :デフォルトの名無しさん:2011/11/14(月) 15:58:36.03
pack "H*" とかだと[0-9a-z_]じゃなくて[0-9a-f]になっちゃうけどそれでもいいのかい

183 :デフォルトの名無しさん:2011/11/14(月) 16:05:50.23
>>181
utf8フラグを外さずに処理したいなら

use Encode;

my $word = unpack('H*', encode('utf8', 'フルーツ'));
# ...
$word = decode('utf8', pack('H*', $word));

とか

184 :180:2011/11/14(月) 16:17:56.04
>>182-183
ありがとうございます。範囲内に収まってたらOKってことで、解決しました。

あれ、でも自分で書いたのが>>183さんの方法と同じ感じだ
Encode::encode('utf8',$word);でフラグ外れるものと思ってた

185 :デフォルトの名無しさん:2011/11/14(月) 16:42:14.09
>>184
ああ、utf8フラグを外すっていうのを
use utf8;
を使わないって解釈しました

186 :デフォルトの名無しさん:2011/11/14(月) 17:06:09.89
use utf8;
use feature qw(say);

my $word = 'フルーツ';
say $word; #=> 'フルーツ' (UTF8フラグ有)

my $hex = unpack 'U0H*', $word;
say $hex; #=> 'e38395e383abe383bce38384'

my $packed1 = pack 'U0H*', $hex;
say $packed1; #=> 'フルーツ' (UTF8フラグ有)

my $packed2 = pack 'H*', $hex;
say $packed2; #=> 'フルーツ' (UTF8フラグ無)

187 :デフォルトの名無しさん:2011/11/14(月) 20:43:40.86
要素が文字列の配列が空であるかを調べたいのですが
条件に@array eq ""とやってみてもうまくいきません
いい方法があれば教えて下さい

188 :デフォルトの名無しさん:2011/11/14(月) 20:49:07.12
> 要素が文字列の配列が空であるか
???

189 :デフォルトの名無しさん:2011/11/14(月) 21:20:00.35
すいません
空の配列(初期化した状態)かどうか判断したいということです
お願いします

190 :デフォルトの名無しさん:2011/11/14(月) 21:21:05.33
うんでf

191 :デフォルトの名無しさん:2011/11/14(月) 22:01:13.50
空?
if (@ary) {

}
ってことかな。
ifはスカラーコンテキストだから、要素数が返ってくる。一個も入ってないなら0だからifは偽になる。

192 :デフォルトの名無しさん:2011/11/14(月) 23:07:53.46
もしかして、>>187は変な方法で初期化してるんじゃなかろうか。
>>190がエスパーな気がした。

193 :デフォルトの名無しさん:2011/11/14(月) 23:24:15.59
if(hairetsu is sky) {
}

194 :デフォルトの名無しさん:2011/11/14(月) 23:30:17.72
配列・イン・ザ・スカイ・ウィズ・ダイアモンド演算子

195 :デフォルトの名無しさん:2011/11/15(火) 02:12:44.48
すみません寝てしまいました
defineというもの自体知らなかった初心者ですのでもう一度基礎から勉強しようと思います
初期化は@array = ();とやってました

>>191
わかりやすい解説ありがとうございます
おかげでやりたいことができました

196 :193:2011/11/15(火) 03:25:16.03
どういたしまして

197 :デフォルトの名無しさん:2011/11/15(火) 04:46:22.78
>>196
おまえじゃないw

198 :デフォルトの名無しさん:2011/11/17(木) 00:16:29.37
activeperlでsleepさせている最中にwindowを休止させます
次に復帰させると、休止した時点ではまだsleepの残り時間はあったのに、
いきなりsleepから抜けて処理を再開してしまいます
しかも、ログインする前に

休止しても残り時間を保持させる方法はありませんか

199 :デフォルトの名無しさん:2011/11/17(木) 13:29:49.80
my $hoge = { hoge => 'HOGE' };
my $fuga = { huga => 'FUGA' };
my $piyo = $fuga;

print $fuga; #$fugaのリファレンスアドレス出力

上記があった場合にリファレンスのアドレスを変えずに追加するには

$fuga->{


200 :デフォルトの名無しさん:2011/11/17(木) 13:41:11.55
>>199
途中で書き込んでしまいました。。

リファレンスのアドレスを変えずに沢山の要素を追加したいです。

@これではアドレスが変わってしまいます。
my $hoge = { hoge => 'HOGE' };
print "$hoge\n";
$hoge = {
%$hoge,
huga => 'HUGA',
piyo => 'PIYO',
};
print "$hoge\n";

Aこれだとアドレスは変わりません。
my $hoge = { hoge => 'HOGE' };
print "$hoge\n";
$hoge->{fuga} = 'FUGA';
$hoge->{piyo} = 'PIYO';
print "$hoge\n";

--------------------------------
@のようにできると書くのが楽だし、1処理で済むので処理も早いのではないかと思っています。
しかしアドレスを変えずにリファレンスに追加するにはAの方法しかないのでしょうか。

201 :デフォルトの名無しさん:2011/11/17(木) 13:57:34.33
書くのが楽かどうかは趣味の問題だが、どうみてもハッシュをいったん
ばらして作り直す方が遅そうだぞ。




202 :デフォルトの名無しさん:2011/11/17(木) 14:02:36.01
>>200
ttp://d.hatena.ne.jp/perlcodesample/20090620/1246679588

203 :デフォルトの名無しさん:2011/11/17(木) 14:13:49.79
「アドレスが変わってしまう」わけではない。
$hoge = {...} は「新しいハッシュリファレンスを作って$hogeに代入」であって、
元の $hoge とは全く別の物を参照してるんだから違うアドレスになって当たり前。
「$hoge の参照先のハッシュに要素を追加する」んなら
%$hoge = (%$hoge, fuga => 'FUGA', piyo => 'PIYO');
とすればいい。

204 :デフォルトの名無しさん:2011/11/17(木) 21:22:00.11
あ〜んまで文字について順に処理する方法が知りたいです
例えばある文字列にあが含まれるかチェック
いが含まれるかチェック
うが含まれるかチェック
という感じです

205 :デフォルトの名無しさん:2011/11/17(木) 21:25:32.34
50個ぐらい手書きで問題ない

206 :デフォルトの名無しさん:2011/11/17(木) 22:42:31.73
あからんまで手書きで問題ない
'あ'..'ん'は動かんのかね

my @kana = qw /あ い う え お か き く け こ さ し す せ そ た ち つ て と な に ぬ ね の は ひ ふ へ ほ ま み む め も や ゆ よ わ を ん が/ ;
my $str = "月は東に日は西に僕は友達が少ない" ;

my %seen;
my @dup = (grep { $seen{$_} >= 2 } grep { ++$seen{$_} > 1 } (@kana, (split //,$str))) ;

print encode ("cp932", (join "",@dup)) ;

207 :デフォルトの名無しさん:2011/11/17(木) 22:58:37.03
% perl -CO -Mutf8 -e 'print chr for ord "ぁ" .. 3+ord "ん"'
ぁあぃいぅうぇえぉおかがきぎくぐけげこごさざしじすずせぜそぞただちぢっつづてでとどなにぬねのはばぱひびぴふぶぷへべぺほぼぽまみむめもゃやゅゆょよらりるれろゎわゐゑをんヴ??

208 :デフォルトの名無しさん:2011/11/17(木) 22:59:04.49
map { chr } ord('あ') .. ord('ん')

209 :デフォルトの名無しさん:2011/11/17(木) 23:50:21.67
whileはきらい

210 :デフォルトの名無しさん:2011/11/17(木) 23:53:46.60
orz(あ)

211 :デフォルトの名無しさん:2011/11/18(金) 00:06:31.13
一人のNewbieがGuruに問うた。
「whileにも再帰性があるのでしょうか?」
Guruは答えた。
「無」

Newbieはまた問うた。
「あらゆるものに再帰性はあるとされるのに、なぜwhileにはないのでしょうか?」
Guruはまた答えた。
「カウンタ、インクリメントなどの余分があるからだ」

Newbieは更に問うた。
「再帰性があるならなぜwhileはこの姿のままなのでしょうか?」
Guruは更に答えた。
「自他ともに再帰性があることを知りながら、無限を為すが故である」

212 :デフォルトの名無しさん:2011/11/18(金) 12:32:50.63
perlのインストール中にエラーが起きました。

wget http://www.perl.com/CPAN/src/perl-5.10.0.tar.gz
tar zxvf perl-5.10.0.tar.gz
cd perl-5.10.0
./configure.gnu prefix=/home/user/local
make
make test →ここでエラー

エラー内容はこれです。

lib/CGI/t/function............................................FAILED at test 14
lib/CGI/t/request.............................................FAILED at test 15

lib/CGI/t/function.tの14番目のテスト、requestの15番目のテストは下記のようになっています。

test(14,url() eq 'http://the.good.ship.lollypop.com:8080/cgi-bin/foo.cgi',"CGI::url()"); #function.t
test(15,$q->url eq 'http://the.good.ship.lollypop.com:8080/cgi-bin/foo.cgi',"CGI::url()"); #request.t

ここに書かれているURLはなんだろうと思ってブラウザでttp://the.good.ship.lollypop.com:8080/cgi-bin/foo.cgiに
アクセスしてみましたが、「正常に接続できませんでした」となります。
FAILEDの原因はこの接続できないことが原因なのでしょうか?

これらのFAILEDを回避する方法を教えてください。

※スレチガイならお手数ですが誘導お願いします。

213 :デフォルトの名無しさん:2011/11/18(金) 12:54:19.57
URL はアクセスするのに使ってるわけじゃないから関係ない
何が原因でテストがこけてるかは知らんが、
そもそもなんでわざわざソースからビルドするのに 5.10.0 なんて古いもん使うの?

214 :デフォルトの名無しさん:2011/11/18(金) 21:38:08.78
新しいかどうかよりも、
ちゃんとテストされた環境かどうかのほうが
重要だからだろ。

215 :デフォルトの名無しさん:2011/11/18(金) 21:45:48.43
インストールできなかったらちゃんとテストされてても意味がない件について

216 :デフォルトの名無しさん:2011/11/18(金) 21:51:02.68
逆に言えば、インストールできればちゃんとテストされていて意味がある。

だからインストールするんだろう?

217 :デフォルトの名無しさん:2011/11/18(金) 23:52:58.14
perlをインストールしようとしてて、いつの間にかCGI::url()のテスト
のエラー回避の質問になっている件

218 :デフォルトの名無しさん:2011/11/19(土) 13:10:04.73
え?

219 :デフォルトの名無しさん:2011/11/19(土) 13:35:46.21
つ SKIP

220 :デフォルトの名無しさん:2011/11/19(土) 15:19:40.24
え?

221 :デフォルトの名無しさん:2011/11/19(土) 17:24:20.72
>>198
以下のように時間を計測しながらsleepさせるとどうなりますかね?

my $sleep_time = 100;
my $end_time = time + $sleep_time;

sleep $end_time - time while $end_time > time;

222 :デフォルトの名無しさん:2011/11/19(土) 17:30:13.86
>>212
スキップして先に進め
test(14,1,"SKIP CGI::url()"); #function.t
test(15,1,"SKIP CGI::url()"); #request.t


223 :212:2011/11/22(火) 13:36:21.87
>>213-217

改版が終わった安定した偶数バージョンを使いたいと思い5.10に行きつきました。
しかしよく調べると、5.10.1がありましたのでこれを使用することににました。
コメントありがとうございました。

>>219,221
最初SKIPというコマンドがあるのかと思って調べていましたがみあたらず、221で1の所で
判定しているんだということがわかり、SKIP方法が理解できました。
ヒント&具体的な解説まであり助かりました。

遅くなりましたが、お礼&無事インストールできたことを報告しておきます。

224 :デフォルトの名無しさん:2011/11/22(火) 18:41:56.60
linuxにcpanで下記のようにHTML::Template::Proをインストールしました。

perl -MCPAN -e 'install HTML::Template::Pro'

インストールはできましたが、YAMLが無いというようなワーニングが出ました。
気になって下記を実行しましたが、以下のようなメッセージで落ちました。

perl -MCPAN -e 'install YAML'
Can't locate object method "install" via package "YAML" at -e line 1.

下記では、YAMLを読まない設定にした。とありました。

ttp://d.hatena.ne.jp/hsmnet/20110409/1302367029

YAMLを調べてみるとマニュアルあたりをさわるのに使うもののようですが、これは読まないようにして良いのでしょうか。

225 :sage:2011/11/23(水) 22:56:05.45

Perl で DOM Traverse というか、HTML Parse というか、、、
もっというと、
ようは、
$html = &innerHTML($document, "#THE_ID");
みたいなことがやりたいんですが、
何が一番いいでしょうか。

HTML::TreeBuilder/HTML::Parserなど、CPANで
いろいろ探したのですが、jQuery の便利さに慣れた身からすると、
「わざわざサーバのCGIまでつかってこの程度かよ」
というのしかないのですが、、、、。


226 :デフォルトの名無しさん:2011/11/23(水) 23:03:52.25
XML::DOM

227 :デフォルトの名無しさん:2011/11/23(水) 23:16:44.33
CSS Selector って言葉を知らんとみえる

228 :デフォルトの名無しさん:2011/11/23(水) 23:18:32.09
確かにjQueryは便利すぎるよな。

229 :sage:2011/11/24(木) 00:19:09.28
225です。
うーん、あまりいい解決策がないようですが、、、。

いま候補にあるのは、PHPをコマンドラインで使う、
というなにか違いすぎるやり方です。

どう考えても、それなら Perlだろ、
とおもいますが。

なにか、いい DOM/HTML Parser 教えてください!!!!!!。



230 :デフォルトの名無しさん:2011/11/24(木) 00:33:17.31
使った事はないがこういうものも既にある。
http://search.cpan.org/search?mode=all&query=pQuery

231 :デフォルトの名無しさん:2011/11/24(木) 02:02:09.29
単純なことならHTML::TokeParserがお手軽で好きかな

232 :デフォルトの名無しさん:2011/11/24(木) 14:36:26.49
サブルーチンを配列に格納したいです。
以下のようなので、barと表示して欲しいのですが、
CODE(0x1955b18)のような表示になります。
関数を配列に格納し、実行することは可能でしょうか?


@func;
push(@func, sub{return "bar";});
print $func[0];


233 :デフォルトの名無しさん:2011/11/24(木) 14:41:45.75
例えば

my @func;
push(@func, sub{return "bar";});
print &{$func[0]};

234 :デフォルトの名無しさん:2011/11/24(木) 14:42:15.73
print $func[0]->();
print $func[0]();
print &{$func[0]};

235 :デフォルトの名無しさん:2011/11/24(木) 14:48:08.38
>>233-234
ありがとうございます。

236 :sage:2011/11/24(木) 15:13:34.49
225です。

>>230 は結構よさげかも、、、。
でも、さがしたら 同名(実装はまったく別)のものがPHPにもあり、
さらに、検索するとそのほうが上に来る、というトホホぶり。

いわゆる「スクレイピング」の話しなわけですが、
なにかいい解決策ありませんか? > みなさま。



237 :デフォルトの名無しさん:2011/11/24(木) 15:58:17.30
scraper使う
xpath使える

238 :sage:2011/11/24(木) 16:45:25.42
225です。

Web::Scraper ・・・これはいい!!!いきなり決定打です。
作っている人も有名な人っぽいですし。

ちなみに、ほかの候補ももしあればぜひ。


239 :デフォルトの名無しさん:2011/11/24(木) 22:43:43.22
そんなことよりなんで名前欄もsageにしているのか気になる

240 :デフォルトの名無しさん:2011/11/25(金) 09:16:39.32
2ch初心者 && 「sageを入れる」ことは覚えている && sageをどっちに入れるか覚えていない

じゃね

241 :デフォルトの名無しさん:2011/11/25(金) 10:59:24.23
Web::Scraperできまりだな。

242 :デフォルトの名無しさん:2011/11/25(金) 13:46:26.11
フォームで入力したパスワードを暗号化して元に戻すサブルーチンってありますか?

暗号化しないで入力したパスワードをそのまんまhiddenで書き込むページまで持っていくのって
好ましくないんですか?

243 :sage:2011/11/25(金) 13:50:03.63
https://github.com/tokuhirom/Web-Query

こここ、、、これもいいかも、、、。

うーん、どうしよう。


244 :デフォルトの名無しさん:2011/11/25(金) 20:46:04.70
引数でアスタリスクを渡すにはどうしたらいいんでしょう?

hoge.pl *
とやったら $#ARGV != 0 になったようです。
(たぶん-1?)

hoge.pl \*
とやったら*を渡したことになりました。

しかしglobのワイルドカードの内容を指定
させたいので、いちいち\*とか利用者に
書かせるのはかっこ悪いですw



245 :デフォルトの名無しさん:2011/11/25(金) 20:49:23.52
>>244
シェルの勉強してこい、な

246 :デフォルトの名無しさん:2011/11/25(金) 21:37:41.34
>>244
hoge.pl "*"

247 :デフォルトの名無しさん:2011/11/25(金) 22:09:11.60
>>245
シェルはコマンドプロンプトです。

248 :デフォルトの名無しさん:2011/11/25(金) 22:21:51.38
はい

249 :デフォルトの名無しさん:2011/11/25(金) 23:24:38.63
オススメのIDE教えろ糞ども

250 :デフォルトの名無しさん:2011/11/25(金) 23:36:45.41
V・I・M!V・I・M!

251 :デフォルトの名無しさん:2011/11/25(金) 23:40:18.15
>>249
ttp://www.amazon.co.jp/dp/B004UQAAMS/

252 :デフォルトの名無しさん:2011/11/25(金) 23:46:27.60
Visual Studio

253 :デフォルトの名無しさん:2011/11/26(土) 02:01:06.15
イデ?

254 :デフォルトの名無しさん:2011/11/26(土) 21:56:33.75
CGIに値を渡したいときの方法で質問です。

@ttp://example.com/index.cgi/1/2/

と、$PATH_INFOで渡すのと

Attp://example.com/?a=1&b=2

と、.htaccessに「DirectoryIndex index.cgi」を書いてPOST風?(呼び方がわからない)で取得する方法があると思いますが、
みなさんどちらを使っていますか?
どちらを使おうか悩んでいます。
(最初、index.cgiを消して$PATH_INFOで渡せればすっきりするなと思いましたが、それだとttp://example.com/1/2/となって
index.cgiを読ませる場所と$PATH_INFOの切り分けができないと気づいて今に至っています)

個人の好みになるかもしれませんが、こっちをこんな理由で使っているという感想などいただけたら参考にしたいと思います。
ちなみにformタグではGETを使用しています。

255 :デフォルトの名無しさん:2011/11/26(土) 22:11:12.04
>>254
>>1の一行目を声を出して50回は復唱しろハゲ

256 :254:2011/11/26(土) 22:24:28.56
>>255

CGI専用スレがあったんですね。
そちらに行ってきます。
失礼しました。


257 :デフォルトの名無しさん:2011/11/27(日) 16:11:15.29
原書のプログラミングPerl 4版が12月に出た。
翻訳されるのは2年後?

258 :デフォルトの名無しさん:2011/11/27(日) 17:54:15.56
12月に出た、ってタイムトラベラー乙。まだ出てないよね?
http://shop.oreilly.com/product/9780596004927.do
cond 先生が第 3 版の訳をチョチョイと直してすぐ出版、
とはいかないか。

259 :デフォルトの名無しさん:2011/11/27(日) 22:59:59.42
Larryがこれまで篭もっていたのは日本語学習のためだとしたら、
日本語版も同時発売になるかも知れないよ。少なくともUnicode
については今までより学んでいると思う。たぶん。

260 :デフォルトの名無しさん:2011/11/28(月) 01:19:17.89
そいつはなんとも心強い。
自分がPerlの好きな日本人で良かった。

261 :デフォルトの名無しさん:2011/11/28(月) 01:43:14.48
そして裏切られるw

262 :デフォルトの名無しさん:2011/11/28(月) 12:15:15.23
久しぶりにactiveperlインストールしたら、絶対パスじゃないとファイルの読み書きが出来ない

open(FILE,'>C:\perl\test.dat');

はおkだけど

open(FILE,'>./test.dat');

はfalse

windows7なんですが相対パスでファイルにアクセスする方法ありますか?

263 :デフォルトの名無しさん:2011/11/28(月) 13:00:38.35
>>262
その場所にファイルを作る権限はあるの?

264 :デフォルトの名無しさん:2011/11/28(月) 13:14:49.07
>>263
Administratorでログオンしてるので問題ないと思ってましたがperlディレクトリに読み取り専用チェック入ってました。
チェック外しても次にプロパティ開くとまたチェック入ってる…orz
perlどうこうってよりwindows7の問題でしょうか
XPの時は相対パスで使えてたんですが

265 :デフォルトの名無しさん:2011/11/28(月) 14:18:50.09
しつもんです。

コマンドラインからCPANと打ち込み起動するプログラムと、
perl -MCPAN で起動するCPANモジュールのシェルって違いはなにかあるのでしょうか?

266 :デフォルトの名無しさん:2011/11/28(月) 14:40:22.18
>>262-264
絶対パスでファイル作成できてるんだったら権限関係なくね?

267 :デフォルトの名無しさん:2011/11/28(月) 17:03:01.15
>>265
内部実装を直接呼んでるか、
ツールとして整えられたコマンドを使うかの違い。
内部的には、cpanコマンドはCPAN.pmを呼んでる。

あと最近はcpanminusがナウい

268 :デフォルトの名無しさん:2011/11/28(月) 19:50:10.04
perlでは、空文字列が偽になるのはいいのですが、「"0"」も偽になるみたいで困ってます。
「"0"」は長さ1の文字列だから真になってほしいのです。
$s = "0";
print $s || "X"; # 0 が表示されてほしいのに X が表示される
これってどうすればいいんでしょうか。

269 :デフォルトの名無しさん:2011/11/28(月) 19:55:24.55
>>268
print ($a eq "" ? 'X' : $a);

270 :デフォルトの名無しさん:2011/11/28(月) 19:56:20.55
$sが必ず文字列なら
print $s ne "" ? $s : "X";
とか

271 :デフォルトの名無しさん:2011/11/28(月) 20:02:26.38
        undef  ""   0
defined $s  偽   真   真
$s ne ""   警告  偽   真
$s         偽   偽   偽

272 :デフォルトの名無しさん:2011/11/28(月) 21:48:44.48
>>268
length

273 :デフォルトの名無しさん:2011/11/28(月) 22:07:13.26
お前ら。

Perl歴1年の俺に、
|| の代わりに // を使えばいいって
教えられる気分どう?

274 :デフォルトの名無しさん:2011/11/28(月) 22:08:50.40
>>273
日本語でおk

275 :デフォルトの名無しさん:2011/11/28(月) 22:10:52.52
>>273
>>271

276 :デフォルトの名無しさん:2011/11/28(月) 22:11:46.40
>>262
今時openは3引数にしとけよ。

277 :デフォルトの名無しさん:2011/11/28(月) 22:12:12.29
昔のPerlで止まってしまって、
最近のモダンなPerlを知らないから、
// のことも知らないんだぜw
ちゃんと勉強しろ。

278 :デフォルトの名無しさん:2011/11/28(月) 22:13:33.33
>>273
へ〜、知らなかった〜って思って、

my $a = 2;
if ($a eq "1" // $a eq "2") {
  print "1か2だな";
}else {
  print "1でも2でもないな";
}

ってやったら、うまく動かないんですが釣りですかこの野郎

279 :デフォルトの名無しさん:2011/11/28(月) 22:13:51.56
undef と他の偽値とを区別する話なら// でいいけど(perl >= 5.10 という注釈つきで)、
そうじゃなくて空文字列と 0 を区別する話をしてるんじゃん

280 :デフォルトの名無しさん:2011/11/28(月) 22:14:26.63
>>278

>>268を読め

281 :デフォルトの名無しさん:2011/11/28(月) 22:14:50.13
// を覚えたてでうれしくて仕方ないんだろうな。
気持ちはわかる。

282 :デフォルトの名無しさん:2011/11/28(月) 22:19:24.89
>>273
0とか空文字扱いたい時に||じゃ困るってことだろ。

$v = 0;
$v //= 'default';
print "$v\n";
$v ||= 'default?';
print "$v\n";

283 :262:2011/11/28(月) 22:58:34.33
>>276
それこそモダンなperlを知らないのでお見苦しくてすみません。
open(FILE,'>','test.dat'); #こんな感じでしょうか

ググった末に警告レベル下げてUAC無効化しても相対パスだとファイル作成できませんでした。
でもその過程でコマンドプロンプトから実行する分には相対パスでも問題ないことが発覚。
CommandLineInterpreterの問題だろうとあれこれ試した結果、perl5.12.4.exeで開けば
大丈夫であることが分かりました。

よく分からないけど相対パス使えるようになったので良しとします。
スレ汚し失礼しました。

284 :デフォルトの名無しさん:2011/11/29(火) 11:47:40.16
>>267
レスありがとうございます。
気になっていたことがすっきりしました。

cpanminusは後ほど調べてみたいと思います。
ありがとうございました。

285 :デフォルトの名無しさん:2011/11/29(火) 13:20:28.86
>>283
> open(FILE,'>','test.dat'); #こんな感じでしょうか
openの構文、それぞれのパラメータの意味をきちんと調べたのか?

286 :262:2011/11/29(火) 13:49:43.06
>>285
open(ハンドル,ファイル); と認識してます。

287 :デフォルトの名無しさん:2011/11/29(火) 14:37:37.29
>>286
それじゃ引数は2個だろうが。
なんか…根本的に向いてないね。
知識ではなく、物の考え方がね。

288 :262:2011/11/29(火) 14:48:19.01
3つ目の引数が何を指定するものか、さらっと検索した限りでは分かりませんでした。
指定することがパスの指定方法に影響するのでしょうか?

win機で簡単なスクリプト組む分には古い知識と今の考え方で
不都合ないので失礼します。

289 :デフォルトの名無しさん:2011/11/29(火) 14:55:39.31
いやそんなの検索しなくてもマニュアルに書いてあるぞ…


290 :デフォルトの名無しさん:2011/11/29(火) 15:41:57.57
ほんと向いてないね。


291 :デフォルトの名無しさん:2011/11/29(火) 15:46:04.89
>>283で本人が終了させてんのに粘着する方もどうなんよ

292 :デフォルトの名無しさん:2011/11/29(火) 15:46:55.86
>>291
本人?w

293 :262:2011/11/29(火) 16:14:34.70
>>289
なんか荒れてるけどその話付き合った方がいい?

294 :デフォルトの名無しさん:2011/11/29(火) 16:59:10.40
本人キタ━(゚∀゚)━www

295 :デフォルトの名無しさん:2011/11/29(火) 17:00:09.85
>>293
偽者は却下

296 :デフォルトの名無しさん:2011/11/29(火) 21:07:44.70
Perl忍者が晒されてる
http://img.pics.livedoor.com/011/7/b/7b93db5444cf92f7cc91-LL.JPG
http://img.pics.livedoor.com/011/3/7/37af7e092c96cad7b14f-LL.JPG
http://img.pics.livedoor.com/012/5/1/51bc3004b6b4ec99063a-LL.JPG
http://img.pics.livedoor.com/012/a/6/a6cf04c9fe815ad28228-LL.JPG

297 :デフォルトの名無しさん:2011/11/29(火) 21:46:39.44
CPANモジュールガイドは良本

298 :デフォルトの名無しさん:2011/11/29(火) 23:35:04.96
左の白いのまじおもしろくねー ヘラヘラしてそう
ウケ狙ってる感ばりばり
Macつかっちゃって
目立ちたがり屋かな

このしのびの服装したやつは まともだね
マジっぽさが よくわかってる日本を

299 :デフォルトの名無しさん:2011/11/29(火) 23:40:49.69
この前身タイツのアホは「これで真珠だ!」とか思ってねーだろな?

300 :デフォルトの名無しさん:2011/11/30(水) 15:55:26.04
>>299
よう、びんぼっちゃま。

301 :デフォルトの名無しさん:2011/11/30(水) 21:49:15.38
CPANモジュールガイドは駄本

302 :デフォルトの名無しさん:2011/11/30(水) 22:23:05.11
駱駝本?

303 :デフォルトの名無しさん:2011/11/30(水) 22:43:11.64
>>301
あれ?まじで?
俺はいままでモジュールってほとんど使った事なかったけど、
この本見て、こんな便利なモジュールいっぱいあるのかーって関心したけど・・・

でも、便利なモジュール使いまくると、
もうPerlじゃないね、違う言語になる

304 :デフォルトの名無しさん:2011/11/30(水) 22:47:28.53
関心→感心

305 :デフォルトの名無しさん:2011/11/30(水) 22:52:09.62
>>303
同意ですです。
まあ、その人の習熟度に依るんだろうけど。

306 :デフォルトの名無しさん:2011/12/01(木) 16:56:08.77
正規表現の中に@を使ったらうまくいかなくて\@にしたら動いたけど、
@って何の意味だっけ?

307 :デフォルトの名無しさん:2011/12/01(木) 16:56:59.77
配列

308 :デフォルトの名無しさん:2011/12/01(木) 19:52:44.92
Perlは言語というよりCPANにアクセスするためのツールだと思ってる。

>>306
変数として展開されてしまうからな。
メアドの正規表現ならEmail::Valid使った方がいいかも。

309 :デフォルトの名無しさん:2011/12/01(木) 21:32:55.24
$が展開されるのは判るけど、@なんか展開したって添え字の数になるだけだろうに

310 :デフォルトの名無しさん:2011/12/01(木) 21:59:29.25
えっ?

311 :デフォルトの名無しさん:2011/12/01(木) 22:34:01.90
>>303
よくよく読んでみたか?

312 :デフォルトの名無しさん:2011/12/01(木) 22:43:21.93
>>308
俺は多機能テキストフィルタとして使うかな

313 :デフォルトの名無しさん:2011/12/01(木) 22:47:31.11
>>311
まだ1/3くらい
実際に試しながら読んでるし・・・
何?後半で恐ろしい雑な説明になってるとか、
突然フォントのサイズが巨大になって内容が薄くなってるとか?

314 :デフォルトの名無しさん:2011/12/01(木) 22:49:35.70
>>313
著者:あかほりさとる とかかよw

315 :デフォルトの名無しさん:2011/12/01(木) 22:51:26.19
でも実際、教科書類の余白性は重要だ

316 :デフォルトの名無しさん:2011/12/02(金) 13:09:41.94
文字列が全て全角カタカナだったらヒットさせる場合は下記でできたのですが、

$word =~ /^(?:\xE3\x82[\xA1-\xBF]|\xE3\x83[\x80-\xB6])+$/;

それプラス、「ー」にもヒットさせたいと考えていますが、下記ではうまくいきません。
どのようにしたら良いでしょうか。

$word =~ /^(?:\xE3\x82[\xA1-\xBF]|\xE3\x83[\x80-\xB6\xBC])+$/;

317 :デフォルトの名無しさん:2011/12/02(金) 13:26:30.40
(A|B|C)

318 :316:2011/12/02(金) 14:26:41.44

すみません。
文字コードはutf8です。


319 :デフォルトの名無しさん:2011/12/02(金) 14:59:25.21
てst

320 :デフォルトの名無しさん:2011/12/02(金) 15:05:56.27
(A|B)
(A|B|C)
タイ━━━━||Φ|(|´|Д|`|)|Φ||━━━━ホ!!!

321 :日系アメリカ人 ◆japYJPNx6A :2011/12/02(金) 17:14:12.94
ゲーム開発者>>>>Perlエンジニア

 すべてにおいてカス
音楽+絵+プログラミング+ネットワーク

束ねるゲーム開発者は最強(日本を除く)

322 :デフォルトの名無しさん:2011/12/02(金) 17:26:28.19
>>321
F1レーサー>>>>車の整備士

と、言われてるくらい違和感ある
比べる物が違うだろ・・・
どうせ釣り針垂らすなら・・・

Rubyエンジニア(モダン)>>>>Perlエンジニア(老害)

これくらい大きくないと

323 :デフォルトの名無しさん:2011/12/02(金) 17:28:11.00
>>322
別所でも暴れてる真性だから触るな

324 :デフォルトの名無しさん:2011/12/02(金) 17:32:30.86
Rubyそのものは別に悪いとは思わんが、
Ruby厨が大抵目つきが逝ってるのは何故だろう?

325 :316:2011/12/02(金) 17:53:00.83
>>317,320
解決しました。
ありがとうございました。

326 :日系アメリカ人 ◆japYJPNx6A :2011/12/02(金) 21:03:43.76
Matzって朝鮮とか韓国人みたいな顔してるよな
アジア顔だな エキゾチック

平面七三分け

327 :デフォルトの名無しさん:2011/12/02(金) 22:18:51.65
>>326
モルモン教disってるのか?


328 :デフォルトの名無しさん:2011/12/03(土) 19:23:10.32
痛々しいコテハンと、輪をかけて痛々しい中途半端さな鳥。
でもその鳥のおかげであぼーん設定が楽でよろしい。GJ!!

329 :デフォルトの名無しさん:2011/12/03(土) 19:41:17.57
jap YahooJPN

330 :デフォルトの名無しさん:2011/12/03(土) 19:53:19.72
>>328
そういうのについていちいち言及するのをやめるか、せめて対象にアンカー付けてくんない?
NGに一度指定したものは二度と意識しなくて済むようにって連鎖透明あぼーん設定してんだから。

331 :日系アメリカ人 ◆japuuq4c3Y :2011/12/03(土) 21:46:16.68
物凄い悔しいご反応ですね

332 :デフォルトの名無しさん:2011/12/04(日) 00:08:21.99
>>330
了解した。

333 :デフォルトの名無しさん:2011/12/04(日) 02:26:52.83
クソワラタw

334 :デフォルトの名無しさん:2011/12/04(日) 02:27:09.00
ごめん誤爆

335 :デフォルトの名無しさん:2011/12/04(日) 10:32:02.70
perl で2ちゃんに書き込むプログラムソースなんかは割りと見かけるけど
p2 通して書き込むプログラムってのは無いの?

336 :日系アメリカ人 ◆japYJPNx6A :2011/12/04(日) 10:44:10.25
自分で作れよカス
俺の身内はLarryWallだぞ

337 :デフォルトの名無しさん:2011/12/04(日) 10:45:38.10
在日うぜーよw

338 :日系アメリカ人 ◆japYJPNx6A :2011/12/04(日) 11:05:32.76
hibari.2ch.net/test/read.cgi/gamedev/1322167021/
ここきて
こいつらがウザい

339 :デフォルトの名無しさん:2011/12/04(日) 22:51:18.07
なんだかんだ言っても文字列の処理はPerlが一番楽だったんだけど
use utf8すると途端に面倒臭くなる…。
ほんとにみんな使ってるの?

340 :Perl忍者 ◆M5ZWRnXOj6 :2011/12/04(日) 23:06:34.46
久しぶりだな皆。
トリップの流出で、偽者が暴れまわってるみたいだが気にしないでくれ。
そうだ、めでたい話があるんだが、俺は今年の夏ごろ、livedoorに入社してな。
WEBの企画に携わってて来れなかった。
本名は伏せておくけど、Perlのことなら聞いてくれ。
ある程度実力ついたんで答えられると思うけど。

341 :Perl忍者 ◆M5ZWRnXOj6 :2011/12/04(日) 23:07:52.71
2週間ごとに1回、出社する程度だよ。
自宅で仕事。

342 :デフォルトの名無しさん:2011/12/04(日) 23:12:27.12
use utf8は仕方なく使ってるなあ。他にいい方法がないもんで。

343 :デフォルトの名無しさん:2011/12/04(日) 23:24:41.65
またPerl忍者の偽者か?
バカだからlivedoorなんて入社できるわけないだろ。

344 :デフォルトの名無しさん:2011/12/04(日) 23:28:18.68
もし本当に入社してたなら、お前こんなトコで明かしたら首切られるぞw

345 :デフォルトの名無しさん:2011/12/04(日) 23:58:54.66
utf8は使いにくいんで使っていない。

346 :デフォルトの名無しさん:2011/12/05(月) 00:19:34.35
やっぱりそうだよなぁ。
モダンPerlはuse utf8が必須とか書いてたからびびったわw
元からこんな面倒臭い言語だったなら絶対すぐ投げ捨ててるし。

347 :デフォルトの名無しさん:2011/12/05(月) 01:13:13.65
マルチバイト文字のことがよく分からないまま、思いつきで
実装してしまったのです。まさかこんなに使いづらいものに
なるとは予想できなかったのです。

348 :デフォルトの名無しさん:2011/12/05(月) 03:47:58.75
Perlのマルチバイト文字処理はまあまあうまく折り合いつけてる方だと思うよ。
もともとマルチバイト文字列自体が厄介な性質を持つ代物なんだからある程度は仕方ない。

思いつきだったらPHPの方がよっぽど全般にわたって思いつきの実装だらけだし。
まあ次元の違うものを比べてもなんだけど。

349 :335:2011/12/05(月) 05:01:03.99
perl 初心者が適当にやってみたけど、できない

・・・

my $ua = LWP::UserAgent->new(
agent => "Monazilla/1.00 hoshu-bot.pl/$VERSION",
cookie_jar => {},
);

sub sjis { encode('cp932', $_[0]) }

my $name = '';
my $mail = 'sage';
my $message = 'test';

my $res = $ua->post("http://$host/test/bbs.cgi",
[ bbs => $board_key, key => $thread_key,
FROM => sjis($name), mail => sjis($mail), MESSAGE => sjis($message),
submit => sjis('書き込む'), time => 1, hana => 'mogera' ],
Referer => "http://$host/$board_key/");

・・・

この部分をどう変えたらいいんだろう
風も拗らせたししんどい

350 :デフォルトの名無しさん:2011/12/05(月) 09:51:58.66
>>339>>342
kwsk
今もソースコードをEUC-JPやらSJISで書き起こしてるの?

351 :デフォルトの名無しさん:2011/12/05(月) 10:11:48.59
文字コードが何でこんなめんどくさいんですか?
あほくさいですね

よく使えますね
タイムイーター言語ですよPerlは

352 :デフォルトの名無しさん:2011/12/05(月) 10:15:35.16
元々向いてないこと無理やりさせてるんだから我慢しろって誰かが言ってた

353 :デフォルトの名無しさん:2011/12/05(月) 10:21:36.47
ヒゲだろどうせ

354 :デフォルトの名無しさん:2011/12/05(月) 10:59:33.20
use Sample;
Sample->new('$file_name');

上記のようなモジュールを作っています。
これを引数も入れてクラス継承?(下記)で書くにはどのようにすればよいのでしょうか?

use base qw/Sample/;

私が知っている知識だけで書くと、Sampleモジュールにsetサブルーチンを書いて
セットする方法くらいしか思いつきませんが、ダサすぎます。
ちゃんと引数を渡せる書き方があるのではないかと思っているのですが。

use base qw/Sample/;
$sample = set('$file_name'); #1アクション増えてダサい

355 :デフォルトの名無しさん:2011/12/05(月) 11:31:51.85
つまりコンストラクタのオーバーロードしたいの?
それともそれとは別?

356 :デフォルトの名無しさん:2011/12/05(月) 11:53:01.81
>>351
文字コードがめんどくさくない言語処理系があるの?
あるなら教えて。後学のために是非。

そういえばjperlでShift JISのみを扱っていた時代は考えることが少なくて多少はラクだったかな。
でもいまどき文字コード変換は避けて通れないからねえ。Shift JIS決め打ちでは済まないわな。


357 :日系アメリカ人 ◆japYJPNx6A :2011/12/05(月) 12:08:54.60
じゃっぷは文字コードもハンディ 英語もハンディ
かわいそうだね

358 :354:2011/12/05(月) 13:38:56.98
>>355

それで合っています。
よろしくお願いします。

359 :デフォルトの名無しさん:2011/12/05(月) 17:21:27.37
正規表現に関して質問です。
量指定子を付けるのに、対象を()で囲んでいるのですが、
$1に入れたり戻り値に含めたくない場合はどうすればいいのでしょう?

sにgオプションを付けて置換した対象のリストを得たいのです。
置換後の文字列に元の文字列がそのまま含まれているので、g外してwhileに入れると無限ループになります。

360 :354:2011/12/05(月) 17:50:29.25
>>355,358

調べていたらどうも違うようです。
一度取り消して再度質問しなおします。

361 :354:2011/12/05(月) 18:03:55.55
#########################################
#[1]色々なプログラムで使いまわせるものとして管理
package HOGE;

sub new{
my $class = shift;
my $path_home = [ split '/',$ENV{HOME} ]; #[A]
my $hash= {
path_home => $path_home,
};
bless $hash,$class;
}

sub path_home{
my $class = shift;
return( $class->{path_home} ); #[B]
}

続きます↓

362 :354:2011/12/05(月) 18:05:09.09
#########################################
#[2]用途別に使えるものとして管理
package HOGE::FUGA;
use base qw( HOGE );

sub new{
my $class = shift;
$path_temp = '../../tmp/';
my $hash= {
path_temp => $path_temp,
};
bless $hash,$class;
}

sub path_temp{
my $class = shift;
return( $class->{path_temp} );
}

続きます↓

363 :354:2011/12/05(月) 18:06:39.57
上の続き↓

#########################################
#[3]
use HOGE::FUGA;
my $hogefuga = HOGE::FUGA->new();
printf "HOME : %s\n", $hogefuga->path_home();

#########################################
上記のように「値やサブルーチン」を共通で使い回しできるモジュール[1]と、
部分的に使えるモジュール[2]を作成&管理し、それぞれのハッシュリファレンスを
[3]で使いたいのですが、その場合のスマートな実装方法はどのようなものが
ありますでしょうか?
※これはサンプルですので、直接[A]を[B]に入れたらいいというのは無しでお願いします。
※この方法は素人の思いつきなので、他にスマートな方法があればそれを教えてください。

ここまで

364 :デフォルトの名無しさん:2011/12/05(月) 19:57:28.22
>>350
うん。
Webアプリとか書いてる人ならともかく
俺はシェルスクリプト的な使い方しかしてないし
システムの文字コードで書いておけば十分事足りる。
use utf8すればダメ文字の入ったファイルパスも直接指定できるのかと思ったら
ダメなままだし,俺にとっては利用価値を見いだせなかった。

365 :デフォルトの名無しさん:2011/12/05(月) 21:50:18.68
利用価値を見出したから
Perl使ったんじゃないのか?w

シェルスクリプトで全部やればいいと思うんだが。

366 :デフォルトの名無しさん:2011/12/05(月) 21:59:36.69
>>365
既存のプログラムを順番に実行する+αくらいならともかく、
それ以上のことをするならPerlで書くかなあ。

367 :デフォルトの名無しさん:2011/12/05(月) 22:10:29.67
1レスで理解できるutf8フラグ

utf8フラグとい名前がまずかったね。
文字列フラグなどという名前だったらよかった。

文字列フラグはPerl固有のものだから
Perlコード外部から渡されるのは文字列ではない。
文字列でなかったらなにか?それはバイナリ。

バイナリを文字として扱いたければ、文字に変換しないといけない。
それがdecode。

ではソースコードに書いてあるのは、文字かバイナリか。
それはuse utf8を使えば文字で、そうでない場合はバイナリ。

話はこれだけ。

368 :デフォルトの名無しさん:2011/12/05(月) 22:16:43.71
文字列フラグというければ、どうして文字列なのにフラグが立つ
ときと立たないときとがあるの?フラグが立っているかどうかと
文字列なのかどうかは一致しないと思うければ。

369 :デフォルトの名無しさん:2011/12/05(月) 22:18:19.92
>>364
ダメ文字と言っているからActivePerlの事だと思うけど
それはPerlの問題じゃなくてAPIの呼び出しにA系を使っているのが原因
W系を使って呼び出せば問題ない

370 :デフォルトの名無しさん:2011/12/05(月) 22:23:25.19
>>368
あなたの文字列の定義とは?

人間が文字と思っているから文字なんだ。ではだめ。
そんな曖昧な定義はコンピュータは理解出来ない。

371 :デフォルトの名無しさん:2011/12/05(月) 22:23:26.55
んなこたあない。

372 :デフォルトの名無しさん:2011/12/05(月) 22:26:02.46
こまけぇこたぁいいんだよ!!

373 :デフォルトの名無しさん:2011/12/05(月) 22:47:42.46
質問しておいて回答を制限するという..ナイスw

374 :デフォルトの名無しさん:2011/12/05(月) 23:01:56.04
>>365
Perlの利用価値はずっと前から見いだしてるから使ってるけど
use utf8の利用価値は見いだせなかったということねw

>>369
うんうん。
use utf8はAPIもW系に切り替えてくれる万能薬なのかと想像してたら
全然違ったという;;
W系を呼び出せば問題ないってのは呼び出す方法があるの?
ダメ文字入ったファイル名の件はすっかり諦めてて
普段はワイルドカードで切り抜けてるけど
W系を呼び出す方法があるなら知りたい!

375 :デフォルトの名無しさん:2011/12/05(月) 23:14:22.19
W系 A系ってなに?

376 :デフォルトの名無しさん:2011/12/05(月) 23:16:05.10
ワロス系とアフォ系の略です

377 :デフォルトの名無しさん:2011/12/05(月) 23:20:25.06
俺もActivePerlのutf8プラグマはcp932とUTF-8間の融通をきかせてくれるものと
当然のように思ってたら何もなかったのでブチキレた
二度とuse utf8は使わないと心に誓った

378 :デフォルトの名無しさん:2011/12/05(月) 23:25:44.00
つまりuse utf8がどういう効果があるか
知らないわけね。

ドキュメントちゃんと読んだ?

379 :デフォルトの名無しさん:2011/12/05(月) 23:26:39.02
読んでないからわからないんだろw

読んでいたらuse utf8を何もかも解決してくれる
万能なおまじないだとか勘違いするわけがない。

380 :デフォルトの名無しさん:2011/12/05(月) 23:28:44.68
>>374 >>377
use utf8がどんな機能を持っているのか
ドキュメント読んで、ここに書いてみ。

単純にお前らが、ドキュメント読んでないだけってのが
よくわかるからさ。

381 :日系アメリカ人 ◆japYJPNx6A :2011/12/05(月) 23:43:36.07
なんか凄い文字コード覚えた手のバカが必死だね
なんだろうこの感じ

アホくさい知ったか君

ばかばかしいね見てて
自分もPerlやってるけど

ここまで354さんの質問無視して
エンコード語りしてるやつ気持ち悪いね

覚えた手かな

382 :日系アメリカ人 ◆japYJPNx6A :2011/12/05(月) 23:44:20.72
ここは

君の

うんちく

話す場所じゃないから

帰れ

383 :デフォルトの名無しさん:2011/12/05(月) 23:46:14.78
男ってどうして無駄に自分が上だと張り合うのかね

384 :デフォルトの名無しさん:2011/12/05(月) 23:58:05.48
全角w

385 :デフォルトの名無しさん:2011/12/06(火) 00:03:56.60
>>379
まぁ人それぞれだと思うけど,俺はとりあえず先に手を動かしてみるたちなんで。
だいたいのものは予想してた通りに動いてくれるし
あれ想像してたのと違うぞ?となったらそこで詳しく調べればいい。
「Unicodeで書くことを宣言してるんだから当然APIもUnicode版を呼び出してくれるんだろう…」
と事前に予想するのはごく自然なことだと思うけどなぁ。

>>380
面倒臭そうな奴だなぁ。
キミはこんなとこで粋がることに何かしらの価値を見いだしてるのかw

386 :日系アメリカ人 ◆japYJPNx6A :2011/12/06(火) 00:04:38.65
君は
テストステロン
って知ってるかね?

>>筋力トレーニングや不安定な興奮(例えば闘争や浮気など)によってテストステロンの分泌が促される。
男はテストステロンの量が多いんだよ

ね?

だったらわかるでしょ?
男は

勝ち負けこだわる  それが本来人間の男の姿

君はもやしだから わからないだろうけど

387 :日系アメリカ人 ◆japYJPNx6A :2011/12/06(火) 00:06:35.37
様々な神経伝達物質とホルモンが攻撃行動と相関することが示されている。もっともよく言及されるのがテストステロンである。ある研究はテストステロン濃度と攻撃的な反応が明確に関連していると指摘した。

388 :デフォルトの名無しさん:2011/12/06(火) 00:12:43.09
>>385
☓自然
◯願望

〜できるって勝手に(先に手を動かすw)思い込んどいて、自然だと思うけどなぁだってさw

389 :デフォルトの名無しさん:2011/12/06(火) 00:19:35.80
>>385
> 「Unicodeで書くことを宣言してるんだから当然APIもUnicode版を呼び出してくれるんだろう…」
> と事前に予想するのはごく自然なことだと思うけどなぁ。

で予想が外れてマニュアルも見ずに
ワーワー騒いでいるわけ?

いいからマニュアル読んでこい。



390 :デフォルトの名無しさん:2011/12/06(火) 00:24:00.01
> 「Unicodeで書くことを宣言してるんだから

そんな宣言をお前はしてない。

お前が宣言したのは、ソースコードのリテラル文字列に
UTF8フラグを立てると宣言しただけだ。


初心者脱出したと思ってる初心者にありがちだ。
マニュアルを読まずにかってに思い込む奴。

馬鹿だお前は。

391 :日系アメリカ人 ◆japYJPNx6A :2011/12/06(火) 00:24:49.64
W系 A系ってなに?
教えてください

もやっとしてます

392 :日系アメリカ人 ◆japYJPNx6A :2011/12/06(火) 00:25:25.67
後10分後に寝るので教えてください

どうか

教えて
ください

W系 A系

夜が眠れません

393 :Perl忍者 ◆M5ZWRnXOj6 :2011/12/06(火) 00:31:49.23
がんばれクソコテ

394 :デフォルトの名無しさん:2011/12/06(火) 00:35:06.00
自問自答乙

395 :デフォルトの名無しさん:2011/12/06(火) 00:39:23.43
>>370
かなが50字だとすると、俳句は五、七、五で文字の並びは 50**(5+7+5) の
組合せがある。これはちゃんと上限があって、(数学的に)数え上げることが
できる。ただし、かなりの割合で意味をもたない文字の並びになっている。
意味をもつ並びは少ないと予想できる。

それでは、一体、いくつの並びが意味をもつと言えるのか?

デジタルデータは全て、広義のバイナリデータだといえる。その中にはテキス
トデータを意図するものを含んでいるだろうし、あるいは意図はせずともテキ
ストデータのように見えるものがあるかもしれない。

広義のバイナリデータのうち、テキストデータを含めないものを狭義のバイナリ
データとすると、狭義のバイナリデータとテキストデータの違いは何なのだろ
うか?

その違いは数学的に定義できるのだろうか?おそらくできないと思う。

396 :デフォルトの名無しさん:2011/12/06(火) 00:41:21.71
で、お前にとっての文字列の定義は?

質問の答えはまだかい?

397 :デフォルトの名無しさん:2011/12/06(火) 00:49:20.56
人間が文字と思っているから文字なんだ。
つまり、コンピュータは(その定義を)理解出来ない。

398 :デフォルトの名無しさん:2011/12/06(火) 00:53:43.69
>>388
何がキミの琴線に触れたのか知らんがとりあえずもちつけ。

>>389
最初に予想が外れてることに気づいた時点で目を通したよ。
そしてがっかりしたわけだ。

>>390
コードの中のすべてのリテラル文字にフラグを立てるなら
それはコードそのものがutf8で書かれているのと同義と見ていいだろう。
実際utf8でコードを書くときしかuse utf8は推奨されてないのだから。
(ASCII文字だけが並んだリテラルにはフラグ立ちませんからw みたいなツッコミはやめてね。)

>>391
WindowsのAPIの話だよ。
同じAPIでも末尾がAのとWのとあるでしょ。

399 :デフォルトの名無しさん:2011/12/06(火) 00:59:40.03
つまり俺が言いたいのは use utf8; 以前に -T と -B はうそっぱちだ
ということだ。

400 :デフォルトの名無しさん:2011/12/06(火) 01:01:24.70
やーい、やーい、うそっぱち、うそっぱちぃ〜

401 :デフォルトの名無しさん:2011/12/06(火) 01:14:09.08
>>359
(?: )ってことかな?
それと、やりたいことって、文字列の削りだしなんかな。

402 :デフォルトの名無しさん:2011/12/06(火) 01:32:22.60
>>354 の質問がよくわからん、、、、
両方のハッシュリファレンスを得たいって、path_homeとpath_tmpを別個に呼び出せばいいのではとも思うし、でもそれは望んでる答えではないだろうし、

前の質問の、引数を渡したいって動機もよくわからない。
package Sample2;
use base Sample;

Sample2->new("$file_name")

っというのだとダメ?


403 :デフォルトの名無しさん:2011/12/06(火) 09:02:58.85
>>374
完全じゃないけど Win32::Unicode とか
俺は WIN32::API を使って自分で書いているけど

404 :デフォルトの名無しさん:2011/12/06(火) 09:07:51.20
>>401
記号を検索する方法が分からないのですが、条件演算子としての三項演算子です?

削り出しと置換を同時に行えないかなと思いまして。
その対象の中に、()付きの量指定子が含まれるのです。

s/((文字列)量指定子 文字列)/文字列$1文字列/g;こんな感じの時に、外側の()でマッチした一覧だけを取り出したい場合はどうすればいいのでしょう。

405 :デフォルトの名無しさん:2011/12/06(火) 09:53:31.73
>>361-363 親クラスのプロパティは以下で取ってこられるけど、なんか変な感じ?

my $hash= {
%{$class->SUPER::new},
path_temp => $path_temp,
};

>>354の引数を渡したいというのはこういうことでしょうか?

package HOGE;

sub new{
my $class = shift;
my $path_home = [ split '/',$ENV{HOME} ]; #[A]
my $hash= {
path_home => $path_home,
@_,
};
bless $hash,$class;
}

package HOGE::FUGA;
use base qw( HOGE );

sub new{
my $class = shift;
$path_temp = '../../tmp/';
my $hash= {
path_temp => $path_temp,
};
$class->SUPER::new(%$hash);
}

406 :354:2011/12/06(火) 14:28:58.62
>>402,405

分かりずらい説明に反応くださりありがとうございます。
405のコードと下記URLを調べながら、SUPERを何とか理解し解決できました。

ttp://d.hatena.ne.jp/nana21/20050628/p1
ttp://cast-a-spell.at.webry.info/200708/article_18.html

以上、ご報告でした。
ありがとうございます。

407 :デフォルトの名無しさん:2011/12/06(火) 14:43:06.36
>>354です。
別の問題が出てきました。
下記を実行すると@の箇所で以下のようなエラーが出ました。

Unknown encoding 'HOGE::FUGA=HASH(0x92ffb50)' at xxx.pm line ***

use base qw( Encode );をしているのでメインまでencodeが継承されるという認識なのですが、
認識間違いなのでしょうか?
HOGEパッケージのuse base qw( Encode );をメインで使うにはどのようにすればよいのでしょうか?
########################################
#メイン
use HOGE::FUGA;
my $hogehuga = HOGE::FUGA->new();
my $nihongo_utf8 = $hogefuga->encode('utf8','あああ'); #@
########################################
package HOGE;
use base qw( Encode );
sub new{
my ( $object, @args ) = @_;
my $hash ={hoge => 'HOGEHOGE'};
bless $hash,$object;
}
########################################
package HOGE::FUGA;
use base qw( HOGE );
sub new{
my ( $object, @args ) = @_;
my $class = $object->SUPER::new( @args );
$class->{fuga} = 'FUGAFUGA';
return($class);
}

408 :デフォルトの名無しさん:2011/12/06(火) 14:47:24.62
>>404
perlre

409 :デフォルトの名無しさん:2011/12/06(火) 15:39:36.14
Perl初心者です。マイナスの値をpack関数にてビックエンディアンに変換してから、unpack関数にて再度変換すると符号無しで変換されます。これは仕様でしょうか?

410 :デフォルトの名無しさん:2011/12/06(火) 15:51:56.98
わからんが仕様だな。

バイト順修飾子について調べるといいぞ。

ttp://perldoc.jp/docs/perl/5.10.0/perlpacktut.pod#Byte-order32modifiers


411 :デフォルトの名無しさん:2011/12/06(火) 15:52:27.39
>>409
ttp://perldoc.jp/docs/perl/5.10.0/perlpacktut.pod#Byte-order32modifiers
unpack("i>", ...) てのがある。自分も今知ったw

412 :デフォルトの名無しさん:2011/12/06(火) 15:53:01.74
>>408
把握
ありがとうございます

413 :デフォルトの名無しさん:2011/12/06(火) 15:54:33.57
ごめんかぶった
>>411は無視で

414 :デフォルトの名無しさん:2011/12/06(火) 16:09:39.07
>>410,411
そんなのあったっけと思ったら5.9.2からか。

perl勉強したのだいぶ前だからなぁ。たまにはリフレッシュしないと
だめだな。


415 :デフォルトの名無しさん:2011/12/06(火) 16:25:43.45
>>410、411
レスありがとうございます。確認してみます。

416 :デフォルトの名無しさん:2011/12/06(火) 16:26:41.05
あれ、そもそも置換すると、複数キャプチャできないのですか?

my @cap = $txt =~ s/(〜)/〜/g;
で、置換回数しか受け取れないみたいです。
置換無しならうまくいくのですが。

417 :デフォルトの名無しさん:2011/12/06(火) 16:48:18.61
>>416
perlre

418 :デフォルトの名無しさん:2011/12/06(火) 21:01:13.39
何がやりたいのかさっぱりわからん……

419 :デフォルトの名無しさん:2011/12/06(火) 22:45:37.74
置換もしながらキャプチャもしたいという欲張りさんなのかな。
e使って適当に保存するコード書けばいいんじゃね?

s/(〜)/push @cap, $1; 〜/ge



420 :407:2011/12/06(火) 22:50:06.45
>>416
複数改行でのマッチ?とエスパーしてみた。

$txt =~ s/\A(〜)\z/〜/xmsg;

誰か >>407 わかる方いませんか?

421 :デフォルトの名無しさん:2011/12/06(火) 23:06:50.64
>>407
Encode::encode はオブジェクトのメソッドとして呼び出すようにできてないから。

422 :デフォルトの名無しさん:2011/12/07(水) 03:45:17.74
>>404
(?: hoge)はグループ化するだけで、後方参照用に記憶させない

423 :デフォルトの名無しさん:2011/12/07(水) 08:58:46.12
>>419
その通りです、ありがとうございます。
perlreではやり方が見あたらなかったので助かりました。

424 :デフォルトの名無しさん:2011/12/07(水) 12:43:07.90
>>407
$hogefuga->encode('utf8','あああ')は、実際はencode($hogefuga,'utf8','あああ')のように
第1引数にオブジェクトを入れて呼ばれます。

>>421が言うように、encodeは第1引数に文字コードを想定しているので、そこにオブジェクトが
来ると>>407のようなエラーになります。

以下のようにすれば望みの結果になるかもしれませんが、このような使い方を私は見たことはないです。

my $nihongo_utf8 = $hogefuga->can("encode")->('utf8','あああ'); #@

Encodeを継承する一般的な方法(Encodeを継承していいのかも含めて)を知りませんが、以下のように
encode/decodeのラッパー関数を作って、@と同じことをすれば望みの機能が達成できるかもしれません。

package HOGE;
use base qw( Encode );
sub new{
my ( $object, @args ) = @_;
my $hash ={hoge => 'HOGEHOGE'};
bless $hash,$object;
}

for my $func ( qw(encode decode) ) {
no strict "refs";
*$func = sub { goto shift->can("SUPER::$func") };
}

425 :デフォルトの名無しさん:2011/12/08(木) 04:12:23.33
0001001100
0010000001
0000000000
0000000001001
という行単位の出力があるのですが、ここから
0001001100 ====> 4,7,8
0010000001 ====> 3,10
0000000000 ====> 0
0000000001001 => 10,13
というように1のある位置を出力させたいのですが、ワンライナーでできるでしょうか?
1が無い場合は0を出力します。
4,7,8
3,10
0
10,13
こんな感じでもとの行はなくてかまいません。1が1個だけだとIndexでできるんですが、
複数になるとどうすればいいですか


426 :デフォルトの名無しさん:2011/12/08(木) 04:53:08.27
$ perl -lpe 'my@a;push@a,pos while/1/g;$_=join(",",@a)||0'
とか

427 :デフォルトの名無しさん:2011/12/08(木) 06:03:09.60
Net::Google::Calendarを使って
ttp://shokai.org/blog/archives/1280にある
googleカレンダーの予定を取得するプログラムを実行したいのですが
実行しても
403 Forbidden at /usr/local/share/perl/5.10.1/Net/Google/Calendar.pm line 619.
エラーが出て予定を取得できません.パケットが流れているのでうまくSSL通信できていないのだろうと思うのですが
原因としてどういったものが考えられるでしょうか?

428 :デフォルトの名無しさん:2011/12/08(木) 06:40:54.49
試してないけど、loginではなくauthかoauthで認証しないとダメなんじゃないかな
取ってくるだけなら限定公開URLを使えばloginせずに取れる

429 :407:2011/12/08(木) 15:43:33.52
>>421,424

やっと理由が分かりました。
$hogefuga->encode()で呼び出すということは、第一要素にオブジェクトが入りますね。
encode()で呼ぶ場合はそれが無い。
スコーンと忘れてました。
たまに自分で作ったパッケージでも同じとこで間違えることがあります。

詳しい説明のおかげで理解することができました。
遅くなりましたが、お礼を申し上げます。
ありがとうございました。

430 :デフォルトの名無しさん:2011/12/08(木) 16:31:16.33
〜色々略〜
$dat = kakou($dat, $in);
sub kakou{
my $dat = shift;
my $in = shift;
〜$inを使って$datを加工する。$inが空なら何もしない〜
return $dat;
}

$datが巨大な場合、$inが空かどうかの判定は&kakouを呼ぶ前に毎回行った方が良いのでしょうか?
こういった場合はどういう書き方が最適なのでしょう?

431 :デフォルトの名無しさん:2011/12/08(木) 16:57:27.74
>>430
>&kakouを呼ぶ前に毎回行った方が良い
そりゃ、サブプロ行く前に判断した方が早い。
他にはリファレンスを渡す。

432 :デフォルトの名無しさん:2011/12/08(木) 17:07:50.26
>>431
ありがとうございます。
Perl側で何か上手くやってくれてるのならこの書き方でも問題ないかと思ったんですが、毎回まじめにメモリ確保して代入処理してくれてるってことでしょうか?

ところで、リファレンス渡しの場合は、明示的にリファレンスを渡すのと、$_[0]を直接編集するのではどちらの書き方が一般的なんでしょうか?

433 :デフォルトの名無しさん:2011/12/08(木) 18:20:21.65
@_ の要素は実引数のコピーではなくエイリアスだから、文字列渡しでも my $dat = shift; とかするまではコピーは発生しないよ。
つっても>>430じゃサブルーチンの戻り値がその文字列だから結局コピーは不可避だけど。

処理するしないにかかわらずコピーを避けるなら、
kakou(\$dat, $in);
sub kakou {
 my($dat_ref, $in) = @_;
 return unless $in;
 # $$dat_ref に直接ほげほげする
}

434 :デフォルトの名無しさん:2011/12/08(木) 21:17:51.75
「Perlで有名な小飼弾に暴言を吐いたキチガイw OSSコミュニティから物凄いパッシングw」
http://blog.livedoor.jp/dankogai/archives/51733482.html

北畠徹也氏が代表の「テラ・インターナショナル」がPerlを勝手に商標登録

>>この北畠って人は、ツイッターとかでも自殺するって言って話題になったり
よく分からないNPOか何かに募金をしてくれってメールを数万人規模のMLに流したり
それらは実はチョットした技術的ミスだって釈明してたりする人らしいね

Tetsuya_K 北畠徹也
@dankogai の家に電話したら、「小飼弾は死にました」らしい。ざまみろ。ざまみろ。というか、死んだ方が社会にとって幸せ。以上。# どうでもいいが、jcode.plなんて簡単につくれるじゃろ。あんなので調子に乗るアホもどうかしてるぜ。
Tetsuya_K 北畠徹也
I compared my @klout with @dankogai, how does your @klout compare? klout.com/user/dankogai/… @Tetsuya_K に比べたら全く大したことねーな。大口叩く愚か者が。

コメントの一覧

「みんなおもしろいおもしろいいってるけど北畠さん完全にかわいそうな精神病の患者ですよね」
「コメント欄が病的で怖い。人格が分裂してる?」
「本当に何がしたかったんだろう・・・」
「無事取り消されたそうで。本当によかった。」


435 :デフォルトの名無しさん:2011/12/08(木) 21:51:24.48
その人が頭おかしいのは前からわかってるのでもう名前も見たくないです

436 :デフォルトの名無しさん:2011/12/08(木) 22:10:36.86
Perlのバージョンは 5.14 subversion 2 OS WinXP Pro sp3
全くの初心者で、本の見ながらサンプルを打ち込んで確認しているんですけど、はてな?で教えて下さい。

$n ='9';
if ($n =~ /^[[:alpha:]]/) {
print "$n はアルファベットです\n";
} elsif ($n = ~ /^[[:digit:]]/) {
print "$nは数値です\n";
} else {
print "$n はアルファベットでも数値でもありません\n";
}


コマンドプロンプトで
perl test.pl
ってやると
9は数値です
って表示されるはずが、
4294967295は数値です
とかって表示されてしまいます。
なんで????

437 :デフォルトの名無しさん:2011/12/08(木) 22:14:18.66
↓これが答えだ!

438 :デフォルトの名無しさん:2011/12/08(木) 22:14:23.67
= ~
離すな危険

439 :デフォルトの名無しさん:2011/12/08(木) 22:18:55.33
'=' と'~'はくっついていないと駄目なんすか!?

へぇぇ、、、びっくりです。

>>438
ありがとうございます。

440 :437:2011/12/08(木) 23:13:22.62
どういたしまして

441 :デフォルトの名無しさん:2011/12/09(金) 06:48:18.18
>>439
逆に 何故離れていてもいいと思ったのか知りたい

442 :デフォルトの名無しさん:2011/12/09(金) 09:18:19.54
>>433
ありがとうございます。

kakou($dat, $in);
sub kakou {
  my $in = $_[1];
 return unless $in;
 # $_[0] に直接ほげほげするか、my $dat_ref = \$_[0];するか
}

この方法でもコピーを避けれるかと思うのですが、
呼び出し側で\付けてリファレンスを渡してやる方が一般的なんでしょうか?

443 :デフォルトの名無しさん:2011/12/09(金) 09:58:27.40

$stringという値があります。
これをuse Data::Dumperで出力すると下記のようになります。

$VAR1 = [
"\x{e3}\x{81}\x{8c}"
];

しかしfrom_to($string, 'utf8', 'utf8')
をDumperの手前に入れると下記のようになります。

$VAR1 = [
'が'
];

気づいた点は""(展開する)から''(展開しない文字列)に変わっています。
後者の状態にしたいのですが、from_toで「行って来い」だと効率が悪すぎると思うのですが、
何か方法はありますでしょうか?
$string = eval($string)ではうまくできませんでした。

use utf8;は入れています。

444 :デフォルトの名無しさん:2011/12/09(金) 10:42:31.33
> $stringという値があります。

この値をどっからどうやって取ってきたかが問題なんじゃないの?


445 :デフォルトの名無しさん:2011/12/09(金) 10:49:44.91
>>442
それでも同じではあるけど、っていうか>>443見て Encode::from_to はまさにそういう呼び出しの例だと思い出したけど、
そういうある程度一般的な関数の場合を除けば普通は呼び出し元で \$dat としておいたほうが「$dat の中身だけを直接変更する」という意図が一目瞭然だと思う。

>>443
from_to でいいと思うよ。それか decode('utf-8', $string) で utf8 フラグ付きの 'が' が得られる(decode_utf8($string) ではダメ)。
ただし、"\x{e3}\x{81}\x{8c}" ってのがそもそも普通の状態じゃない(大抵はコーディングミスかモジュールのバグ)ので、
意図してそういう状態にしてるんじゃなければ、まずその原因を探して取り除いたほうがいい。
(具体的には utf8 フラグなしの 'が' を utf8::upgrade すると "\x{e3}\x{81}\x{8c}" になるのだが、普通そんなことはするべきではない。)

446 :442:2011/12/09(金) 13:18:22.96
>>445
仰るとおりだと思います。参考になりました。
ありがとうございます。

447 :デフォルトの名無しさん:2011/12/09(金) 18:05:22.33
掲示板のコメントだけをテキストファイルなどに出力するプログラムってperlが向いてると思うんだけどどう書いたら良いですか?
簡単らしいんですが初心者なんで解りませんorz

よろしくお願いします。

448 :デフォルトの名無しさん:2011/12/09(金) 18:10:12.09
>>447
掲示板へアクセスしてログを取得

ログの中から必要なコメントだけを抜き出し

ファイルへ出力

出力したファイルを見る事なく数年過ぎる

「なんだこれ?あぁこんなの作ったっけイラネ」

結果:無駄

449 :デフォルトの名無しさん:2011/12/09(金) 18:56:11.72
>>447
どう、っつーても掲示板次第だと思うぞ
ブラウザ右クリしてソースの表示して法則をみつけるよろし

450 :デフォルトの名無しさん:2011/12/10(土) 16:52:21.99
>>441
$_ を対象として /^[[:digit:]]/ をマッチさせた結果の
1の補数を $n に代入するだなんて、これっぽっちも思い
つかなかったんで。

451 :デフォルトの名無しさん:2011/12/10(土) 19:14:45.10
>>441

くっつけて書けって本には書いてなかったもんで

452 :デフォルトの名無しさん:2011/12/10(土) 19:27:28.23
まあ、ゆとりは大事だからねぇw

453 :デフォルトの名無しさん:2011/12/10(土) 20:20:27.29
=と~ って考えるか =~ で1つと考えるかだろうねー。

454 :デフォルトの名無しさん:2011/12/10(土) 21:19:54.36
= は代入演算子
~ はビット否定演算子
=~ はパターン結合演算子

これらが書かれていない本は捨てて、新しい本を
買ってこい。この先何があるか分かったもんじゃ
ないぞ。

455 :デフォルトの名無しさん:2011/12/10(土) 21:32:15.65
>>451
え?まさか「= ~ と書いてもいい」とか載ってないよね??

456 :デフォルトの名無しさん:2011/12/10(土) 21:39:52.36
初期のC言語にもこの類の問題があったな。C=+3とか。

457 :デフォルトの名無しさん:2011/12/10(土) 21:50:09.75
初めまして。cygwinでperlを動かそう思っています。

perl-e 'print "hello!\n";'は上手くいくのですが、hello.plというファイルを作った時は
では上手くいきません、良ければご教授下さい


458 :デフォルトの名無しさん:2011/12/10(土) 21:56:30.13
hello.plの中身をなぜ書かないのか気になる

459 :デフォルトの名無しさん:2011/12/10(土) 21:58:29.15
すいません
#!/cygwin/bin/perl
print "Hello, World";

とかいろいろサイトみて試してみたんですが、よくわからなくて

460 :デフォルトの名無しさん:2011/12/10(土) 22:04:55.52
> perl hello.pl


461 :デフォルトの名無しさん:2011/12/10(土) 22:08:58.63
perl hello.pl と打ち込むと
Can't open perl script "hello.pl": No such file or directory
と出ます。

462 :デフォルトの名無しさん:2011/12/10(土) 22:12:05.47
>>455
まあ、
a=b+1;
でも
a = b + 1 ;
でも通るから、スペースは無視されるとでも思ったんじゃね?



463 :デフォルトの名無しさん:2011/12/10(土) 22:14:09.15
《エスパーモード》

ファイル hello.pl がカレントディレクトリにない。

(たぶんデスクトップ上にある)

464 :デフォルトの名無しさん:2011/12/10(土) 22:21:40.65
>(たぶんデスクトップ上にある)

そうです!ありがとうございます
cygwin\binに移しました。
-bash: perl: command not found
とでました・・・


465 :デフォルトの名無しさん:2011/12/10(土) 22:24:58.76
which perl


466 :デフォルトの名無しさん:2011/12/10(土) 23:05:30.27
「カレントディレクトリ」と「カレントディレクトリの変更」を
調べてもう一度戻ってきてください。

467 :デフォルトの名無しさん:2011/12/10(土) 23:36:47.09
あるいはフルパスで指定するとか

468 :デフォルトの名無しさん:2011/12/10(土) 23:46:33.91
もう、すれ違いじゃない?

469 :デフォルトの名無しさん:2011/12/10(土) 23:50:09.61
すでにCygwinについての質問になってるな。
cygwin上で動かすんだったらshebangは
#!/cygwin/bin/perl
じゃなくて
#!/usr/bin/perl
だろう。

cygwinを普通にインストールしてたら、
cygwin上から /cygwin にアクセスしようとしてもできない筈だぞ。

470 :デフォルトの名無しさん:2011/12/12(月) 03:27:59.67
proveコマンドでテストを実行できるのはべんりなのですが、
テストが失敗した場合、どのテストが失敗したかを知るにはどうしたらいいですか。
試してみたところ、何番目のテストが失敗したかが表示されるだけで、すごくわかりづらいです。

Test Summary Report
-------------------
t/foo.t (Wstat: 0 Tests: 17 Failed: 1)
Failed test: 17
Files=1, Tests=17, 0 wallclock secs ( 0.04 usr 0.01 sys + 0.06 cusr 0.02 csys = 0.13 CPU)
Result: FAIL

テスト番号ではなく、ファイル名と行番号が表示されるようにしたいのですが、どうしたらいいでしょうか。
よろしくお願いします。


471 :デフォルトの名無しさん:2011/12/12(月) 03:44:28.32
>>470
すみません、勘違いでした。
Test::Moreだと行番号がきちんと表示されるのですが、自作のツールだと表示されないようです。
もうちょっと調べてみます。

472 :デフォルトの名無しさん:2011/12/12(月) 04:04:12.86
再度質問です。同じ出力をするスクリプトなのに、proveコマンドの挙動が違うのはなぜかについて。

use strict;
use warnings;
use Test::More tests=>1;
is 1+1, 3;

というファイルをperlで実行すると、次のようになります。

$ perl foo.t
1..1
not ok 1
# Failed test at foo.t line 4.
# got: '2'
# expected: '3'
# Looks like you failed 1 test of 1.

続く


473 :デフォルトの名無しさん:2011/12/12(月) 04:04:36.54
続き

これをproveコマンドで実行すると、失敗したテストの行番号が表示されます。

$ prove foo.t
foo.t .. 1/1
# Failed test at foo.t line 4.
# got: '2'
# expected: '3'
# Looks like you failed 1 test of 1.
foo.t .. Dubious, test returned 1 (wstat 256, 0x100)
Failed 1/1 subtests

Test Summary Report
-------------------
foo.t (Wstat: 256 Tests: 1 Failed: 1)
Failed test: 1
Non-zero exit status: 1
Files=1, Tests=1, 0 wallclock secs ( 0.03 usr 0.01 sys + 0.02 cusr 0.00 csys = 0.06 CPU)
Result: FAIL

続く


474 :デフォルトの名無しさん:2011/12/12(月) 04:05:41.09
続き

で、先程と同じ出力をするスクリプトを、Test::Moreを使わずにprint文だけで作りました。

use strict;
use warnings;
print "1..1¥n";
print "not ok 1¥n";
print "# Failed test at foo2.t line 4.¥n";
print "# got: '2'¥n";
print "# expected: '3'¥n";
print "# Looks like you failed 1 test of 1.¥n";

これをproveコマンドで実行すると、行番号だけでなく、「#」で始まる行が表示されません。

$ prove foo2.t
foo2.t .. Failed 1/1 subtests

Test Summary Report
-------------------
foo2.t (Wstat: 0 Tests: 1 Failed: 1)
Failed test: 1
Files=1, Tests=1, 0 wallclock secs ( 0.03 usr + 0.01 sys = 0.04 CPU)
Result: FAIL

いちおう prove -o で、コメント行が表示されることは分かりましたが、
知りたいのは、2つのスクリプトが同じ出力をしているのに、
proveコマンドの動作が違うのはなぜかということです。
たぶんTest::Moreのis()がなんか特殊なことをしているのだとおもいますが、
どんなことをしているのかは分かりません。
だれか知っている人がいたらおしえてください。


475 :443:2011/12/12(月) 15:14:39.81
>>445
遅くなりました。
"\x{e3}\x{81}\x{8c}"はフォーマット的におかしいんですね。
しかし、モジュールの結果で返ってきてるんで、今回は仕方ないとあきらめておきます。
教えていただきありがとうございました。

また、別の疑問が出てきました。
utf8の日本語をConfig::TynyとYAML::XS::LoadFileでインポートしてDump::Dumper::Dumperすると下記のようになります。
Configの方は''で完全な文字列ですが、YAMLの方は""で変数展開用のダブルクォーテーションになっています。
この違いはプログラム作成側としては気にしなくて良いのでしょうか?
また、Dumperで確認するときにConfigの方が日本語が読めていいと思うのですが、YAMLでシングルクォートにする方法はどのようにすればよいのでしょうか?

#Config::Tyny
$VAR1 = [
bless( {
'_' => {
'keyword' => 'キーワード'
}
}, 'Config::Tiny' )
];

#YAML::XS
$VAR1 = [
'_' => {
'keyword' => "\x{30ad}\x{30fc}\x{30ef}\x{30fc}\x{30c9}"
}
];


476 :475:2011/12/12(月) 15:23:39.91
すみません。
>>475
は、少し意味が違いますね。
よく見たらUTF8フラグがついている。↓
"\x{30ad}\x{30fc}\x{30ef}\x{30fc}\x{30c9}"
YAMLでロードすると、内部コードに変換して取り込むんですね。
そのせいで""ダブルコーテーションになってそうな気がしますが、合っていますでしょうか?

これだとインポートした文字列を出力したい時に、
ファイル→インポート(内部文字コード変換)→出力(encode)
と、無駄な変換が発生している気がしますが、そんなに負荷はないのでしょうか?

477 :デフォルトの名無しさん:2011/12/12(月) 20:28:05.88
おちついてください

130 KB
■ このスレッドは過去ログ倉庫に格納されています

★スマホ版★ 掲示板に戻る 全部 前100 次100 最新50

read.cgi ver 05.02.02 2014/06/23 Mango Mangüé ★
FOX ★ DSO(Dynamic Shared Object)