Perlについての質問箱 49箱目
レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん
2011/10/30(日) 14:44:20.41CGI と 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辺り
0002デフォルトの名無しさん
2011/10/30(日) 14:45:15.61Perlは死んだ
0003デフォルトの名無しさん
2011/10/30(日) 14:45:36.91さようなら! 過去の言語!
0004デフォルトの名無しさん
2011/10/30(日) 14:45:52.85Perl プログラミング講座: 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/
0005デフォルトの名無しさん
2011/10/30(日) 14:46:10.22Jcode関係は過去のやり方です。
0006デフォルトの名無しさん
2011/10/30(日) 14:46:42.49CPAN.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
0007デフォルトの名無しさん
2011/10/30(日) 14:47:28.43# このレスは、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 でエンコードする必要があります。
0008デフォルトの名無しさん
2011/10/30(日) 14:48:11.670009デフォルトの名無しさん
2011/10/30(日) 14:49:17.18http://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
0010デフォルトの名無しさん
2011/10/30(日) 14:50:21.93utf8フラグとい名前がまずかったね。
文字列フラグなどという名前だったらよかった。
文字列フラグはPerl固有のものだから
Perlコード外部から渡されるのは文字列ではない。
文字列でなかったらなにか?それはバイナリ。
バイナリを文字として扱いたければ、文字に変換しないといけない。
それがdecode。
ではソースコードに書いてあるのは、文字かバイナリか。
それはuse utf8を使えば文字で、そうでない場合はバイナリ。
話はこれだけ。
0011デフォルトの名無しさん
2011/10/30(日) 14:50:36.62while(<>){
chomp;
my @row = split(/,/, $_);
for my $row (@row){
Encode::from_to($row,'utf8','sjis');
print $row;
}
}
0012デフォルトの名無しさん
2011/10/30(日) 14:53:48.76モダンPerlの世界へようこそ
http://gihyo.jp/dev/serial/01/modern-perl/0001
0013デフォルトの名無しさん
2011/10/30(日) 14:54:42.28Windowsだとそうはいかない。
0014デフォルトの名無しさん
2011/10/30(日) 14:55:54.27文字列には、文字数というものがあるので
文字とバイナリは違います。
0015デフォルトの名無しさん
2011/10/30(日) 14:58:04.920016デフォルトの名無しさん
2011/10/30(日) 14:59:33.85減るので利用者として楽です。
0017デフォルトの名無しさん
2011/10/30(日) 15:00:07.72ビット(バイト)が並んだもの。それ以外に情報を持っていない。
・文字列
バイナリに様々なメタ情報が追加されたもの。
文字コード情報がが固定、もしくは内包されている。
データの終端情報を持っている。
1文字という概念がある。1文字は多バイト、または可変バイトで構成されている。
バイト単位での操作は行わない。
0018デフォルトの名無しさん
2011/10/30(日) 15:05:07.880019デフォルトの名無しさん
2011/10/30(日) 15:14:41.240020デフォルトの名無しさん
2011/10/30(日) 15:18:01.66ときでフラグがつく、つかないが変わる、ということからすると、latin-1
リテラルで Unicode 文字列をあらわすというのは今でも、それが perl
の正しい文字列の扱い方ということになるとおもう。
0021デフォルトの名無しさん
2011/10/30(日) 15:19:34.86日本語でおk
0022デフォルトの名無しさん
2011/10/30(日) 15:22:16.34だから、そういうへんな挙動がないEncodeモジュールを
使ってくださいと書いてあるんだよ。
http://perldoc.jp/docs/perl/5.8.1/utf8.pod
> utf8::encode($string)
>
> 論理キャラクタを、8ビットシーケンス表現に、PerlのUTF-Xエンコーディングに、
> (適切に)変換します。何も返しません。 Encode::encode_utf8()と同じです。
> 次のことに注意してください。レガシーのバイトエンコーディングを、
> Unicode にする変換に使うべきではありません:そのためには、Encode を使って下さい。
0023デフォルトの名無しさん
2011/10/30(日) 15:47:51.88そこに書いた「文字列」を「文字列インスタンス」「文字列オブジェクト」
と書換えるのなら構わないけど、一般的な言葉の「文字列」をその定義に
しちまうのはどうよ?
そうでないと今、見えているものが文字列じゃなくなっちゃうぞ。
0024デフォルトの名無しさん
2011/10/30(日) 15:57:16.10なんで? データの終端情報は微妙だけど、
ここに書いてある文字を読むためには、ShiftJISという文字コード
まで含めてやっと文字列として読めるだろ?
そしてその1文字が何バイトであるかなんて考えないだろ?
0025デフォルトの名無しさん
2011/10/30(日) 16:23:16.44パピルスに書かれたものも、粘土板に刻まれたものも、木簡に書かれた
ものも文字列と言われてきたのだから、これからもそうしたほうがいい
と思う。
(それともお前が全部燃やしたいの?)
・(ひとが扱う)文字列
バイナリに様々なメタ情報が追加されたもの。
→ コンピュータ導入前から人間は文字列は使っているわけで、"バイナリ"
は無関係。コンピュータがデジタルではなった場合も然り。
文字コード情報が固定、もしくは内包されている。
→ 同じ理由で文字コード情報は文字列の定義に関係がない。
データの終端情報を持っている。
→ バイナリデータだって終端情報を持っていることがある。
1文字という概念がある。
→ 確かに。でももしかしたら1文字の概念があやふやだったり、なかったり
するようなもの(言語?)もあるかもしれない。
1文字は多バイト、または可変バイトで構成されている。バイト単位での
操作は行わない。
→ これまたコンピュータ上/内の話。コンピュータの有無やその構造・方式
と文字列の定義は無関係。
0026デフォルトの名無しさん
2011/10/30(日) 16:26:32.52意味がわからん。
今はコンピュータ上の文字の表現の仕方の話だろ。
手書きしたものとか言い出したら、
文字はバイナリではない(分子かなんかカ?w)ということになるだろ。
なに関係ありそうで関係ないものの話持ちだしてんだかw
こいつは頭が悪いと認定してよさそうだ。
0027デフォルトの名無しさん
2011/10/30(日) 16:29:44.06ttp://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.
ってあるようにコンピュータは文字を扱うわけではない。
0028デフォルトの名無しさん
2011/10/30(日) 16:33:21.15文字コード情報が別に必要になる。
ASCIIだって、ASCIIコードという情報がなければ、
アルファベットですら文字として認識できない。
たとえばASCIIコードでABCDと書いてあるように見えても、
これはASCIIではなくUTF32ですといわれれば別の文字になるしね。
文字を文字として認識するためには、文字コード情報が必要不可欠。
C言語とかこの文字コード情報が文字列にくっついていないから
(そもそもC言語には文字はあっても文字列はないんだが)
文字として表示するためには人間が文字コードのことを考慮する必要があった。
最近の言語では、文字とバイナリは区別され、文字には文字コード情報が内包されている。
そのため、人間がいちいち文字コードは何か? と考える必要がなくなった。
PerlのUTF8フラグもその一つ。
0029デフォルトの名無しさん
2011/10/30(日) 16:35:11.85中途半端に持ってくるなよ
基本的に、コンピュータは数字だけを扱います。彼らはそれぞれに番号を割り当てることによって、
文字や他の文字を格納する。ユニコードが発明される前に、これらの番号を割り当てるための
さまざまなエンコーディングシステムの何百ものがあった。単一の符号化に十分な文字が含まれていないことができます:
例えば、欧州連合(EU)だけではそのすべての言語をカバーするいくつかの異なるエンコーディングが必要です。
であっても英語のような単一言語の単一の符号化は、共通使用されているすべての文字、句読点、技術記号のための十分でした。
お互いに、これらの符号化システムは、また競合。つまり、二つのエンコーディングは、2つの異なる文字に対して同じ番号を使用して、
または同じ文字に異なる番号を使用することができます。任意のコンピュータ(特にサーバ)さまざまなエンコーディングを
サポートする必要があります。まだいつでもデータが異なるエンコーディングやプラットフォーム間で受け渡され、データは常に破損の危険性を実行される。
0030デフォルトの名無しさん
2011/10/30(日) 16:36:46.56「2つの異なる文字に対して同じ番号」を割り当てるわけ。
つまり番号からでは、どの文字かどうかはわからない。
そこで使用されるのが、エンコーディング(文字コード)
番号を文字として認識するには、文字コード情報が必要不可欠
0031デフォルトの名無しさん
2011/10/30(日) 16:47:39.58例えばPerlで処理した後にPythonで処理したり、お前の母ちゃんが処理したり
することもあるだろ?
0032デフォルトの名無しさん
2011/10/30(日) 16:49:32.04そういう場合は文字を一旦バイナリに変換する。
そして他の言語でバイナリとして読み取ったものを
その言語用の文字列として変換するんだよ。
0033デフォルトの名無しさん
2011/10/30(日) 16:51:39.460034デフォルトの名無しさん
2011/10/30(日) 16:53:22.730035デフォルトの名無しさん
2011/10/30(日) 17:01:38.82バイナリエディタの区別がつかない人?
バイナリのまま、文字列を操作するのは大変だろw
だからテキストエディタで文字列として解釈させて・・・
でも元がバイナリ(文字コードデータが含まれてない)だから、
たまに自動判定できなくて・・・
こんなことを、いちいち言わないとわからないのかな?
0036デフォルトの名無しさん
2011/10/30(日) 17:03:36.760037デフォルトの名無しさん
2011/10/30(日) 17:04:24.270038デフォルトの名無しさん
2011/10/30(日) 17:05:30.40そんな事言ってるのはお前だけw
0039デフォルトの名無しさん
2011/10/30(日) 17:08:56.05扱っているわけではない。もし今会話している相手がコンピュータ
だっていうならチューリングテスト合格だと思うぞ。
0040デフォルトの名無しさん
2011/10/30(日) 17:13:07.05プログラミング言語での文字列型に格納されてる文字列について話してる人がいるかかみ合わないのでは?
0041デフォルトの名無しさん
2011/10/30(日) 17:15:24.89プログラミング言語での文字列型に格納されてる文字列
以外の話をしている人は、なんなんだろうね。
0042デフォルトの名無しさん
2011/10/30(日) 17:16:08.13ことにすべて同意する。
0043デフォルトの名無しさん
2011/10/30(日) 17:19:41.78ここはperlスレ。
perlにおいて文字列オブジェクトとは
変数の値にUTF8フラグがついたもの。
0044デフォルトの名無しさん
2011/10/30(日) 17:21:30.96格納される前は、格納されるものを何て呼べばいいの?
そこを議論しているつもり。
確かに格納される前の話はPerlと無関係かもしれないけれど、説明したり
するときにどうしてもそれを表わさないといけないよね?
0045デフォルトの名無しさん
2011/10/30(日) 17:27:06.390046デフォルトの名無しさん
2011/10/30(日) 17:29:28.39B) 文字列オブジェクトには文字列が格納されている
0047デフォルトの名無しさん
2011/10/30(日) 17:32:28.520048デフォルトの名無しさん
2011/10/30(日) 17:32:45.56これでも読んでください。
http://perldoc.jp/docs/perl/5.10.0/perlunitut.pod
・テキスト文字列(文字の文字列)
テキスト文字列、または 文字の文字列 は文字からなります。
バイト列はここでは無意味で、エンコーディングがあります。 各文字は単に文字です。
テキスト文字列は Unicode 文字列 とも呼ばれます; なぜなら、Perl では テキスト文字列は Unicode 文字列だからです。
・バイナリ文字列(バイト文字列)
バイナリ文字列、または バイト文字列 はバイト列からなります。
ここでは、文字はなく、単にバイトだけがあります。
外側の世界(現在の Perl プロセスの外側のあらゆるもの) との通信はバイナリで 行われます。
・エンコード
エンコード は テキスト から バイナリ への変換です
・デコード
デコード は バイナリ から テキスト への変換です。
0049デフォルトの名無しさん
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]は使えないみたいですし……。
ご教授お願いします。
0050デフォルトの名無しさん
2011/10/30(日) 17:46:16.62B) ≒ C) 文字列変数に文字列が格納されている
ってこと。
Perlの場合は文字と数値を区別しない変数なので文字列変数ってもの
がなかったわけで、ついでにバイナリストリングと文字列の区別も
なかった。区別がない方が便利なこともあるし、システム的に区別が
あった方が便利なこともある。
でも入れるものと入れられるものを区別できないと困るし、単語が
今までの用法と異なるのも混乱の元。
0051デフォルトの名無しさん
2011/10/30(日) 17:50:42.920052デフォルトの名無しさん
2011/10/30(日) 17:53:32.260053デフォルトの名無しさん
2011/10/30(日) 17:56:44.75あ〜れぇ〜って読むの?
それとも、ありぃ〜?って読むの?
0054デフォルトの名無しさん
2011/10/30(日) 18:36:16.810055デフォルトの名無しさん
2011/10/30(日) 19:08:21.20B') 数値オブジェクトには数値が格納されている
数値にはリテラルの語感があるので、A') が不自然に感じる。
0056デフォルトの名無しさん
2011/10/30(日) 19:16:27.45変数にバイナリ値が格納されている。
変数に文字列が格納されている。
これでいいじゃん
0057デフォルトの名無しさん
2011/10/30(日) 19:19:04.01>>52
ありがとうございます。
[-1]だと何故かダメなんです。表示されません。
0058デフォルトの名無しさん
2011/10/30(日) 19:21:36.92-1 が使えない状況がおかしい。
使えないというコードそのままさらしてみ?
0059デフォルトの名無しさん
2011/10/30(日) 19:26:15.90格納される前は?
これから格納しようかと思っているものの名称は?
0060デフォルトの名無しさん
2011/10/30(日) 19:29:41.19要するに変数の右辺だろ?
変数に入れたからって、右辺の状態が
変更されるわけ無いだろ。
変数に入れるまでもなく、
数値、バイナリ値、文字列、ついでにオブジェクトだよ。
0061デフォルトの名無しさん
2011/10/30(日) 19:30:26.03○要するに変数への代入式の右辺だろ?
0062デフォルトの名無しさん
2011/10/30(日) 19:33:40.770063デフォルトの名無しさん
2011/10/30(日) 19:39:29.07なら答えは>>48に書いてあるじゃん。
> 外側の世界(現在の Perl プロセスの外側のあらゆるもの) との通信はバイナリで 行われます。
はい、バイナリです。
0064デフォルトの名無しさん
2011/10/30(日) 19:40:01.460065デフォルトの名無しさん
2011/10/30(日) 19:41:51.30がんばれ!!!
0066デフォルトの名無しさん
2011/10/30(日) 19:42:32.36お前何のはなししてるの?
0067デフォルトの名無しさん
2011/10/30(日) 19:47:05.380068デフォルトの名無しさん
2011/10/30(日) 19:56:22.110069デフォルトの名無しさん
2011/10/30(日) 20:00:49.05no utf8;
0070デフォルトの名無しさん
2011/10/30(日) 20:09:50.87文字の話は↓こっちに移ったんだろうがよ
Perlについて
http://hibari.2ch.net/test/read.cgi/tech/1217851121/
0071デフォルトの名無しさん
2011/10/30(日) 20:18:25.73環境は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]";
""を外してみてもダメでした。
0072デフォルトの名無しさん
2011/10/30(日) 20:22:21.560073デフォルトの名無しさん
2011/10/30(日) 20:34:39.89モジュールの作り方とか載ってないので、次の本を探
しています。
だいたいPerlの書き方はわかったので、リファレンスを
兼ねた本がいいと思い、「プログラミングPerl 第3版」
を検討していますが、内容的には古くないでしょうか?
2002年というのがどうにも気になりまして。
あとできればマルチバイト文字にも配慮した本だと
いいのですが望み薄ですか?
shiftjisのテキストファイルを扱うときに、日本語処理に
随分手間取ったので。(Encodeモジュールを使いました)
0074デフォルトの名無しさん
2011/10/30(日) 20:41:09.19週ごとに区別する都合で2次元配列なんです。
いろいろ手間をかければ月の最終日が何日なのかは参照できると思いますが、
一発でアクセスできる方法があればなと……。
0075デフォルトの名無しさん
2011/10/30(日) 20:43:04.650076デフォルトの名無しさん
2011/10/30(日) 20:46:39.12して、
print Dumper \@current_month ;
の結果が想定通りかまず調べろ。
実際には一次元が返ってたとか、undef が
返ってたとかあるだろ。
0077デフォルトの名無しさん
2011/10/30(日) 20:47:28.970078デフォルトの名無しさん
2011/10/30(日) 20:50:38.36埋まっているに一票。
0079デフォルトの名無しさん
2011/10/30(日) 22:30:04.75今日はもうコードをチェックしませんが、恐らく真理です……。
calendarモジュールから取得した日にちデータを、
実際のカレンダーのように、日〜土までを一行として表組みしてます。
仮に月曜日でその月が終わるとすると、火〜土までは空白セルとして表示するようになってます。
……とすると配列の最後尾にアクセスするんじゃなくて、
undefでない最後の有効値にアクセスするように書けばいいってことですよね。
いちいちループ使ってその配列の後ろからundefかそうでないかを調べていったほうが早いでしょうか。
一発で最後の有効値にアクセスする方法ってあります?
0080デフォルトの名無しさん
2011/10/30(日) 22:39:28.1477氏がその質問を予見してて、答えの一案を書いてるだろ。
0081デフォルトの名無しさん
2011/10/30(日) 23:04:38.66use strict; use warnings; もしてないであろう>>79なら平気かしらんが
0082デフォルトの名無しさん
2011/10/31(月) 00:22:08.94続・初めてのPerl 改訂版
まるごとPerl! Vol.1
それに腐っても鯛、
プログラミングPerl 第3版
は、読む価値がある
でもその前に
プログラミングPerl 第2版
を薦めておく
0083デフォルトの名無しさん
2011/10/31(月) 00:27:31.33実際は読んでないんだろうなw
0084デフォルトの名無しさん
2011/10/31(月) 01:41:52.11欲しいのは「二次元配列の最後の(undefではない)要素の値」なのか、
「その年・月の末日の日付」なのか、どっち?
後者ならその配列の値を参照する以外にも取得方法はあると思うが。
use Date::Calc qw(Days_in_Month);
print Days_in_Month($year,$mon);
とか。
まあ>>77の方法でもいいだろうけど。
0085デフォルトの名無しさん
2011/10/31(月) 03:05:19.57例えば、480×320pxの画像を、400×400pxの枠内に収めたいとき、
cropするだけだと、400×300pxとなってしまいます。
これを、上下50pxずつ白い背景を付け足して、400×400pxの画像に
したいのですが、方法をご存知の方がいたら是非教えてください。
0086デフォルトの名無しさん
2011/10/31(月) 04:48:48.11俺だとこうするかなぁ。行頭の空白全角にしてるけど:
my $last_day = (
grep { defined $_ }
map { @{$_} }
@current_month
)[-1];
0087デフォルトの名無しさん
2011/10/31(月) 08:37:42.50Data::Dumperは出力結果をevalすると元に戻るというのも趣旨の1つ。
そのため、元がテキスト文字列だったものをevalしてもテキスト文字列
に戻るように、"\x{ff84}"という記法で出力している。
0088デフォルトの名無しさん
2011/10/31(月) 12:31:48.72ありがとうございました。
>>86の方法で解決です。
ちなみにuse strict;use warnings;どっちもしてます。
0089デフォルトの名無しさん
2011/10/31(月) 13:28:43.74大方、CGI でしか動かしてなくてしかも CGI::Carp を使ったデバッグすらしてない、とかなんだろうけど。
0090デフォルトの名無しさん
2011/11/01(火) 17:59:02.821000個の配列を大きい順に並びかえるようなソートだと
自作関数だと1000*1000回のループになっちゃうんだけど、これより速いですか?
0091デフォルトの名無しさん
2011/11/01(火) 18:01:00.070092デフォルトの名無しさん
2011/11/01(火) 18:21:27.17http://perldoc.perl.org/sort.html
0093デフォルトの名無しさん
2011/11/03(木) 00:28:27.70use encoding "utf8"
use Encode;
use strict;
print encode('shiftjis',"テストテスト");
こんな感じのソースを書いて、UNIXサーバに送って
TeraTerm(SJIS設定)で実行すると文字化けする
んですが、何が問題なのでしょう?
TeraTermをutf8設定にして、encodeなしでで表示させれば、
うまく表示されるんですが、SJISのファイルが多いので、TeraTermの
設定はSJISにしておきたいと思っています。
もちろん上記ソースはUTF8で保存してます。
0094デフォルトの名無しさん
2011/11/03(木) 00:53:08.42use encoding;は、jperlなど、かつて存在したL10Nされたperl用に
書かれたレガシースクリプトを、モダンperlで動かすときのためのおまじないです。
スクリプトはUTF-8で書き、use utf8;する
のがモダンPerlのあり方です。
0095デフォルトの名無しさん
2011/11/03(木) 01:15:50.78おー ありがとうございます。
ソースが職場なので、あとで確認してみます。
この辺の漢字圏の文化を踏まえたPerlの本が
あると良いのですけど、ありませんかね?
0096デフォルトの名無しさん
2011/11/03(木) 01:28:38.23モダンperlについて調べたほうがいい。
ネットは古臭いコードで溢れてる。
0097デフォルトの名無しさん
2011/11/03(木) 01:38:26.41これまた奇特な言語だな
0098デフォルトの名無しさん
2011/11/03(木) 02:28:27.58Perlの標準ライブラリとは、ユーザが作ったモジュール。
それが利点でもあるが、メンテナが一個人だったりするわけで
その人の気分で仕様が変わり、互換性が低い部分がある。
0099デフォルトの名無しさん
2011/11/03(木) 03:51:43.51文字コード「超」研究 改訂第2版 深沢千尋
まだあるけどね
0100デフォルトの名無しさん
2011/11/03(木) 10:42:18.14use Socket;
socket(・・・);
connect(・・・);
な感じでインターネット上のwebサイトからページを取得してるんだけど、
サイトの応答が遅いとき、応答が帰ってくるまでCPU負荷が100%近くになる。
これって何が原因でしょうか。
まあ、PCのスペックはWin2000を使っているというあたりで想像いただけるとは思いますがしょぼいです。
Activeperlのバージョン上げれば直るのかな…
0101デフォルトの名無しさん
2011/11/03(木) 15:09:06.33お薦めだけでも300冊位思いついちゃってレスがまんどくさく
なっちゃったんだろうなw
0102デフォルトの名無しさん
2011/11/03(木) 19:29:28.98WEB プログラミング板へ
http://hibari.2ch.net/php/
0103デフォルトの名無しさん
2011/11/03(木) 19:34:23.06理由はセキュリティ的に脆いかららしいのですが・・・
いったい、どうセキュリティ的に脆いのでしょうか?
0104デフォルトの名無しさん
2011/11/03(木) 20:40:50.01my $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 コマンドを実行できなくなる。
0105デフォルトの名無しさん
2011/11/03(木) 20:40:53.11ありがとうございます。
行ってみます。
0106デフォルトの名無しさん
2011/11/03(木) 20:52:34.55$sql = <<"_SQL_";
SELECT foo FROM table WHERE 〜
_SQL_
$sth = prepare( $sql );
0107103
2011/11/03(木) 20:54:27.16なるほど〜
任意の外部コマンドが実行されてしまう可能性があるって事だったのですね・・・
わかりました、これからは3つ引数でオープンする事にします。
ありがとうございます。
ちなみに、sql文は、
my $sth = $dbh->prepare(
"SELECT なんちゃらかんちゃら ".
"FROM 超長ったらしい ".
"WHERE うんたらかんたら"
);
の、ように、俺は分割してます。
0108デフォルトの名無しさん
2011/11/03(木) 20:56:25.03まちがった。
$sth = $dbh -> prepare( $sql );
だす。
0109デフォルトの名無しさん
2011/11/03(木) 21:07:44.04SELECT foo
FROM table
WHERE ...
END_SQL
0110104
2011/11/03(木) 21:13:42.72ありがとうございます!
確かにヒアドキュメントとか文字列の結合を使えばできますねw
Cから乗り換えたばかりなのでなかなか思いつきませんでした。
0112デフォルトの名無しさん
2011/11/04(金) 23:07:23.16use utf8でうまく漢字が出るようになりました!
ありがとうございました。
0113デフォルトの名無しさん
2011/11/05(土) 01:05:25.23うわ、ありがとうございます、よくわかりました。
前スレで答えてくれた方もありがとうございました。
0114デフォルトの名無しさん
2011/11/05(土) 10:51:18.81折り返して書く小細工で極低頻度に発症するバグで呼び出されることも
あるのでそのまま1行で書くのもまた一興。
0115デフォルトの名無しさん
2011/11/05(土) 14:07:20.200116デフォルトの名無しさん
2011/11/05(土) 14:28:06.53ただし、この場合は Str だけでおk。
http://search.cpan.org/perldoc?Moose::Util::TypeConstraints#Default_Type_Constraints
0117デフォルトの名無しさん
2011/11/05(土) 14:42:47.56ありがとうございました。
0119デフォルトの名無しさん
2011/11/06(日) 21:30:26.49@{[$self->method]} なんですが、これってどういう理屈で動いてるんでしょうか?
0120デフォルトの名無しさん
2011/11/06(日) 21:46:06.94/@{$arrayref}/
0121119
2011/11/07(月) 01:10:07.93他に分かりやすい方法ってないんでしょうか。
0122デフォルトの名無しさん
2011/11/07(月) 01:53:17.22なんだか変な方法で展開してるね・・・
${self->method}で十分だと思うんだけど・・・
わざわざ、$self->methodの値を配列のリファレンスにして、
それをデリファレンスしてる・・・
意味があるんだろうか・・・俺も教えてほしい
0123デフォルトの名無しさん
2011/11/07(月) 02:06:16.44おもしろくないぞ。
0124デフォルトの名無しさん
2011/11/07(月) 02:08:02.260125デフォルトの名無しさん
2011/11/07(月) 02:19:10.91...
}
0126デフォルトの名無しさん
2011/11/07(月) 02:57:07.87いや、まじめなんだけど・・・
それが配列リファレンスだったとしても、
@{$self->method}で十分だと思うし・・・
どういう事なのですか?教えてください
0127デフォルトの名無しさん
2011/11/07(月) 03:46:57.00前者は $hoge だが、後者は self->method の戻り値をスカラーリファレンスと見做してデリファレンスするという意味になる。
しかし self->method なんてものは元々の話に出ていないので、見当違い。
次、>>126。$self->method の戻り値は配列リファレンスじゃなくて単品の文字列だから、
@ で配列にデリファレンスする前に [ ] で囲って要素1つの配列リファレンスに仕立ててあげる必要があるわけ。
0128デフォルトの名無しさん
2011/11/07(月) 05:50:46.03あぁそっか、大きな間違いをしてた
$self->methodはサブルーチンのリファレンスだったね
しかし変な評価の仕方だな〜って思って見なおしたけど、
言われてみれば、この形・・・
CGIとかでHTMLをヒアドキメントで書いた時、
その中で関数を実行する時に、この形書いた事があったや・・・
勉強になりました
0129デフォルトの名無しさん
2011/11/08(火) 00:01:09.30seekだとバイト数でしか指定できないし
$count=0;
while(<IN>){
$count++;
if($count==$gyousuu){
last;
}
}
これだとファイルの行数が多いほどループ回数が多くなるから重くなる
だからいっきに飛びたいんです
0130デフォルトの名無しさん
2011/11/08(火) 01:03:30.79そもそも何行目かってのは
改行コードが何回出たかを数えないと特定不能
先頭から順番に読んで改行を数えるか
ファイル丸ごとリストに読んでから添字で飛ぶかしかない
ぶっちゃけそのままの方法が最善じゃないか?
0131デフォルトの名無しさん
2011/11/08(火) 01:07:09.14@list = <$fh>;
とかやって配列で扱う
pushとpopでぽぽぽぽーん
0132デフォルトの名無しさん
2011/11/08(火) 01:10:56.87$countとかいう不気味なカウンタ付けてるのが気になる
行数カウントなら自前で用意しなくても $. がある
相当な素人っぽいから、そこらの本やらサイトやらperldocやらを読んでみたほうがいい
0133デフォルトの名無しさん
2011/11/08(火) 11:49:25.93メモリに制約がないなら>>131でいいんじゃないの?
>>132
$.を使ったってやることは一緒でしょ。
0134デフォルトの名無しさん
2011/11/08(火) 12:17:14.78おれはperl歴6年だぜ
0135デフォルトの名無しさん
2011/11/08(火) 12:35:36.94たったの6年でドヤ顔されても困るんだがw
0136デフォルトの名無しさん
2011/11/08(火) 14:32:42.45適当なサイズのバッファ単位で読めば 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
もしくはファイルフォーマットを固定長レコードに変えて位置を計算で出せるようにする。
0137デフォルトの名無しさん
2011/11/08(火) 18:07:15.44俺は13年だぜ(キリッ
しかし別に13年ずっとperlじゃないから、
ぜんぜん詳しくなく普通くらいなんだぜ!
0138デフォルトの名無しさん
2011/11/08(火) 18:23:51.81『普通』ってどれくらい?
0139デフォルトの名無しさん
2011/11/08(火) 18:34:57.86http://hibari.2ch.net/prog/
0140デフォルトの名無しさん
2011/11/08(火) 18:45:57.57print "hello world"; (ドヤ
0141デフォルトの名無しさん
2011/11/09(水) 13:44:58.03$array = [ "a", "b", "c" ];
$hash = { a => "1" };
$scalar = ?? #my $string = "a"; $scalar = \$string; を一度にやりたい
0142デフォルトの名無しさん
2011/11/09(水) 13:55:48.82my $scalar = \$string;
print $scalar."\n" ;
my $ref = \("a") ; # ココ!!
print $ref."\n" ;
こういうの?
0143デフォルトの名無しさん
2011/11/09(水) 13:59:40.480144デフォルトの名無しさん
2011/11/09(水) 14:51:26.01どうしてこういうヤツは例を上げれないの?
質問スレにお前は必要なの?
0145デフォルトの名無しさん
2011/11/09(水) 15:21:46.02$ref = \ "a"
print $$ref;
スカラーリテラルへのリファレンスなんて生成できるのか。
Perl 本体のドキュメントにそういう例は見当たらない(あったら教えて)が、
『プログラミングPerl』(Vol.1)「8.2.1 逆スラッシュ演算子」に一つだけ
$constref = \186_282.42;
という例がある。
0146デフォルトの名無しさん
2011/11/09(水) 15:52:40.17でもC言語なら説明があるっしょ
文字列はアドレスを値として持つ式だ、とかの
0147143
2011/11/09(水) 16:03:25.19$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() 関数を実行することもできるようになっている。
0148デフォルトの名無しさん
2011/11/09(水) 16:04:04.42「すぐわかるオブジェクト指向Perl」 深沢千尋 2008
http://www.supee.jp/sop/contents.html
2-4 名もないスカラー~無名スカラーリファレンス
のところがそれっぽい
ただ、「スカラー変数のリファレンスはあまり役に立たない 」とズバリ書かれてる
でもその後に無名配列、無名ハッシュ、そして無名関数と続いて、
最後にはクロージャに行きつくはずだから、
無名スカラーのリファレンスは、かならず説明しなきゃーならないモンなんだろう
0149141
2011/11/09(水) 16:25:07.58ありがとうございます。
普段使う分にはあんま意味なさそうですよね。
今回やりたいことは、モジュールの引数が文字列のリファレンスを要求される場合に一発で書きたいと思っていました。
0150デフォルトの名無しさん
2011/11/09(水) 16:34:45.07*PI = \3.14;
print $PI;
$PI = 3; # エラー
0151デフォルトの名無しさん
2011/11/09(水) 16:37:00.27http://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 ...
0152デフォルトの名無しさん
2011/11/09(水) 16:43:53.860153デフォルトの名無しさん
2011/11/09(水) 16:56:53.79my $PI = 3.14;
Internals::SvREADONLY($PI, 1);
0154デフォルトの名無しさん
2011/11/09(水) 19:16:06.960155デフォルトの名無しさん
2011/11/09(水) 19:23:28.500156デフォルトの名無しさん
2011/11/09(水) 20:00:34.56sub HOGEHOGE() { 10; }
0157デフォルトの名無しさん
2011/11/09(水) 21:34:30.76遅くならない?
0158デフォルトの名無しさん
2011/11/09(水) 21:40:42.08コンパイル時に展開されるので速くはなっても遅くはならない。
http://perldoc.jp/docs/perl/5.10.0/perlsub.pod#Constant32Functions
0159デフォルトの名無しさん
2011/11/10(木) 00:12:17.580160デフォルトの名無しさん
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;
0161デフォルトの名無しさん
2011/11/11(金) 12:57:46.22http://search.cpan.org/dist/ExtUtils-Install/lib/ExtUtils/Installed.pm#new
0163デフォルトの名無しさん
2011/11/11(金) 21:37:08.92とやって、$outputの中身を一行ずつ処理したいのですが、どう書けばいいですか?
while (<>) {
一行ずつ処理;
}
みたいな感じです。
0164デフォルトの名無しさん
2011/11/11(金) 22:37:48.75my @output = `/bin/ls -ls`;
これで、配列outputの各要素に1行ずつ格納できる。
それをどう処理するかは、outputの扱い次第。
0165デフォルトの名無しさん
2011/11/11(金) 22:44:29.58while(<>) での <> をダイアモンド演算子と呼ぶ。
普通のファイルハンドラならダイアモンド演算子の部分を
<FH>とか<$fh>などと書けばいいのであるが、
$outputというスカラで受け取ってはどう書くのが分からない……のだとする。
とすれば>>164の言う通り結果を配列で受け取って、
for (@output) {
#処理($_が使える、$.は使えない)
}
のように、forで配列を書いて一行ずつ処理すればいい。
0166デフォルトの名無しさん
2011/11/11(金) 22:51:06.82my @output = `/bin/ls -ls`;
foreach my $temp ( @output ){
# $tempが配列の各要素として扱える。
}
0167デフォルトの名無しさん
2011/11/11(金) 23:30:30.31普通のファイルハンドルみたいに一行ずつメモリに読み込めないのだろうか。
0168デフォルトの名無しさん
2011/11/11(金) 23:40:02.37while (<$fh>) {
print "$. : $_";
}
0169デフォルトの名無しさん
2011/11/11(金) 23:44:03.07thank you for the quick response.
you guys are awesome!
0170デフォルトの名無しさん
2011/11/11(金) 23:57:57.170171デフォルトの名無しさん
2011/11/12(土) 11:49:12.120172デフォルトの名無しさん
2011/11/12(土) 12:30:04.700173デフォルトの名無しさん
2011/11/13(日) 12:38:46.7910秒以内に5回
http://flapi.nicovideo.jp/api/getflv/sm*
にアクセスするようにしたいんだけど
0174デフォルトの名無しさん
2011/11/13(日) 12:57:35.48そうか。
0175デフォルトの名無しさん
2011/11/13(日) 13:04:51.130176デフォルトの名無しさん
2011/11/13(日) 13:35:57.05できたよ。
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*
0177デフォルトの名無しさん
2011/11/14(月) 10:40:12.47say $val; # 0.333333333333333
say $val * 3; # 1
これを1ではなく、0.999999999999999として扱いたい場合どうすればいいでしょうか
0178デフォルトの名無しさん
2011/11/14(月) 10:55:43.44どっかの桁で四捨五入する。
0179デフォルトの名無しさん
2011/11/14(月) 11:32:28.67Math::BigFloat
0180デフォルトの名無しさん
2011/11/14(月) 13:08:33.54my $word = 'フルーツ'; #UTF8
$word = unpack('H*', $word); #$wordは「d5ebfcc4」
$word = pack('H*', $word); #←では$wordが元に戻らない。
とかやってみましたがうまくいかず、そもそもやり方がわかりません。
標準関数のみで実装する方法があれば教えてください。
0181180
2011/11/14(月) 15:56:56.410182デフォルトの名無しさん
2011/11/14(月) 15:58:36.030183デフォルトの名無しさん
2011/11/14(月) 16:05:50.23utf8フラグを外さずに処理したいなら
use Encode;
my $word = unpack('H*', encode('utf8', 'フルーツ'));
# ...
$word = decode('utf8', pack('H*', $word));
とか
0184180
2011/11/14(月) 16:17:56.04ありがとうございます。範囲内に収まってたらOKってことで、解決しました。
あれ、でも自分で書いたのが>>183さんの方法と同じ感じだ
Encode::encode('utf8',$word);でフラグ外れるものと思ってた
0185デフォルトの名無しさん
2011/11/14(月) 16:42:14.09ああ、utf8フラグを外すっていうのを
use utf8;
を使わないって解釈しました
0186デフォルトの名無しさん
2011/11/14(月) 17:06:09.89use 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フラグ無)
0187デフォルトの名無しさん
2011/11/14(月) 20:43:40.86条件に@array eq ""とやってみてもうまくいきません
いい方法があれば教えて下さい
0188デフォルトの名無しさん
2011/11/14(月) 20:49:07.12???
0189デフォルトの名無しさん
2011/11/14(月) 21:20:00.35空の配列(初期化した状態)かどうか判断したいということです
お願いします
0190デフォルトの名無しさん
2011/11/14(月) 21:21:05.330191デフォルトの名無しさん
2011/11/14(月) 22:01:13.50if (@ary) {
}
ってことかな。
ifはスカラーコンテキストだから、要素数が返ってくる。一個も入ってないなら0だからifは偽になる。
0192デフォルトの名無しさん
2011/11/14(月) 23:07:53.46>>190がエスパーな気がした。
0193デフォルトの名無しさん
2011/11/14(月) 23:24:15.59}
0194デフォルトの名無しさん
2011/11/14(月) 23:30:17.720195デフォルトの名無しさん
2011/11/15(火) 02:12:44.48defineというもの自体知らなかった初心者ですのでもう一度基礎から勉強しようと思います
初期化は@array = ();とやってました
>>191
わかりやすい解説ありがとうございます
おかげでやりたいことができました
0196193
2011/11/15(火) 03:25:16.030197デフォルトの名無しさん
2011/11/15(火) 04:46:22.78おまえじゃないw
0198デフォルトの名無しさん
2011/11/17(木) 00:16:29.37次に復帰させると、休止した時点ではまだsleepの残り時間はあったのに、
いきなりsleepから抜けて処理を再開してしまいます
しかも、ログインする前に
休止しても残り時間を保持させる方法はありませんか
0199デフォルトの名無しさん
2011/11/17(木) 13:29:49.80my $fuga = { huga => 'FUGA' };
my $piyo = $fuga;
print $fuga; #$fugaのリファレンスアドレス出力
上記があった場合にリファレンスのアドレスを変えずに追加するには
$fuga->{
0200デフォルトの名無しさん
2011/11/17(木) 13:41:11.55途中で書き込んでしまいました。。
リファレンスのアドレスを変えずに沢山の要素を追加したいです。
�@これではアドレスが変わってしまいます。
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の方法しかないのでしょうか。
0201デフォルトの名無しさん
2011/11/17(木) 13:57:34.33ばらして作り直す方が遅そうだぞ。
0202デフォルトの名無しさん
2011/11/17(木) 14:02:36.01ttp://d.hatena.ne.jp/perlcodesample/20090620/1246679588
0203デフォルトの名無しさん
2011/11/17(木) 14:13:49.79$hoge = {...} は「新しいハッシュリファレンスを作って$hogeに代入」であって、
元の $hoge とは全く別の物を参照してるんだから違うアドレスになって当たり前。
「$hoge の参照先のハッシュに要素を追加する」んなら
%$hoge = (%$hoge, fuga => 'FUGA', piyo => 'PIYO');
とすればいい。
0204デフォルトの名無しさん
2011/11/17(木) 21:22:00.11例えばある文字列にあが含まれるかチェック
いが含まれるかチェック
うが含まれるかチェック
という感じです
0205デフォルトの名無しさん
2011/11/17(木) 21:25:32.340206デフォルトの名無しさん
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)) ;
0207デフォルトの名無しさん
2011/11/17(木) 22:58:37.03ぁあぃいぅうぇえぉおかがきぎくぐけげこごさざしじすずせぜそぞただちぢっつづてでとどなにぬねのはばぱひびぴふぶぷへべぺほぼぽまみむめもゃやゅゆょよらりるれろゎわゐゑをんヴ??
0208デフォルトの名無しさん
2011/11/17(木) 22:59:04.490209デフォルトの名無しさん
2011/11/17(木) 23:50:21.670210デフォルトの名無しさん
2011/11/17(木) 23:53:46.600211デフォルトの名無しさん
2011/11/18(金) 00:06:31.13「whileにも再帰性があるのでしょうか?」
Guruは答えた。
「無」
Newbieはまた問うた。
「あらゆるものに再帰性はあるとされるのに、なぜwhileにはないのでしょうか?」
Guruはまた答えた。
「カウンタ、インクリメントなどの余分があるからだ」
Newbieは更に問うた。
「再帰性があるならなぜwhileはこの姿のままなのでしょうか?」
Guruは更に答えた。
「自他ともに再帰性があることを知りながら、無限を為すが故である」
0212デフォルトの名無しさん
2011/11/18(金) 12:32:50.63wget 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を回避する方法を教えてください。
※スレチガイならお手数ですが誘導お願いします。
0213デフォルトの名無しさん
2011/11/18(金) 12:54:19.57何が原因でテストがこけてるかは知らんが、
そもそもなんでわざわざソースからビルドするのに 5.10.0 なんて古いもん使うの?
0214デフォルトの名無しさん
2011/11/18(金) 21:38:08.78ちゃんとテストされた環境かどうかのほうが
重要だからだろ。
0215デフォルトの名無しさん
2011/11/18(金) 21:45:48.430216デフォルトの名無しさん
2011/11/18(金) 21:51:02.68だからインストールするんだろう?
0217デフォルトの名無しさん
2011/11/18(金) 23:52:58.14のエラー回避の質問になっている件
0218デフォルトの名無しさん
2011/11/19(土) 13:10:04.730219デフォルトの名無しさん
2011/11/19(土) 13:35:46.210220デフォルトの名無しさん
2011/11/19(土) 15:19:40.240221デフォルトの名無しさん
2011/11/19(土) 17:24:20.72以下のように時間を計測しながらsleepさせるとどうなりますかね?
my $sleep_time = 100;
my $end_time = time + $sleep_time;
sleep $end_time - time while $end_time > time;
0222デフォルトの名無しさん
2011/11/19(土) 17:30:13.86スキップして先に進め
test(14,1,"SKIP CGI::url()"); #function.t
test(15,1,"SKIP CGI::url()"); #request.t
0223212
2011/11/22(火) 13:36:21.87改版が終わった安定した偶数バージョンを使いたいと思い5.10に行きつきました。
しかしよく調べると、5.10.1がありましたのでこれを使用することににました。
コメントありがとうございました。
>>219,221
最初SKIPというコマンドがあるのかと思って調べていましたがみあたらず、221で1の所で
判定しているんだということがわかり、SKIP方法が理解できました。
ヒント&具体的な解説まであり助かりました。
遅くなりましたが、お礼&無事インストールできたことを報告しておきます。
0224デフォルトの名無しさん
2011/11/22(火) 18:41:56.60perl -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を調べてみるとマニュアルあたりをさわるのに使うもののようですが、これは読まないようにして良いのでしょうか。
0225sage
2011/11/23(水) 22:56:05.45Perl で DOM Traverse というか、HTML Parse というか、、、
もっというと、
ようは、
$html = &innerHTML($document, "#THE_ID");
みたいなことがやりたいんですが、
何が一番いいでしょうか。
HTML::TreeBuilder/HTML::Parserなど、CPANで
いろいろ探したのですが、jQuery の便利さに慣れた身からすると、
「わざわざサーバのCGIまでつかってこの程度かよ」
というのしかないのですが、、、、。
0226デフォルトの名無しさん
2011/11/23(水) 23:03:52.250227デフォルトの名無しさん
2011/11/23(水) 23:16:44.330228デフォルトの名無しさん
2011/11/23(水) 23:18:32.090229sage
2011/11/24(木) 00:19:09.28うーん、あまりいい解決策がないようですが、、、。
いま候補にあるのは、PHPをコマンドラインで使う、
というなにか違いすぎるやり方です。
どう考えても、それなら Perlだろ、
とおもいますが。
なにか、いい DOM/HTML Parser 教えてください!!!!!!。
0230デフォルトの名無しさん
2011/11/24(木) 00:33:17.31http://search.cpan.org/search?mode=all&query=pQuery
0231デフォルトの名無しさん
2011/11/24(木) 02:02:09.290232デフォルトの名無しさん
2011/11/24(木) 14:36:26.49以下のようなので、barと表示して欲しいのですが、
CODE(0x1955b18)のような表示になります。
関数を配列に格納し、実行することは可能でしょうか?
@func;
push(@func, sub{return "bar";});
print $func[0];
0233デフォルトの名無しさん
2011/11/24(木) 14:41:45.75my @func;
push(@func, sub{return "bar";});
print &{$func[0]};
0234デフォルトの名無しさん
2011/11/24(木) 14:42:15.73print $func[0]();
print &{$func[0]};
0235デフォルトの名無しさん
2011/11/24(木) 14:48:08.38ありがとうございます。
0236sage
2011/11/24(木) 15:13:34.49>>230 は結構よさげかも、、、。
でも、さがしたら 同名(実装はまったく別)のものがPHPにもあり、
さらに、検索するとそのほうが上に来る、というトホホぶり。
いわゆる「スクレイピング」の話しなわけですが、
なにかいい解決策ありませんか? > みなさま。
0237デフォルトの名無しさん
2011/11/24(木) 15:58:17.30xpath使える
0238sage
2011/11/24(木) 16:45:25.42Web::Scraper ・・・これはいい!!!いきなり決定打です。
作っている人も有名な人っぽいですし。
ちなみに、ほかの候補ももしあればぜひ。
0239デフォルトの名無しさん
2011/11/24(木) 22:43:43.220240デフォルトの名無しさん
2011/11/25(金) 09:16:39.32じゃね
0241デフォルトの名無しさん
2011/11/25(金) 10:59:24.230242デフォルトの名無しさん
2011/11/25(金) 13:46:26.11暗号化しないで入力したパスワードをそのまんまhiddenで書き込むページまで持っていくのって
好ましくないんですか?
0243sage
2011/11/25(金) 13:50:03.63こここ、、、これもいいかも、、、。
うーん、どうしよう。
0244デフォルトの名無しさん
2011/11/25(金) 20:46:04.70hoge.pl *
とやったら $#ARGV != 0 になったようです。
(たぶん-1?)
hoge.pl \*
とやったら*を渡したことになりました。
しかしglobのワイルドカードの内容を指定
させたいので、いちいち\*とか利用者に
書かせるのはかっこ悪いですw
0245デフォルトの名無しさん
2011/11/25(金) 20:49:23.52シェルの勉強してこい、な
0246デフォルトの名無しさん
2011/11/25(金) 21:37:41.34hoge.pl "*"
0247デフォルトの名無しさん
2011/11/25(金) 22:09:11.60シェルはコマンドプロンプトです。
0248デフォルトの名無しさん
2011/11/25(金) 22:21:51.380249デフォルトの名無しさん
2011/11/25(金) 23:24:38.630250デフォルトの名無しさん
2011/11/25(金) 23:36:45.410251デフォルトの名無しさん
2011/11/25(金) 23:40:18.15ttp://www.amazon.co.jp/dp/B004UQAAMS/
0252デフォルトの名無しさん
2011/11/25(金) 23:46:27.600253デフォルトの名無しさん
2011/11/26(土) 02:01:06.150254デフォルトの名無しさん
2011/11/26(土) 21:56:33.75�@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を使用しています。
0255デフォルトの名無しさん
2011/11/26(土) 22:11:12.04>>1の一行目を声を出して50回は復唱しろハゲ
0257デフォルトの名無しさん
2011/11/27(日) 16:11:15.29翻訳されるのは2年後?
0258デフォルトの名無しさん
2011/11/27(日) 17:54:15.56http://shop.oreilly.com/product/9780596004927.do
cond 先生が第 3 版の訳をチョチョイと直してすぐ出版、
とはいかないか。
0259デフォルトの名無しさん
2011/11/27(日) 22:59:59.42日本語版も同時発売になるかも知れないよ。少なくともUnicode
については今までより学んでいると思う。たぶん。
0260デフォルトの名無しさん
2011/11/28(月) 01:19:17.89自分がPerlの好きな日本人で良かった。
0261デフォルトの名無しさん
2011/11/28(月) 01:43:14.480262デフォルトの名無しさん
2011/11/28(月) 12:15:15.23open(FILE,'>C:\perl\test.dat');
はおkだけど
open(FILE,'>./test.dat');
はfalse
windows7なんですが相対パスでファイルにアクセスする方法ありますか?
0263デフォルトの名無しさん
2011/11/28(月) 13:00:38.35その場所にファイルを作る権限はあるの?
0264デフォルトの名無しさん
2011/11/28(月) 13:14:49.07Administratorでログオンしてるので問題ないと思ってましたがperlディレクトリに読み取り専用チェック入ってました。
チェック外しても次にプロパティ開くとまたチェック入ってる…orz
perlどうこうってよりwindows7の問題でしょうか
XPの時は相対パスで使えてたんですが
0265デフォルトの名無しさん
2011/11/28(月) 14:18:50.09コマンドラインからCPANと打ち込み起動するプログラムと、
perl -MCPAN で起動するCPANモジュールのシェルって違いはなにかあるのでしょうか?
0266デフォルトの名無しさん
2011/11/28(月) 14:40:22.18絶対パスでファイル作成できてるんだったら権限関係なくね?
0267デフォルトの名無しさん
2011/11/28(月) 17:03:01.15内部実装を直接呼んでるか、
ツールとして整えられたコマンドを使うかの違い。
内部的には、cpanコマンドはCPAN.pmを呼んでる。
あと最近はcpanminusがナウい
0268デフォルトの名無しさん
2011/11/28(月) 19:50:10.04「"0"」は長さ1の文字列だから真になってほしいのです。
$s = "0";
print $s || "X"; # 0 が表示されてほしいのに X が表示される
これってどうすればいいんでしょうか。
0269デフォルトの名無しさん
2011/11/28(月) 19:55:24.55print ($a eq "" ? 'X' : $a);
0270デフォルトの名無しさん
2011/11/28(月) 19:56:20.55print $s ne "" ? $s : "X";
とか
0271デフォルトの名無しさん
2011/11/28(月) 20:02:26.38defined $s 偽 真 真
$s ne "" 警告 偽 真
$s 偽 偽 偽
0272デフォルトの名無しさん
2011/11/28(月) 21:48:44.48length
0273デフォルトの名無しさん
2011/11/28(月) 22:07:13.26Perl歴1年の俺に、
|| の代わりに // を使えばいいって
教えられる気分どう?
0274デフォルトの名無しさん
2011/11/28(月) 22:08:50.40日本語でおk
0275デフォルトの名無しさん
2011/11/28(月) 22:10:52.52>>271
0276デフォルトの名無しさん
2011/11/28(月) 22:11:46.40今時openは3引数にしとけよ。
0277デフォルトの名無しさん
2011/11/28(月) 22:12:12.29最近のモダンなPerlを知らないから、
// のことも知らないんだぜw
ちゃんと勉強しろ。
0278デフォルトの名無しさん
2011/11/28(月) 22:13:33.33へ〜、知らなかった〜って思って、
my $a = 2;
if ($a eq "1" // $a eq "2") {
print "1か2だな";
}else {
print "1でも2でもないな";
}
ってやったら、うまく動かないんですが釣りですかこの野郎
0279デフォルトの名無しさん
2011/11/28(月) 22:13:51.56そうじゃなくて空文字列と 0 を区別する話をしてるんじゃん
0280デフォルトの名無しさん
2011/11/28(月) 22:14:26.63>>268を読め
0281デフォルトの名無しさん
2011/11/28(月) 22:14:50.13気持ちはわかる。
0282デフォルトの名無しさん
2011/11/28(月) 22:19:24.890とか空文字扱いたい時に||じゃ困るってことだろ。
$v = 0;
$v //= 'default';
print "$v\n";
$v ||= 'default?';
print "$v\n";
0283262
2011/11/28(月) 22:58:34.33それこそモダンなperlを知らないのでお見苦しくてすみません。
open(FILE,'>','test.dat'); #こんな感じでしょうか
ググった末に警告レベル下げてUAC無効化しても相対パスだとファイル作成できませんでした。
でもその過程でコマンドプロンプトから実行する分には相対パスでも問題ないことが発覚。
CommandLineInterpreterの問題だろうとあれこれ試した結果、perl5.12.4.exeで開けば
大丈夫であることが分かりました。
よく分からないけど相対パス使えるようになったので良しとします。
スレ汚し失礼しました。
0284デフォルトの名無しさん
2011/11/29(火) 11:47:40.16レスありがとうございます。
気になっていたことがすっきりしました。
cpanminusは後ほど調べてみたいと思います。
ありがとうございました。
0285デフォルトの名無しさん
2011/11/29(火) 13:20:28.86> open(FILE,'>','test.dat'); #こんな感じでしょうか
openの構文、それぞれのパラメータの意味をきちんと調べたのか?
0287デフォルトの名無しさん
2011/11/29(火) 14:37:37.29それじゃ引数は2個だろうが。
なんか…根本的に向いてないね。
知識ではなく、物の考え方がね。
0288262
2011/11/29(火) 14:48:19.01指定することがパスの指定方法に影響するのでしょうか?
win機で簡単なスクリプト組む分には古い知識と今の考え方で
不都合ないので失礼します。
0289デフォルトの名無しさん
2011/11/29(火) 14:55:39.310290デフォルトの名無しさん
2011/11/29(火) 15:41:57.570291デフォルトの名無しさん
2011/11/29(火) 15:46:04.890292デフォルトの名無しさん
2011/11/29(火) 15:46:55.86本人?w
0294デフォルトの名無しさん
2011/11/29(火) 16:59:10.400295デフォルトの名無しさん
2011/11/29(火) 17:00:09.85偽者は却下
0296デフォルトの名無しさん
2011/11/29(火) 21:07:44.70http://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
0297デフォルトの名無しさん
2011/11/29(火) 21:46:39.440298デフォルトの名無しさん
2011/11/29(火) 23:35:04.96ウケ狙ってる感ばりばり
Macつかっちゃって
目立ちたがり屋かな
このしのびの服装したやつは まともだね
マジっぽさが よくわかってる日本を
0299デフォルトの名無しさん
2011/11/29(火) 23:40:49.690300デフォルトの名無しさん
2011/11/30(水) 15:55:26.04よう、びんぼっちゃま。
0301デフォルトの名無しさん
2011/11/30(水) 21:49:15.380302デフォルトの名無しさん
2011/11/30(水) 22:23:05.110303デフォルトの名無しさん
2011/11/30(水) 22:43:11.64あれ?まじで?
俺はいままでモジュールってほとんど使った事なかったけど、
この本見て、こんな便利なモジュールいっぱいあるのかーって関心したけど・・・
でも、便利なモジュール使いまくると、
もうPerlじゃないね、違う言語になる
0304デフォルトの名無しさん
2011/11/30(水) 22:47:28.530305デフォルトの名無しさん
2011/11/30(水) 22:52:09.62同意ですです。
まあ、その人の習熟度に依るんだろうけど。
0306デフォルトの名無しさん
2011/12/01(木) 16:56:08.77@って何の意味だっけ?
0307デフォルトの名無しさん
2011/12/01(木) 16:56:59.770308デフォルトの名無しさん
2011/12/01(木) 19:52:44.92>>306
変数として展開されてしまうからな。
メアドの正規表現ならEmail::Valid使った方がいいかも。
0309デフォルトの名無しさん
2011/12/01(木) 21:32:55.240310デフォルトの名無しさん
2011/12/01(木) 21:59:29.250311デフォルトの名無しさん
2011/12/01(木) 22:34:01.90よくよく読んでみたか?
0312デフォルトの名無しさん
2011/12/01(木) 22:43:21.93俺は多機能テキストフィルタとして使うかな
0313デフォルトの名無しさん
2011/12/01(木) 22:47:31.11まだ1/3くらい
実際に試しながら読んでるし・・・
何?後半で恐ろしい雑な説明になってるとか、
突然フォントのサイズが巨大になって内容が薄くなってるとか?
0314デフォルトの名無しさん
2011/12/01(木) 22:49:35.70著者:あかほりさとる とかかよw
0315デフォルトの名無しさん
2011/12/01(木) 22:51:26.190316デフォルトの名無しさん
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])+$/;
0317デフォルトの名無しさん
2011/12/02(金) 13:26:30.400318316
2011/12/02(金) 14:26:41.44すみません。
文字コードはutf8です。
0319デフォルトの名無しさん
2011/12/02(金) 14:59:25.210320デフォルトの名無しさん
2011/12/02(金) 15:05:56.27(A|B|C)
タイ━━━━||Φ|(|´|Д|`|)|Φ||━━━━ホ!!!
0321日系アメリカ人 ◆japYJPNx6A
2011/12/02(金) 17:14:12.94すべてにおいてカス
音楽+絵+プログラミング+ネットワーク
束ねるゲーム開発者は最強(日本を除く)
0322デフォルトの名無しさん
2011/12/02(金) 17:26:28.19F1レーサー>>>>車の整備士
と、言われてるくらい違和感ある
比べる物が違うだろ・・・
どうせ釣り針垂らすなら・・・
Rubyエンジニア(モダン)>>>>Perlエンジニア(老害)
これくらい大きくないと
0323デフォルトの名無しさん
2011/12/02(金) 17:28:11.00別所でも暴れてる真性だから触るな
0324デフォルトの名無しさん
2011/12/02(金) 17:32:30.86Ruby厨が大抵目つきが逝ってるのは何故だろう?
0326日系アメリカ人 ◆japYJPNx6A
2011/12/02(金) 21:03:43.76アジア顔だな エキゾチック
平面七三分け
0327デフォルトの名無しさん
2011/12/02(金) 22:18:51.65モルモン教disってるのか?
0328デフォルトの名無しさん
2011/12/03(土) 19:23:10.32でもその鳥のおかげであぼーん設定が楽でよろしい。GJ!!
0329デフォルトの名無しさん
2011/12/03(土) 19:41:17.570330デフォルトの名無しさん
2011/12/03(土) 19:53:19.72そういうのについていちいち言及するのをやめるか、せめて対象にアンカー付けてくんない?
NGに一度指定したものは二度と意識しなくて済むようにって連鎖透明あぼーん設定してんだから。
0331日系アメリカ人 ◆japuuq4c3Y
2011/12/03(土) 21:46:16.680332デフォルトの名無しさん
2011/12/04(日) 00:08:21.99了解した。
0333デフォルトの名無しさん
2011/12/04(日) 02:26:52.830334デフォルトの名無しさん
2011/12/04(日) 02:27:09.000335デフォルトの名無しさん
2011/12/04(日) 10:32:02.70p2 通して書き込むプログラムってのは無いの?
0336日系アメリカ人 ◆japYJPNx6A
2011/12/04(日) 10:44:10.25俺の身内はLarryWallだぞ
0337デフォルトの名無しさん
2011/12/04(日) 10:45:38.100338日系アメリカ人 ◆japYJPNx6A
2011/12/04(日) 11:05:32.76ここきて
こいつらがウザい
0339デフォルトの名無しさん
2011/12/04(日) 22:51:18.07use utf8すると途端に面倒臭くなる…。
ほんとにみんな使ってるの?
0340Perl忍者 ◆M5ZWRnXOj6
2011/12/04(日) 23:06:34.46トリップの流出で、偽者が暴れまわってるみたいだが気にしないでくれ。
そうだ、めでたい話があるんだが、俺は今年の夏ごろ、livedoorに入社してな。
WEBの企画に携わってて来れなかった。
本名は伏せておくけど、Perlのことなら聞いてくれ。
ある程度実力ついたんで答えられると思うけど。
0341Perl忍者 ◆M5ZWRnXOj6
2011/12/04(日) 23:07:52.71自宅で仕事。
0342デフォルトの名無しさん
2011/12/04(日) 23:12:27.120343デフォルトの名無しさん
2011/12/04(日) 23:24:41.65バカだからlivedoorなんて入社できるわけないだろ。
0344デフォルトの名無しさん
2011/12/04(日) 23:28:18.680345デフォルトの名無しさん
2011/12/04(日) 23:58:54.660346デフォルトの名無しさん
2011/12/05(月) 00:19:34.35モダンPerlはuse utf8が必須とか書いてたからびびったわw
元からこんな面倒臭い言語だったなら絶対すぐ投げ捨ててるし。
0347デフォルトの名無しさん
2011/12/05(月) 01:13:13.65実装してしまったのです。まさかこんなに使いづらいものに
なるとは予想できなかったのです。
0348デフォルトの名無しさん
2011/12/05(月) 03:47:58.75もともとマルチバイト文字列自体が厄介な性質を持つ代物なんだからある程度は仕方ない。
思いつきだったらPHPの方がよっぽど全般にわたって思いつきの実装だらけだし。
まあ次元の違うものを比べてもなんだけど。
0349335
2011/12/05(月) 05:01:03.99・・・
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/");
・・・
この部分をどう変えたらいいんだろう
風も拗らせたししんどい
0350デフォルトの名無しさん
2011/12/05(月) 09:51:58.66kwsk
今もソースコードをEUC-JPやらSJISで書き起こしてるの?
0351デフォルトの名無しさん
2011/12/05(月) 10:11:48.59あほくさいですね
よく使えますね
タイムイーター言語ですよPerlは
0352デフォルトの名無しさん
2011/12/05(月) 10:15:35.160353デフォルトの名無しさん
2011/12/05(月) 10:21:36.470354デフォルトの名無しさん
2011/12/05(月) 10:59:33.20Sample->new('$file_name');
上記のようなモジュールを作っています。
これを引数も入れてクラス継承?(下記)で書くにはどのようにすればよいのでしょうか?
use base qw/Sample/;
私が知っている知識だけで書くと、Sampleモジュールにsetサブルーチンを書いて
セットする方法くらいしか思いつきませんが、ダサすぎます。
ちゃんと引数を渡せる書き方があるのではないかと思っているのですが。
use base qw/Sample/;
$sample = set('$file_name'); #1アクション増えてダサい
0355デフォルトの名無しさん
2011/12/05(月) 11:31:51.85それともそれとは別?
0356デフォルトの名無しさん
2011/12/05(月) 11:53:01.81文字コードがめんどくさくない言語処理系があるの?
あるなら教えて。後学のために是非。
そういえばjperlでShift JISのみを扱っていた時代は考えることが少なくて多少はラクだったかな。
でもいまどき文字コード変換は避けて通れないからねえ。Shift JIS決め打ちでは済まないわな。
0357日系アメリカ人 ◆japYJPNx6A
2011/12/05(月) 12:08:54.60かわいそうだね
0359デフォルトの名無しさん
2011/12/05(月) 17:21:27.37量指定子を付けるのに、対象を()で囲んでいるのですが、
$1に入れたり戻り値に含めたくない場合はどうすればいいのでしょう?
sにgオプションを付けて置換した対象のリストを得たいのです。
置換後の文字列に元の文字列がそのまま含まれているので、g外してwhileに入れると無限ループになります。
0361354
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]
}
続きます↓
0362354
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} );
}
続きます↓
0363354
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]に入れたらいいというのは無しでお願いします。
※この方法は素人の思いつきなので、他にスマートな方法があればそれを教えてください。
ここまで
0364デフォルトの名無しさん
2011/12/05(月) 19:57:28.22うん。
Webアプリとか書いてる人ならともかく
俺はシェルスクリプト的な使い方しかしてないし
システムの文字コードで書いておけば十分事足りる。
use utf8すればダメ文字の入ったファイルパスも直接指定できるのかと思ったら
ダメなままだし,俺にとっては利用価値を見いだせなかった。
0365デフォルトの名無しさん
2011/12/05(月) 21:50:18.68Perl使ったんじゃないのか?w
シェルスクリプトで全部やればいいと思うんだが。
0366デフォルトの名無しさん
2011/12/05(月) 21:59:36.69既存のプログラムを順番に実行する+αくらいならともかく、
それ以上のことをするならPerlで書くかなあ。
0367デフォルトの名無しさん
2011/12/05(月) 22:10:29.67utf8フラグとい名前がまずかったね。
文字列フラグなどという名前だったらよかった。
文字列フラグはPerl固有のものだから
Perlコード外部から渡されるのは文字列ではない。
文字列でなかったらなにか?それはバイナリ。
バイナリを文字として扱いたければ、文字に変換しないといけない。
それがdecode。
ではソースコードに書いてあるのは、文字かバイナリか。
それはuse utf8を使えば文字で、そうでない場合はバイナリ。
話はこれだけ。
0368デフォルトの名無しさん
2011/12/05(月) 22:16:43.71ときと立たないときとがあるの?フラグが立っているかどうかと
文字列なのかどうかは一致しないと思うければ。
0369デフォルトの名無しさん
2011/12/05(月) 22:18:19.92ダメ文字と言っているからActivePerlの事だと思うけど
それはPerlの問題じゃなくてAPIの呼び出しにA系を使っているのが原因
W系を使って呼び出せば問題ない
0370デフォルトの名無しさん
2011/12/05(月) 22:23:25.19あなたの文字列の定義とは?
人間が文字と思っているから文字なんだ。ではだめ。
そんな曖昧な定義はコンピュータは理解出来ない。
0371デフォルトの名無しさん
2011/12/05(月) 22:23:26.550372デフォルトの名無しさん
2011/12/05(月) 22:26:02.460373デフォルトの名無しさん
2011/12/05(月) 22:47:42.460374デフォルトの名無しさん
2011/12/05(月) 23:01:56.04Perlの利用価値はずっと前から見いだしてるから使ってるけど
use utf8の利用価値は見いだせなかったということねw
>>369
うんうん。
use utf8はAPIもW系に切り替えてくれる万能薬なのかと想像してたら
全然違ったという;;
W系を呼び出せば問題ないってのは呼び出す方法があるの?
ダメ文字入ったファイル名の件はすっかり諦めてて
普段はワイルドカードで切り抜けてるけど
W系を呼び出す方法があるなら知りたい!
0375デフォルトの名無しさん
2011/12/05(月) 23:14:22.190376デフォルトの名無しさん
2011/12/05(月) 23:16:05.100377デフォルトの名無しさん
2011/12/05(月) 23:20:25.06当然のように思ってたら何もなかったのでブチキレた
二度とuse utf8は使わないと心に誓った
0378デフォルトの名無しさん
2011/12/05(月) 23:25:44.00知らないわけね。
ドキュメントちゃんと読んだ?
0379デフォルトの名無しさん
2011/12/05(月) 23:26:39.02読んでいたらuse utf8を何もかも解決してくれる
万能なおまじないだとか勘違いするわけがない。
0380デフォルトの名無しさん
2011/12/05(月) 23:28:44.68use utf8がどんな機能を持っているのか
ドキュメント読んで、ここに書いてみ。
単純にお前らが、ドキュメント読んでないだけってのが
よくわかるからさ。
0381日系アメリカ人 ◆japYJPNx6A
2011/12/05(月) 23:43:36.07なんだろうこの感じ
アホくさい知ったか君
ばかばかしいね見てて
自分もPerlやってるけど
ここまで354さんの質問無視して
エンコード語りしてるやつ気持ち悪いね
覚えた手かな
0382日系アメリカ人 ◆japYJPNx6A
2011/12/05(月) 23:44:20.72君の
うんちく
話す場所じゃないから
帰れ
0383デフォルトの名無しさん
2011/12/05(月) 23:46:14.780384デフォルトの名無しさん
2011/12/05(月) 23:58:05.480385デフォルトの名無しさん
2011/12/06(火) 00:03:56.60まぁ人それぞれだと思うけど,俺はとりあえず先に手を動かしてみるたちなんで。
だいたいのものは予想してた通りに動いてくれるし
あれ想像してたのと違うぞ?となったらそこで詳しく調べればいい。
「Unicodeで書くことを宣言してるんだから当然APIもUnicode版を呼び出してくれるんだろう…」
と事前に予想するのはごく自然なことだと思うけどなぁ。
>>380
面倒臭そうな奴だなぁ。
キミはこんなとこで粋がることに何かしらの価値を見いだしてるのかw
0386日系アメリカ人 ◆japYJPNx6A
2011/12/06(火) 00:04:38.65テストステロン
って知ってるかね?
>>筋力トレーニングや不安定な興奮(例えば闘争や浮気など)によってテストステロンの分泌が促される。
男はテストステロンの量が多いんだよ
ね?
だったらわかるでしょ?
男は
勝ち負けこだわる それが本来人間の男の姿
君はもやしだから わからないだろうけど
0387日系アメリカ人 ◆japYJPNx6A
2011/12/06(火) 00:06:35.370388デフォルトの名無しさん
2011/12/06(火) 00:12:43.09☓自然
◯願望
〜できるって勝手に(先に手を動かすw)思い込んどいて、自然だと思うけどなぁだってさw
0389デフォルトの名無しさん
2011/12/06(火) 00:19:35.80> 「Unicodeで書くことを宣言してるんだから当然APIもUnicode版を呼び出してくれるんだろう…」
> と事前に予想するのはごく自然なことだと思うけどなぁ。
で予想が外れてマニュアルも見ずに
ワーワー騒いでいるわけ?
いいからマニュアル読んでこい。
0390デフォルトの名無しさん
2011/12/06(火) 00:24:00.01そんな宣言をお前はしてない。
お前が宣言したのは、ソースコードのリテラル文字列に
UTF8フラグを立てると宣言しただけだ。
初心者脱出したと思ってる初心者にありがちだ。
マニュアルを読まずにかってに思い込む奴。
馬鹿だお前は。
0391日系アメリカ人 ◆japYJPNx6A
2011/12/06(火) 00:24:49.64教えてください
もやっとしてます
0392日系アメリカ人 ◆japYJPNx6A
2011/12/06(火) 00:25:25.67どうか
教えて
ください
W系 A系
夜が眠れません
0393Perl忍者 ◆M5ZWRnXOj6
2011/12/06(火) 00:31:49.230394デフォルトの名無しさん
2011/12/06(火) 00:35:06.000395デフォルトの名無しさん
2011/12/06(火) 00:39:23.43かなが50字だとすると、俳句は五、七、五で文字の並びは 50**(5+7+5) の
組合せがある。これはちゃんと上限があって、(数学的に)数え上げることが
できる。ただし、かなりの割合で意味をもたない文字の並びになっている。
意味をもつ並びは少ないと予想できる。
それでは、一体、いくつの並びが意味をもつと言えるのか?
デジタルデータは全て、広義のバイナリデータだといえる。その中にはテキス
トデータを意図するものを含んでいるだろうし、あるいは意図はせずともテキ
ストデータのように見えるものがあるかもしれない。
広義のバイナリデータのうち、テキストデータを含めないものを狭義のバイナリ
データとすると、狭義のバイナリデータとテキストデータの違いは何なのだろ
うか?
その違いは数学的に定義できるのだろうか?おそらくできないと思う。
0396デフォルトの名無しさん
2011/12/06(火) 00:41:21.71質問の答えはまだかい?
0397デフォルトの名無しさん
2011/12/06(火) 00:49:20.56つまり、コンピュータは(その定義を)理解出来ない。
0398デフォルトの名無しさん
2011/12/06(火) 00:53:43.69何がキミの琴線に触れたのか知らんがとりあえずもちつけ。
>>389
最初に予想が外れてることに気づいた時点で目を通したよ。
そしてがっかりしたわけだ。
>>390
コードの中のすべてのリテラル文字にフラグを立てるなら
それはコードそのものがutf8で書かれているのと同義と見ていいだろう。
実際utf8でコードを書くときしかuse utf8は推奨されてないのだから。
(ASCII文字だけが並んだリテラルにはフラグ立ちませんからw みたいなツッコミはやめてね。)
>>391
WindowsのAPIの話だよ。
同じAPIでも末尾がAのとWのとあるでしょ。
0399デフォルトの名無しさん
2011/12/06(火) 00:59:40.03ということだ。
0400デフォルトの名無しさん
2011/12/06(火) 01:01:24.700401デフォルトの名無しさん
2011/12/06(火) 01:14:09.08(?: )ってことかな?
それと、やりたいことって、文字列の削りだしなんかな。
0402デフォルトの名無しさん
2011/12/06(火) 01:32:22.60両方のハッシュリファレンスを得たいって、path_homeとpath_tmpを別個に呼び出せばいいのではとも思うし、でもそれは望んでる答えではないだろうし、
前の質問の、引数を渡したいって動機もよくわからない。
package Sample2;
use base Sample;
Sample2->new("$file_name")
っというのだとダメ?
0403デフォルトの名無しさん
2011/12/06(火) 09:02:58.85完全じゃないけど Win32::Unicode とか
俺は WIN32::API を使って自分で書いているけど
0404デフォルトの名無しさん
2011/12/06(火) 09:07:51.20記号を検索する方法が分からないのですが、条件演算子としての三項演算子です?
削り出しと置換を同時に行えないかなと思いまして。
その対象の中に、()付きの量指定子が含まれるのです。
s/((文字列)量指定子 文字列)/文字列$1文字列/g;こんな感じの時に、外側の()でマッチした一覧だけを取り出したい場合はどうすればいいのでしょう。
0405デフォルトの名無しさん
2011/12/06(火) 09:53:31.73my $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);
}
0406354
2011/12/06(火) 14:28:58.62分かりずらい説明に反応くださりありがとうございます。
405のコードと下記URLを調べながら、SUPERを何とか理解し解決できました。
ttp://d.hatena.ne.jp/nana21/20050628/p1
ttp://cast-a-spell.at.webry.info/200708/article_18.html
以上、ご報告でした。
ありがとうございます。
0407デフォルトの名無しさん
2011/12/06(火) 14:43:06.36別の問題が出てきました。
下記を実行すると�@の箇所で以下のようなエラーが出ました。
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);
}
0408デフォルトの名無しさん
2011/12/06(火) 14:47:24.62perlre
0409デフォルトの名無しさん
2011/12/06(火) 15:39:36.140410デフォルトの名無しさん
2011/12/06(火) 15:51:56.98バイト順修飾子について調べるといいぞ。
ttp://perldoc.jp/docs/perl/5.10.0/perlpacktut.pod#Byte-order32modifiers
0411デフォルトの名無しさん
2011/12/06(火) 15:52:27.39ttp://perldoc.jp/docs/perl/5.10.0/perlpacktut.pod#Byte-order32modifiers
unpack("i>", ...) てのがある。自分も今知ったw
0412デフォルトの名無しさん
2011/12/06(火) 15:53:01.74把握
ありがとうございます
0413デフォルトの名無しさん
2011/12/06(火) 15:54:33.57>>411は無視で
0414デフォルトの名無しさん
2011/12/06(火) 16:09:39.07そんなのあったっけと思ったら5.9.2からか。
perl勉強したのだいぶ前だからなぁ。たまにはリフレッシュしないと
だめだな。
0415デフォルトの名無しさん
2011/12/06(火) 16:25:43.45レスありがとうございます。確認してみます。
0416デフォルトの名無しさん
2011/12/06(火) 16:26:41.05my @cap = $txt =~ s/(〜)/〜/g;
で、置換回数しか受け取れないみたいです。
置換無しならうまくいくのですが。
0417デフォルトの名無しさん
2011/12/06(火) 16:48:18.61perlre
0418デフォルトの名無しさん
2011/12/06(火) 21:01:13.390419デフォルトの名無しさん
2011/12/06(火) 22:45:37.74e使って適当に保存するコード書けばいいんじゃね?
s/(〜)/push @cap, $1; 〜/ge
0420407
2011/12/06(火) 22:50:06.45複数改行でのマッチ?とエスパーしてみた。
$txt =~ s/\A(〜)\z/〜/xmsg;
誰か >>407 わかる方いませんか?
0421デフォルトの名無しさん
2011/12/06(火) 23:06:50.64Encode::encode はオブジェクトのメソッドとして呼び出すようにできてないから。
0422デフォルトの名無しさん
2011/12/07(水) 03:45:17.74(?: hoge)はグループ化するだけで、後方参照用に記憶させない
0423デフォルトの名無しさん
2011/12/07(水) 08:58:46.12その通りです、ありがとうございます。
perlreではやり方が見あたらなかったので助かりました。
0424デフォルトの名無しさん
2011/12/07(水) 12:43:07.90$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") };
}
0425デフォルトの名無しさん
2011/12/08(木) 04:12:23.330010000001
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でできるんですが、
複数になるとどうすればいいですか
0426デフォルトの名無しさん
2011/12/08(木) 04:53:08.27とか
0427デフォルトの名無しさん
2011/12/08(木) 06:03:09.60ttp://shokai.org/blog/archives/1280にある
googleカレンダーの予定を取得するプログラムを実行したいのですが
実行しても
403 Forbidden at /usr/local/share/perl/5.10.1/Net/Google/Calendar.pm line 619.
エラーが出て予定を取得できません.パケットが流れているのでうまくSSL通信できていないのだろうと思うのですが
原因としてどういったものが考えられるでしょうか?
0428デフォルトの名無しさん
2011/12/08(木) 06:40:54.49取ってくるだけなら限定公開URLを使えばloginせずに取れる
0429407
2011/12/08(木) 15:43:33.52やっと理由が分かりました。
$hogefuga->encode()で呼び出すということは、第一要素にオブジェクトが入りますね。
encode()で呼ぶ場合はそれが無い。
スコーンと忘れてました。
たまに自分で作ったパッケージでも同じとこで間違えることがあります。
詳しい説明のおかげで理解することができました。
遅くなりましたが、お礼を申し上げます。
ありがとうございました。
0430デフォルトの名無しさん
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を呼ぶ前に毎回行った方が良いのでしょうか?
こういった場合はどういう書き方が最適なのでしょう?
0431デフォルトの名無しさん
2011/12/08(木) 16:57:27.74>&kakouを呼ぶ前に毎回行った方が良い
そりゃ、サブプロ行く前に判断した方が早い。
他にはリファレンスを渡す。
0432デフォルトの名無しさん
2011/12/08(木) 17:07:50.26ありがとうございます。
Perl側で何か上手くやってくれてるのならこの書き方でも問題ないかと思ったんですが、毎回まじめにメモリ確保して代入処理してくれてるってことでしょうか?
ところで、リファレンス渡しの場合は、明示的にリファレンスを渡すのと、$_[0]を直接編集するのではどちらの書き方が一般的なんでしょうか?
0433デフォルトの名無しさん
2011/12/08(木) 18:20:21.65つっても>>430じゃサブルーチンの戻り値がその文字列だから結局コピーは不可避だけど。
処理するしないにかかわらずコピーを避けるなら、
kakou(\$dat, $in);
sub kakou {
my($dat_ref, $in) = @_;
return unless $in;
# $$dat_ref に直接ほげほげする
}
0434デフォルトの名無しさん
2011/12/08(木) 21:17:51.75http://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 に比べたら全く大したことねーな。大口叩く愚か者が。
コメントの一覧
「みんなおもしろいおもしろいいってるけど北畠さん完全にかわいそうな精神病の患者ですよね」
「コメント欄が病的で怖い。人格が分裂してる?」
「本当に何がしたかったんだろう・・・」
「無事取り消されたそうで。本当によかった。」
0435デフォルトの名無しさん
2011/12/08(木) 21:51:24.480436デフォルトの名無しさん
2011/12/08(木) 22:10:36.86全くの初心者で、本の見ながらサンプルを打ち込んで確認しているんですけど、はてな?で教えて下さい。
↓
$n ='9';
if ($n =~ /^[[:alpha:]]/) {
print "$n はアルファベットです\n";
} elsif ($n = ~ /^[[:digit:]]/) {
print "$nは数値です\n";
} else {
print "$n はアルファベットでも数値でもありません\n";
}
↑
で
コマンドプロンプトで
perl test.pl
ってやると
9は数値です
って表示されるはずが、
4294967295は数値です
とかって表示されてしまいます。
なんで????
0437デフォルトの名無しさん
2011/12/08(木) 22:14:18.660438デフォルトの名無しさん
2011/12/08(木) 22:14:23.67離すな危険
0439デフォルトの名無しさん
2011/12/08(木) 22:18:55.33へぇぇ、、、びっくりです。
>>438
ありがとうございます。
0440437
2011/12/08(木) 23:13:22.620441デフォルトの名無しさん
2011/12/09(金) 06:48:18.18逆に 何故離れていてもいいと思ったのか知りたい
0442デフォルトの名無しさん
2011/12/09(金) 09:18:19.54ありがとうございます。
kakou($dat, $in);
sub kakou {
my $in = $_[1];
return unless $in;
# $_[0] に直接ほげほげするか、my $dat_ref = \$_[0];するか
}
この方法でもコピーを避けれるかと思うのですが、
呼び出し側で\付けてリファレンスを渡してやる方が一般的なんでしょうか?
0443デフォルトの名無しさん
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;は入れています。
0444デフォルトの名無しさん
2011/12/09(金) 10:42:31.33この値をどっからどうやって取ってきたかが問題なんじゃないの?
0445デフォルトの名無しさん
2011/12/09(金) 10:49:44.91それでも同じではあるけど、っていうか>>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}" になるのだが、普通そんなことはするべきではない。)
0447デフォルトの名無しさん
2011/12/09(金) 18:05:22.33簡単らしいんですが初心者なんで解りませんorz
よろしくお願いします。
0448デフォルトの名無しさん
2011/12/09(金) 18:10:12.09掲示板へアクセスしてログを取得
↓
ログの中から必要なコメントだけを抜き出し
↓
ファイルへ出力
↓
出力したファイルを見る事なく数年過ぎる
↓
「なんだこれ?あぁこんなの作ったっけイラネ」
↓
結果:無駄
0449デフォルトの名無しさん
2011/12/09(金) 18:56:11.72どう、っつーても掲示板次第だと思うぞ
ブラウザ右クリしてソースの表示して法則をみつけるよろし
0450デフォルトの名無しさん
2011/12/10(土) 16:52:21.99$_ を対象として /^[[:digit:]]/ をマッチさせた結果の
1の補数を $n に代入するだなんて、これっぽっちも思い
つかなかったんで。
0451デフォルトの名無しさん
2011/12/10(土) 19:14:45.10くっつけて書けって本には書いてなかったもんで
0452デフォルトの名無しさん
2011/12/10(土) 19:27:28.230453デフォルトの名無しさん
2011/12/10(土) 20:20:27.290454デフォルトの名無しさん
2011/12/10(土) 21:19:54.36~ はビット否定演算子
=~ はパターン結合演算子
これらが書かれていない本は捨てて、新しい本を
買ってこい。この先何があるか分かったもんじゃ
ないぞ。
0455デフォルトの名無しさん
2011/12/10(土) 21:32:15.65え?まさか「= ~ と書いてもいい」とか載ってないよね??
0456デフォルトの名無しさん
2011/12/10(土) 21:39:52.360457デフォルトの名無しさん
2011/12/10(土) 21:50:09.75perl-e 'print "hello!\n";'は上手くいくのですが、hello.plというファイルを作った時は
では上手くいきません、良ければご教授下さい
0458デフォルトの名無しさん
2011/12/10(土) 21:56:30.130459デフォルトの名無しさん
2011/12/10(土) 21:58:29.15#!/cygwin/bin/perl
print "Hello, World";
とかいろいろサイトみて試してみたんですが、よくわからなくて
0460デフォルトの名無しさん
2011/12/10(土) 22:04:55.520461デフォルトの名無しさん
2011/12/10(土) 22:08:58.63Can't open perl script "hello.pl": No such file or directory
と出ます。
0462デフォルトの名無しさん
2011/12/10(土) 22:12:05.47まあ、
a=b+1;
でも
a = b + 1 ;
でも通るから、スペースは無視されるとでも思ったんじゃね?
0463デフォルトの名無しさん
2011/12/10(土) 22:14:09.15ファイル hello.pl がカレントディレクトリにない。
(たぶんデスクトップ上にある)
0464デフォルトの名無しさん
2011/12/10(土) 22:21:40.65そうです!ありがとうございます
cygwin\binに移しました。
-bash: perl: command not found
とでました・・・
0465デフォルトの名無しさん
2011/12/10(土) 22:24:58.760466デフォルトの名無しさん
2011/12/10(土) 23:05:30.27調べてもう一度戻ってきてください。
0467デフォルトの名無しさん
2011/12/10(土) 23:36:47.090468デフォルトの名無しさん
2011/12/10(土) 23:46:33.910469デフォルトの名無しさん
2011/12/10(土) 23:50:09.61cygwin上で動かすんだったらshebangは
#!/cygwin/bin/perl
じゃなくて
#!/usr/bin/perl
だろう。
cygwinを普通にインストールしてたら、
cygwin上から /cygwin にアクセスしようとしてもできない筈だぞ。
0470デフォルトの名無しさん
2011/12/12(月) 03:27:59.67テストが失敗した場合、どのテストが失敗したかを知るにはどうしたらいいですか。
試してみたところ、何番目のテストが失敗したかが表示されるだけで、すごくわかりづらいです。
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
テスト番号ではなく、ファイル名と行番号が表示されるようにしたいのですが、どうしたらいいでしょうか。
よろしくお願いします。
0471デフォルトの名無しさん
2011/12/12(月) 03:44:28.32すみません、勘違いでした。
Test::Moreだと行番号がきちんと表示されるのですが、自作のツールだと表示されないようです。
もうちょっと調べてみます。
0472デフォルトの名無しさん
2011/12/12(月) 04:04:12.86use 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.
続く
0473デフォルトの名無しさん
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
続く
0474デフォルトの名無しさん
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()がなんか特殊なことをしているのだとおもいますが、
どんなことをしているのかは分かりません。
だれか知っている人がいたらおしえてください。
0475443
2011/12/12(月) 15:14:39.81遅くなりました。
"\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}"
}
];
0476475
2011/12/12(月) 15:23:39.91>>475
は、少し意味が違いますね。
よく見たらUTF8フラグがついている。↓
"\x{30ad}\x{30fc}\x{30ef}\x{30fc}\x{30c9}"
YAMLでロードすると、内部コードに変換して取り込むんですね。
そのせいで""ダブルコーテーションになってそうな気がしますが、合っていますでしょうか?
これだとインポートした文字列を出力したい時に、
ファイル→インポート(内部文字コード変換)→出力(encode)
と、無駄な変換が発生している気がしますが、そんなに負荷はないのでしょうか?
0477デフォルトの名無しさん
2011/12/12(月) 20:28:05.880478デフォルトの名無しさん
2011/12/13(火) 04:23:56.80Data::Dumper には U+0080 以上の文字を問答無用で16進表記してしまうという問題が
あるので、日本語をまともに出したい場合は
sub Data::Dumper::qquote { local $_ = shift; s/['\\]/\\$&/g; "'$_'"}
と書いておく(ただしこれだと Useqq=1 が動かなくなる欠点あり)。
0479デフォルトの名無しさん
2011/12/13(火) 05:07:52.02自分でファイルをまるごと読んで、その内容を read_string に渡せば
問題なくなるはず。
use Config::Tiny;
sub rd($) { local $/ = undef; open(my $f, '<:utf8', shift); <$f> }
my $cfg = Config::Tiny->read_string(rd('foo.cfg'));
0480デフォルトの名無しさん
2011/12/13(火) 05:28:38.49>「#」で始まる行が表示されません。
>>472 「#」ではじまる行は STDERR に出力されてるようだけど、そういうことじゃなくて?
0481デフォルトの名無しさん
2011/12/13(火) 07:45:42.65$Data::Dumper::Useperl = 1;
これが必要なのを忘れてた。
0482デフォルトの名無しさん
2011/12/13(火) 17:29:10.64UNIXタイムスタンプを得る方法を教えてください。
こんな事にモジュールは使いたくないので、計算で出したいです。
どっかのブログに書いてあった計算式では正しい結果が得られませんでした。
0483デフォルトの名無しさん
2011/12/13(火) 17:56:46.195.005のお守ですか?
ご愁傷様です
0484デフォルトの名無しさん
2011/12/13(火) 17:57:15.070485デフォルトの名無しさん
2011/12/13(火) 18:07:39.19だからCPANは使いたくないんだってば
0486デフォルトの名無しさん
2011/12/13(火) 18:25:15.39use することすら嫌なら「どっかのブログ」じゃなくて Time::Local の中身でも「見てきやがれ」としか。
0487デフォルトの名無しさん
2011/12/13(火) 19:01:13.930488デフォルトの名無しさん
2011/12/13(火) 21:10:59.26使えないんだろ?
0489デフォルトの名無しさん
2011/12/13(火) 21:24:06.470490デフォルトの名無しさん
2011/12/14(水) 05:36:55.02CPAN使えない(使いたくない)奴がこの程度のことをモジュール使わんと自力で書けずに
2chなんぞに質問ぶっぱなしてる時点でオワってるとわたくしは思います。
素直にモジュール使え。
0491デフォルトの名無しさん
2011/12/14(水) 12:01:25.68>>484
ありがとうございました。
Time::Localごちゃごちゃしてて読む気なかったんですが、参考にして自分で実装しました。
しかし某ブログの計算式は何だったんだろう。
Perl用ではなかったんだけど、intくらいしか関数使ってなかったし。
本来は条件分岐とか一切なしに1行の計算だけで出せるものなんですか?
0492デフォルトの名無しさん
2011/12/14(水) 14:33:57.55Markdown 記法の説明は http://blog.2310.net/archives/6 にありますが、
改行後に文字が続くと<p>でくくります。たとえば
テストですよ、
どうですか
この文字列はつぎのように展開されます。
<p>テストですよ、
どうですか</p>
英文ならこれでも体裁は良いのですが、html上日本語の文の場合いらない空白が出てきてしまいます
<p>テストですよ、どうですか</p>
このように改行直前の文字がマルチバイト文字(非ascii文字)なら
改行を取り除いて<p>でくくりたいのですがどう改変すればいいのでしょうか
markdown.plのsub Markdownがその改変すべき処理なのかと思ったのですが
どこから手をつければよいのかわかりません
0493デフォルトの名無しさん
2011/12/14(水) 15:25:07.60> 本来は条件分岐とか一切なしに1行の計算だけで出せるものなんですか?
“某ブログ”に、考え方から計算式の導き方まで懇切丁寧に書いてある。
0494デフォルトの名無しさん
2011/12/14(水) 15:40:57.70でもその肝心の計算式がそれっぽい数字は出るものの結果が合わないです。
計算過程は長すぎて、そこからあるかどうかもわからない間違い探しをするのも手間なので、結論を知ってる方が教えてくだされば早いのですが。
普通はTime::Localで済むので、わざわざ自分で何とかした方はいないですかね。
0495デフォルトの名無しさん
2011/12/14(水) 16:47:26.27あんまりPerlと関係ないような気がするし、某ブログとやらも知らないけれど、
int を使ってるということだから、プログラミングの初歩で習うゼラーの公式と
同じ考え方を使うんじゃないの?
0496デフォルトの名無しさん
2011/12/14(水) 17:03:34.86そんなことより、なぜTime::Localを使わず自分で実装したがるのかを知りたい。
Perlはインタプリタ言語だからライブラリをincludeすると重くなる?浅はか。
勝手にバージョンが変わって動かなくなるのが心配?そんな環境ならそもそもPerlを使うのが愚。
0497デフォルトの名無しさん
2011/12/14(水) 23:34:53.99下手だから無駄なことしてるんだよ。
0498デフォルトの名無しさん
2011/12/15(木) 00:08:58.13ここで聞くまでもなく「UNIXタイムスタンプ」を(ブログ
なんかじゃなくて、ちゃんと)調べれば自然にできると
思うけどな。
0499デフォルトの名無しさん
2011/12/15(木) 16:19:24.70そういうことでしたか。ありがとうございます。
0500デフォルトの名無しさん
2011/12/16(金) 23:32:27.42プログラムも録にしたことないからこれがperl独特の文字化けなのかわからんちん。
ついでに出来れば'<small>晴れ</small></td>'と'<small><font color="#999999">晴れ</font></small></td>'のパターンの中の天気の文字列を取ってくる正規表現ください。
#! /usr/bin/perl
$string = '<small><font color="#999999">晴れ</font></small></td>';
$pattern = ">[^<](.+)[^>]</";
if ($string =~ /$pattern/) {
print '$1は、', $1, "です", "\n";
}
0501デフォルトの名無しさん
2011/12/16(金) 23:40:35.58use utf8
0502デフォルトの名無しさん
2011/12/16(金) 23:53:40.30・・・と、適当な事いっちゃったけど、
$pattern = ">([^<].+[^>])</";
こうだな。
0503デフォルトの名無しさん
2011/12/17(土) 00:11:11.75Genius has come! ありがとうございます。
$pattern = '<small>(?:<font[^>]*>)*(.+)(?:</font>|</small>)';
ここまで作ってみたけどgreedy match使うと後ろの方に引っかかっちゃうよ系の罠に引っかかってた。
0504デフォルトの名無しさん
2011/12/17(土) 01:12:02.76print "\$2は、$2です\n";
0505デフォルトの名無しさん
2011/12/17(土) 01:14:32.09天才は米を持っている。
0506デフォルトの名無しさん
2011/12/17(土) 08:19:09.35コマンドプロンプトからPerlのプログラムを実行したいのですが
systemに日本語のファイル名を渡すと正常に処理できません。
どうすればsystemで日本語のファイルを処理できますか?
system "dir 日本語.txt";
を実行すると
「ファイルが見つかりません」となりますが
コマンドプロンプトで
dir 日本語.txt
と打つとファイルの情報が表示されます。
0507デフォルトの名無しさん
2011/12/17(土) 08:38:01.84>>7
0508デフォルトの名無しさん
2011/12/17(土) 10:07:43.74いまから >>7 をするよりは...
----------
use Sjis; # ←これ追加するだけ!!
system "dir 一覧表.txt";
----------
参考
ttp://text.world.coocan.jp/TSNET/?Sjis.pm
0509デフォルトの名無しさん
2011/12/17(土) 10:45:25.45use open qw(:encoding(cp932) :std);
一個で済むんじゃないの?
0510デフォルトの名無しさん
2011/12/17(土) 11:41:24.040511デフォルトの名無しさん
2011/12/17(土) 11:45:35.17日本のゲーム業界を盛り上げましょう
「小島秀夫応援振興協議会」
http://toro.2ch.net/test/read.cgi/gamedev/1324089321/
0512デフォルトの名無しさん
2011/12/17(土) 12:26:51.28# さまざまな機能をわかった上でどうしても,という方を留め立てする
# つもりはありませんが,>>7 でできることのほとんどはもう
use Sjis;
require 'jacode.pl';
# に含まれてるかもです。
# いまさら >>7 を使わずに,いなばの道を行くしかありません。
0513デフォルトの名無しさん
2011/12/17(土) 12:37:30.55> system "dir 日本語.txt";
普通に通るぞ。
v5.12.3 build 1204
0514デフォルトの名無しさん
2011/12/17(土) 12:38:40.13そういうのが必要なシーンもあるのか知らんが、9割9分の人間は Encode 使ったほうがいいと思うなあ。
0515デフォルトの名無しさん
2011/12/17(土) 13:04:35.50たぶん 506 の人はプログラムを UTF-8 で書いてるのでは。
>>514
古いスクリプトの資産があって、なるべく変更したくないっていうんならともかく、
新しく書くんなら utf8 + Encode の一択でしょうね。
0516デフォルトの名無しさん
2011/12/17(土) 13:38:59.32> # ※2. OS に渡す文字列(ファイル名,dos コマンドのオプションなど)は、
> # この例のように cp932 でエンコードする必要があります。
0517506
2011/12/17(土) 14:34:01.02>>508
>>509
>>510
>>511
>>512
>>513
>>514
>>515
>>516
ありがとうございます。
木曜日にActivePerlを始めたばかりの初心者です。
use utf8;
encode( 'CP932', "日本語.txt" );
でうまくいきました。
0518デフォルトの名無しさん
2011/12/17(土) 16:09:22.04「いなばの道」って何でっか?w
0519デフォルトの名無しさん
2011/12/17(土) 16:18:07.280520デフォルトの名無しさん
2011/12/17(土) 16:18:15.88ttp://blog-imgs-18.fc2.com/l/u/c/luckystar01/20090228214717.jpg
故事を辿れば、ワニを騙して道にし、そしてたちまちワニの怒りを買って全身の皮を剥がされる。
0521デフォルトの名無しさん
2011/12/17(土) 16:54:02.04いなば君強しw
0522デフォルトの名無しさん
2011/12/17(土) 17:28:01.40おそらく、
ttp://gihyo.jp/dev/serial/01/modern-perl/0031
のパロディだとおもわれ
0523デフォルトの名無しさん
2011/12/17(土) 17:29:35.930524デフォルトの名無しさん
2011/12/17(土) 17:51:05.69を求める方法を教えてください
ようするにパターンマッチした個数ですね。
できればモジュールを使わない場合のやり方も教えてほしいです
十や表などの文字化けする文字がふくまれていてもうまくいくようにです
0525デフォルトの名無しさん
2011/12/17(土) 18:01:04.06仮にモジュールを教わったら、自分で中身を読めばいいだけのことだろうが。
0526デフォルトの名無しさん
2011/12/17(土) 18:09:34.460527デフォルトの名無しさん
2011/12/17(土) 20:15:04.61モジュールを使わないのであれば、自分でマルチバイトアンカー
リングする必要がある。
0528デフォルトの名無しさん
2011/12/17(土) 21:36:31.640529デフォルトの名無しさん
2011/12/17(土) 21:40:58.02「いばら」が読めなかったんだろw
0530デフォルトの名無しさん
2011/12/17(土) 21:46:59.410531デフォルトの名無しさん
2011/12/17(土) 22:15:11.66ズババン♪ズババン♪ダダンダン♪
ttp://www.youtube.com/watch?v=Bo0DWYIm8pc
0532デフォルトの名無しさん
2011/12/18(日) 03:13:12.550533デフォルトの名無しさん
2011/12/18(日) 03:29:21.19HTML解析系とか、自前で正規表現の組合せでやった方が高速なケースは今もたまにあるし
0534デフォルトの名無しさん
2011/12/18(日) 06:24:46.980535デフォルトの名無しさん
2011/12/18(日) 07:25:32.21質問するより手っ取り早いよ。
0536デフォルトの名無しさん
2011/12/18(日) 08:50:55.14特にOOなモジュールは1桁遅いからねえ
非力な環境ではキツい場合もあるな
0537デフォルトの名無しさん
2011/12/18(日) 09:02:39.01…っていう理不尽な状況なら昔俺がやったなw
一応簡単なフィルタならそれだけでも書けなくもなかったが
どうしても苦しい処理があるから選抜して2、3個は入れさせてもらった
ちなみに、一切useしなくても
一部の関数は.pm無しでは動かないものがあったよ、どれか覚えてないが
割と知らず知らずのうちに使ってる可能性がある
0538デフォルトの名無しさん
2011/12/18(日) 09:12:18.770539デフォルトの名無しさん
2011/12/18(日) 09:30:07.66それは Windows だとよくやる。テストマシン上とか。
ファイル2個だけでそこそこ役に立ってくれるのはありがたい。
0540デフォルトの名無しさん
2011/12/18(日) 10:03:01.64よくある事なのか…理不尽だなんて言ってられんか
まあでも、素のコマンドプロンプトじゃほとんど何も出来ないこと考えると
Perlあるだけで世界が変わるだろな
0541デフォルトの名無しさん
2011/12/18(日) 11:39:48.35コマンドラインで動くから
あまり関係ないな。
0542デフォルトの名無しさん
2011/12/18(日) 12:27:59.830543デフォルトの名無しさん
2011/12/18(日) 12:53:19.47ActivePerl禁止、仮想環境禁止って
禁止禁止言ってる側は何と戦ってるんだかw
0544デフォルトの名無しさん
2011/12/18(日) 13:07:16.59use strict; use warnings;書かないと禁止
禁止
禁止オタクですか?
0545デフォルトの名無しさん
2011/12/18(日) 13:11:12.90ワンライナー書けねえじゃん
0546デフォルトの名無しさん
2011/12/18(日) 13:11:57.00やっぱりワンライナー書く練習してるの?w
0547デフォルトの名無しさん
2011/12/18(日) 13:15:32.70perl -e " ほにゃららら のひゃら 'ほにゃら"
「ふっ」
Can't find string terminator "'" anywhere before EOF at -e line 1.
ひそひそ ( ;゚д)ザワ ウワダサッ!(;゚д゚;) ワンライナーミスッテマスヨ(д゚; ) ヒソヒソ
0548デフォルトの名無しさん
2011/12/18(日) 13:29:13.70おいらだから「モジュールを使わない方法で」って言われ
るとそっか、Perl4なのね、ライブラリなら使えるのねっ
てすぐにピンとくらあ。
0549デフォルトの名無しさん
2011/12/18(日) 13:39:01.15頑張ったんだろうがツマラン
0550デフォルトの名無しさん
2011/12/18(日) 13:47:01.99その人は個人的な制約で困っているわけじゃないだろうから論破しても意味
がないと思う。仮にその人がギブアップした場合でも他の人がそのポジショ
ンを補うことになるわけで、(2chで質問するかはともかく)「モジュールを
使わない方法」を模索する気がする。
0551デフォルトの名無しさん
2011/12/18(日) 14:07:36.38正当な理由があるからそれは問題ない。
0552デフォルトの名無しさん
2011/12/18(日) 14:09:45.60頭悪そうだな。文章が。
0553デフォルトの名無しさん
2011/12/18(日) 14:22:24.010554デフォルトの名無しさん
2011/12/18(日) 16:11:17.110555デフォルトの名無しさん
2011/12/18(日) 17:11:10.200556デフォルトの名無しさん
2011/12/18(日) 17:37:55.110557デフォルトの名無しさん
2011/12/18(日) 17:40:46.700558デフォルトの名無しさん
2011/12/18(日) 18:08:58.87$str="あああaaaFONTwww";
$str = &merker($str,"あああ","#00ff00");
$str = &merker($tr,"www","#0000ff");
print "$str";
この場合は"あああ"と"www"にマーカーがつきますが
$str = &merker($str,"あああ","#00ff00");
$str=&merker($str,"FONT","#0000ff");
print "$str";
上記のように"FONT"をマーカーしたい場合だとタグが崩れてうまくいきません
うまくいく方法を教えてください
merker{
my($str) = $_[0];
my($merker_str)=$_[1];
my($merker_color) = $_[2];
$zentai_str =~ s/$merker_str/<FONT STYLE=\"background:$merker_color\"><\/FONT>/g;
return($str);
}
0559デフォルトの名無しさん
2011/12/18(日) 18:09:49.840560デフォルトの名無しさん
2011/12/18(日) 18:11:36.05$zentai_str =~ s/$merker_str/<FONT STYLE=\"background:$merker_color\"><\/FONT>/g; ではなく
$str =~ s/$merker_str/<FONT STYLE=\"background:$merker_color\"><\/FONT>/g;
です
0561デフォルトの名無しさん
2011/12/18(日) 18:13:27.37$str =~ s/$merker_str/<FONT STYLE=\"background:$merker_color\"><B>$merker_str<\/B><\/FONT>/g;
です
0562デフォルトの名無しさん
2011/12/18(日) 19:49:23.300563デフォルトの名無しさん
2011/12/18(日) 23:49:11.340564デフォルトの名無しさん
2011/12/19(月) 04:46:39.720565デフォルトの名無しさん
2011/12/19(月) 07:33:35.43何しろzentai_strのレベルだから、そこに気づくのも無理だろ
0566デフォルトの名無しさん
2011/12/19(月) 09:47:15.50もっとうまい書き方があるのかもしれないけど、とりあえず。
sub marker {
my ($s, $p, $c) = @_;
my @d = split m/(<.+?>)/, $s;
for (@d) {
next if /^</;
s|$p|<span style="background-color: $c">$p</span>|g;
}
return join '', @d;
}
これならたとえば marker($str, "style", "#ffcc99"); なんてのでも変換できるはず。
なお関数内で複数のパラメータを受け渡す時は my ($a, $b, $c) = @_; みたいにやるのが普通。
あとPerlとは関係ないが、今のHTMLではFONTタグの使用はおすすめできない。
style属性を使うならなおさら、>>562 のようにspanを使うのが一般的。
PerlだけでなくHTMLも勉強しようぜ。
0567デフォルトの名無しさん
2011/12/19(月) 09:57:42.09my($str) = shift;
my($merker_str)=shift;
my($merker_color) = shift;
一個一個に or die $! 付けたり付けなかったり
後から引数増やしたりとかの関係で
ともかく、とりあえず$_[0]とかは使わない
0568デフォルトの名無しさん
2011/12/19(月) 11:05:51.69sub marker {
my ($str, $color_hr) = @_;
my $re = join '|', map { quotemeta } keys %$color_hr;
$str =~ s,($re),<span style="background-color: $color_hr->{$1}">$1</span>,g;
$str;
}
print marker($str, {'あああ' => '#00ff00', 'www' => '#0000ff'});
0569デフォルトの名無しさん
2011/12/19(月) 14:46:27.960570デフォルトの名無しさん
2011/12/19(月) 15:35:45.78パ・パ・パパッパ・Perlライス
0571デフォルトの名無しさん
2011/12/19(月) 15:36:14.420572デフォルトの名無しさん
2011/12/19(月) 15:45:44.45山陰?
0573デフォルトの名無しさん
2011/12/19(月) 15:58:59.63北陸でもやってたぞ
0574デフォルトの名無しさん
2011/12/19(月) 16:10:25.050575デフォルトの名無しさん
2011/12/19(月) 16:36:03.530576デフォルトの名無しさん
2011/12/19(月) 17:47:26.91makerはメイカーだろ?
だからマーカーはmekerで正しいんじゃないのか?
0577デフォルトの名無しさん
2011/12/19(月) 17:55:31.380578デフォルトの名無しさん
2011/12/19(月) 18:06:22.580579デフォルトの名無しさん
2011/12/19(月) 19:16:58.60$str_ =~ s/<FONT COLOR=\"#00ff00\">.*?<\/FONT>/AAA/g;
このような場合だとaaa〜cccまでがAAAに置換されてしまいますが
aaaとcccだけAAAに置換する方法を教えてください
0580デフォルトの名無しさん
2011/12/19(月) 19:53:27.610581デフォルトの名無しさん
2011/12/19(月) 20:01:57.40┏┛ ⌒
・ .___ ⌒ ___ ━┓
/ ―\ / ― \ ┏┛
/ノ (● X (●) \ヽ ・.
| (●) /_ (⌒ (●) /.
| (__/  ̄ヽ__) /
0582デフォルトの名無しさん
2011/12/20(火) 02:02:04.56で、それは何なの? 宿題なの?
0583デフォルトの名無しさん
2011/12/20(火) 08:04:07.76これでいいのか?HTMLにするなら元の文字列もちゃんと括ってくれ。
http://pastebin.com/MbDfDUk4
0584デフォルトの名無しさん
2011/12/20(火) 12:27:15.62長すぎて理解できませんでした
0585デフォルトの名無しさん
2011/12/20(火) 12:35:55.68特定のタグで囲まれた中の文字列の置換について教えてください
例えば
$str = "<FONT COLOR=\"#00ff00\">aaa<\/FONT><FONT COLOR=\"#00ff00\">bbbFONT<\/FONT><FONT COLOR=\"#00ff00\">ccc<\/FONT>";
のbbbFONTの部分のFONTをAAAに置換したい場合
$str =~ s/<FONT COLOR=\"#00ff00\">.*?FONT<\/FONT>/AAA/g;
だと結果はAAA<FONT COLOR=\"#00ff00\">ccc</FONT>になってしまいます
0586デフォルトの名無しさん
2011/12/20(火) 13:06:13.16理解できなかった理由は「長すぎたから」では無かろ。
#!/usr/bin/perl -w
use strict; use CGI qw(escapeHTML);
my $str = <<'EOH';
あああ<span title="FONT">FONT</span>www
<span title="www
www">あああaaaFONTwww</span
>aaa<span>FONT<span title="aaaあああaaa">wwwあああwww
</span>FONT</span>
EOH
print 'あああ = ', mark(\$str => 'あああ', with => '#00ff00'), "\n";
print mark($str => 'FONT', with => '#0000ff');
sub mark {
my($str, $target, %css) = @_;
With: {
defined $css{'with'} or last With;
local $_ = delete $css{'with'};
/^#/ and $css{'background-color'} = $_, last With;
}
$css{'font-weight'} ||= 'bold';
my $css = escapeHTML(join ' ', map "$_:$css{$_};", keys %css);
# http://www.din.or.jp/~ohzaki/regex.htm#ReplaceOutside
my $count = (ref $str ? ${$str} : $str) =~
s{ ((?:\G|>)[^<]*?) (\Q$target\E) } {$1<span style="$css">$2</span>}gx;
ref $str ? $count : $str;
}
0587デフォルトの名無しさん
2011/12/20(火) 13:06:54.85おまえ、これまでのみんなの回答をぜんぜん読んでも試してもいないだろ。
質問する資格なしだな。
0588デフォルトの名無しさん
2011/12/20(火) 13:36:19.25同意
だいたい>>558の方はどうなったんだよ
0589デフォルトの名無しさん
2011/12/20(火) 14:05:50.59ピンポイントで答えだけを聞きたいヤツだ。
長々書いてやっても、どこに答えがあるのかわかってない。
質問する前に、もっと入門書なり読んで基本学ぶべきだ。
0590583
2011/12/20(火) 16:38:20.98自分では結構よく書けたと思うんだがなァ……
具体的にどこら辺が分からなかったのか教えてくれると嬉しい。
コメント入れる時の参考にする。
0591デフォルトの名無しさん
2011/12/20(火) 19:44:47.380592デフォルトの名無しさん
2011/12/20(火) 22:27:43.83リファクタリング練習。求む(反論 or 改善案)
sub mark {
my($str, $target, %arg) = @_;
my %css = (
# specify your default marker styles below:
'font-weight' => 'bold',
'background-color' => delete $arg{with},
%arg,
);
# Serialize CSS.
my $style = join ' ',
map { "$_:$css{$_};" }
grep { $css{$_} ne q{} }
grep { $css{$_} !~ /[":]/ }
grep { ref $css{$_} eq 'SCALAR' }
keys %css
;
my $count = (ref $str ? ${$str} : $str)
=~ s{
((?:\G|>)[^<]*?) (\Q$target\E)
} {
$1<span style="$style">$2</span>
}gx;
ref $str
? return $count
: return $str
;
}
0593デフォルトの名無しさん
2011/12/20(火) 23:04:20.15動かないって?知ってる。
my $parser = HTML::Parser->new(
api_version => 3,
text_h => [\&conv],
);
$parser->parse($html);
sub conv {
my ($self, $tagname, $attr, $text) = @_;
$text ~= s/$merker_str/<FONT STYLE=\"background:$merker_color\"><\/FONT>/
}
0594デフォルトの名無しさん
2011/12/21(水) 02:09:48.38$word="FONT";
$chikan="RRR";
$str =~ s/([^<])$word([^>])/$1$chikan$2/g;
0595デフォルトの名無しさん
2011/12/21(水) 06:46:13.28それだとたとえば $word='COLOR'; $str='<FONT COLOR="#FF0000">'; なんて時にアカン。
0596デフォルトの名無しさん
2011/12/21(水) 07:33:06.43Web::Scraperを使え
0597Glenn Seemann
2011/12/21(水) 13:08:36.24ごみすぎ
カスすぎ
オワコン
なんか柔軟性にかける
0598デフォルトの名無しさん
2011/12/21(水) 13:15:19.50専ブラのブロック設定更新しとくか。
0599デフォルトの名無しさん
2011/12/21(水) 13:20:08.34和田「そういうのは 使わないほうがいい 正規表現があるじゃないか」
自分「え?」
和田「たとえば和田が開発したWEBアプリ Perlがあればそのまま導入できちゃいます 顧客先で」
自分「はい なんかCPANが簡単になるのあるらしいですけど」
和田「Web::Scraperというやらはな CPANから導入しないと大変 依存関係もめんどくさい」
和田「それならPerlだけで動く 標準的なソースコードのほうが導入しやすい」
自分「なるほど でもWeb::Scraperはいいですよ CSSセレクタもそろって抽出しやすいです 正規表現より凄いです」
和田「なんのための Perl!!!! 正規表現は王道!!」
和田「Perlは好き だけど言語学習じゃないんだ 結局は何を作るか」
自分「はい」
和田「まあ見たまえ わしのサイトをhttp://www.synck.com/」
自分「凄いです!和田さん!!」
0600デフォルトの名無しさん
2011/12/21(水) 13:25:27.47え?なにこのフリーランス
まじ強すぎ
俺よりやばくね
俺元ヤフーなんだけど
負けるわけがない
」
自分「ゲームばっかりしてるてめーが和田に勝てるかよw」
0601デフォルトの名無しさん
2011/12/21(水) 13:29:14.710602デフォルトの名無しさん
2011/12/21(水) 13:36:25.600603デフォルトの名無しさん
2011/12/21(水) 17:13:45.92foreach(@words){
print "even=$_\n" if( $_ =~ /(?:(?!s)even)/ );
print "sevens=$_\n" if( $_ =~ /(?:sevens)/ );
}
上記でeven=even sevens=sevensとプリントしたいのですが、上記では$_に"sevens"が来たときに
両方プリントされます。
(?!s)でevenの前にsが無い時、と表現しているつもりなのですが、どこがおかしいのでしょうか。
^$(先頭、最後尾)を使わずに実現したいです。
0604デフォルトの名無しさん
2011/12/21(水) 17:19:49.44その場合は否定戻り読み(?<!…)を使ってください。
0605デフォルトの名無しさん
2011/12/22(木) 02:51:47.85> print "even=$_\n" if( $_ =~ /[^s]even/ );
> print "sevens=$_\n" if( $_ =~ /sevens/ );
0606デフォルトの名無しさん
2011/12/22(木) 02:59:47.140607デフォルトの名無しさん
2011/12/22(木) 03:01:00.99/(?:[^s]|^)even/
0608デフォルトの名無しさん
2011/12/22(木) 03:01:26.260610デフォルトの名無しさん
2011/12/22(木) 09:58:43.12なんだったのか
0611デフォルトの名無しさん
2011/12/22(木) 10:07:37.40うん。謎だね。
0612デフォルトの名無しさん
2011/12/22(木) 11:44:17.02ケースじゃないかと
0613デフォルトの名無しさん
2011/12/22(木) 12:08:44.95んなこた書いてないと思うけど。
seven と even を区別するだけなら \b でもできるけど、
たとえば revenge はマッチさせたいって場合だと困るね。
個人的には>>604でいいじゃんと思う。
0614デフォルトの名無しさん
2011/12/23(金) 00:15:03.030615デフォルトの名無しさん
2011/12/24(土) 02:47:34.54例:
my $test="テストです!!!!!";
print length($test),"\n";
結果:
10
バイト数を知りたい場合はどうすればいいのでしょうか?
0616デフォルトの名無しさん
2011/12/24(土) 03:23:12.15http://perldoc.jp/func/length
http://perldoc.jp/docs/modules/bytes-1.03/bytes.pod
0617デフォルトの名無しさん
2011/12/24(土) 03:42:46.97encode_utf8 しろとさ
0618デフォルトの名無しさん
2011/12/24(土) 05:31:00.07>>617
バイト数は文字コードによって違ってくるから
utf8ならencode_utf8でいいけどShift JISとか他のコードの場合はまた別
だよね
0619デフォルトの名無しさん
2011/12/24(土) 17:40:34.42なぜ全角一文字が3バイト扱いされているのでしょうか?
#!/usr/bin/perl
use utf8;
binmode STDIN, ":utf8";
#binmode STDOUT, ":utf8";
binmode STDERR, ":utf8";
use Encode;
use Encode qw(encode_utf8);
my $test="あいうえお";
print length(Encode::encode_utf8($test)),"\n"; #結果は15
0620デフォルトの名無しさん
2011/12/24(土) 17:44:50.95いつから全角一文字が2バイトだと錯覚していた?
0621デフォルトの名無しさん
2011/12/24(土) 17:46:20.57日本語文字に10バイトくらい使う文字コードもあってもいいんじゃねーーーの???
0622デフォルトの名無しさん
2011/12/24(土) 17:48:06.930623デフォルトの名無しさん
2011/12/24(土) 18:39:12.73特殊記号消えるぞ
0624デフォルトの名無しさん
2011/12/24(土) 21:18:43.56sub make_merker{
my($zentai_str) = shift; #全体の文字列
my($merker_str) = shift; #マーカーをつける文字列
my($merker_color) = shift; #マーカーの色
my($disp_merker_str); #マーカーをつける文字列を表示するときの文字列
my($disp_zentai_str); #表示する全体文字列
my($tag,$data);
my(@tag_list,@data_list);
my($n) = 0;
$disp_merker_str = $merker_str;
$merker_str =~ s/([\+\*\.\?\^\$\[\-\]\|\(\)\\])/\\$1/g;
while($zentai_str =~ /<(.*?)>/g){
push(@tag_list,$1);
}
$zentai_str =~ s/<(.*?)>/<>/g;
@data_list = split(/<>/,$zentai_str);
foreach $data(@data_list){
$tag = $tag_list[$n];
if($tag ne ""){$tag = "<".$tag.">";}
else{$tag = "";}
$data =~ s/$merker_str/<FONT STYLE=\"background:$merker_color\"><B>$disp_merker_str<\/B><\/FONT>/g;
$disp_zentai_str = $disp_zentai_str.$data.$tag;
$n++;
}
return($disp_zentai_str);
}
0625デフォルトの名無しさん
2011/12/24(土) 21:39:32.050626デフォルトの名無しさん
2011/12/24(土) 21:45:28.10本人が手ごろな作業感と達成感を得られるんならほっといてもいいけど
0627デフォルトの名無しさん
2011/12/24(土) 21:55:41.29もっと安全に作れるのにな。
0628デフォルトの名無しさん
2011/12/24(土) 22:23:03.520629デフォルトの名無しさん
2011/12/24(土) 22:28:11.32んなもん、適当な名前つけて関数にすればいいのに。
0630デフォルトの名無しさん
2011/12/25(日) 02:39:48.85どれが使いたい関数なのか探すのに時間かかるから
結局自分で作った方が速い
0631デフォルトの名無しさん
2011/12/25(日) 02:41:44.040632デフォルトの名無しさん
2011/12/25(日) 02:42:02.340633デフォルトの名無しさん
2011/12/25(日) 05:24:37.68lib/site_perl/5.8.8は後からCPANで入れたモジュールでしょうか?
0634デフォルトの名無しさん
2011/12/25(日) 07:13:02.64設定やディストリ次第だが概ねそんな感じ
0635デフォルトの名無しさん
2011/12/25(日) 09:17:54.37結局 merker のままか…
0636デフォルトの名無しさん
2011/12/25(日) 09:21:11.950637デフォルトの名無しさん
2011/12/25(日) 09:27:44.86>>624のような石頭爺は万事これだから困る。
0638デフォルトの名無しさん
2011/12/25(日) 09:49:09.57shiftで引数取ること自体は特定の場面では有用だろ。今も昔も。
0639デフォルトの名無しさん
2011/12/25(日) 10:55:38.724桁ごとにスペースなどで区切って表示したいのですが
(文字列の長さは4の倍数に既になってます)
何か良い関数・妙案はありますか
今のところ配列に突っ込んで愚直に4回ずつshiftしつつ表示してます
0640デフォルトの名無しさん
2011/12/25(日) 11:00:28.17カプセル化した時なんかはよくshiftつかってる。
sub method { shift->_method(@_); }
0641デフォルトの名無しさん
2011/12/25(日) 11:11:39.57my $str = '010111010010101010100101010';
print join( ' ', split(/([01]{4})/, $str) );
0642デフォルトの名無しさん
2011/12/25(日) 11:20:14.970643デフォルトの名無しさん
2011/12/25(日) 11:21:25.280644デフォルトの名無しさん
2011/12/25(日) 11:23:22.12これ以上ゴルフできるのか?
0645デフォルトの名無しさん
2011/12/25(日) 11:36:08.99それだと余計な空文字列要素が間や先頭にできてしまう
>>644
切り詰めれば
$,=$";print$str=~/..../g
とかはできる。さらに $str じゃなくて $_ なら6文字縮むし、print のかわりに say が使えれば2文字縮む。
ワンライナーか競技ゴルフじゃなきゃやらんけど
0646デフォルトの名無しさん
2011/12/25(日) 11:43:05.18処理速度が速い方法を考えろよ・・・
0647デフォルトの名無しさん
2011/12/25(日) 11:45:16.28ここは文字列が4の倍数以外でも表示できる
>>642を推したい。
0648デフォルトの名無しさん
2011/12/25(日) 14:15:57.78ありがとうございます。色々と勉強になりました。
一応文字列は4の倍数で来るはずですが
何かの手違いで狂っていた場合に見つけやすいということで >>642 にします。
pack/unpackは未だに苦手なので、あまり理解できていないのですが…
あとは >>645 さんのもワンライナー用に覚えておこうかなと思いました。
パッと見で理解できる分、覚えやすいですし。
$ うんたらかんたら | perl -nE'$,=" ";say/..../g'
みたいな感じでサラッと書けたら楽しそうです。
0649デフォルトの名無しさん
2011/12/25(日) 14:40:21.340650デフォルトの名無しさん
2011/12/25(日) 17:22:58.16$str =~ s/(....)/\1 /g;
または
(my $str1 = $str) =~ s/(....)/\1 /g;
だと思うんだ
評価求む
0651デフォルトの名無しさん
2011/12/25(日) 17:39:58.28…盲点でした
考えてみれば、それだけのことですよね…
というか、むしろ何故それを思いつかなかったんだろう?!
split()してshift()とか俺は最初に何をしていたんだあああ
ちなみに後に(キリッ)とばかりに書いたワンライナーに至っては
perl -pe's/(....)/\1 /g'
…要するに
sed 's/\(....\)/\1 /g'
になってしまいました…
ま、まあ >>642 という良さげな案を貰えたので結果オーライということにしておきます!ありがとうございました!
0652デフォルトの名無しさん
2011/12/25(日) 17:44:37.250653650
2011/12/25(日) 18:20:01.11レスありがと
自分が当然こうだと思う答えが微塵も触れられてないと、
いささか不安になります
当たり前のことに気がつかないことって、結構あってこわいですね
0654デフォルトの名無しさん
2011/12/25(日) 18:47:59.47目的が「表示したい」であって「文字列を加工したい」ではないから、
元データを破壊する方法は採らないし、
出力に流し込めば済むものをわざわざ変数に入れないのが自然。
置換の場合の別解: s/(?<=\G....)/ /g
0655デフォルトの名無しさん
2011/12/25(日) 22:58:29.74お題だけ見るとそれで正解なんだけど、
察するにバイナリを整列させた上で何かを見比べようとしてる風に見える。
なら4桁毎に配列になってるほうが後々同じ事繰り返すリスクを減らせると思う。
「2桁目が1のヤツだけ抜き出したい」とか「出現頻度調べたい」とか。
1と0の羅列を目に見せるのが最終的な目的とはちょっと思えないかな。
0657650
2011/12/25(日) 23:36:46.91654さん、失礼しましたm(_ _)m
0658657orz
2011/12/25(日) 23:43:58.130659デフォルトの名無しさん
2011/12/26(月) 02:14:04.76ありがとうございました
0660デフォルトの名無しさん
2011/12/27(火) 08:39:39.33何故そのような仕様なのでしょうか?
0661デフォルトの名無しさん
2011/12/27(火) 09:29:12.21$hash = {
'name1' => 'value1',
'name2' => 'value2',
'name3' => 'value3'
};
#-- 代入 --#
$hash->{'name4'} = 'value4';
$hash->{'name5'} = 'value5';
$hash->{'name6'} = 'value6';
$hash->{'name7'} = 'value7';
複数代入する時に$hashを毎回書かないようにする書き方ってありませんか?
0662デフォルトの名無しさん
2011/12/27(火) 09:56:03.92動かないコードを示されてもね…
だからヒントだけ。例えば↓
@array = (1, 2, 3);
@array = (@array, 4, 5, 6);
0663デフォルトの名無しさん
2011/12/27(火) 10:33:59.97普通に動くけど?
0664デフォルトの名無しさん
2011/12/27(火) 10:43:19.40http://perldoc.jp/docs/perl/5.10.0/perldata.pod#Slices
http://perldoc.jp/docs/perl/5.10.0/perllol.pod#Slices
my $hash = { n1 => 'v1', n2 => 'v2', n3 => 'v3' };
@{$hash}{qw(n4 n5 n6 n7 n1)} = qw(v4 v5 v6 v7 v8);
print map "$_:[$hash->{$_}]\n", sort keys %{$hash};
0665デフォルトの名無しさん
2011/12/27(火) 10:46:20.94それだと新たなハッシュが作られませんか?
あくまでも現在のハッシュに追加したいのです。
0666デフォルトの名無しさん
2011/12/27(火) 10:47:00.50データの追加なら↓とか
$hash = {
%{ $hash },
'name4' => 'value4',
'name5' => 'value5',
'name6' => 'value6',
'name7' => 'value7'
};
0667デフォルトの名無しさん
2011/12/27(火) 10:48:11.94ありがとうございます。
参考ページまで付けて頂いて感謝します。
0668デフォルトの名無しさん
2011/12/27(火) 16:21:59.06なぜか文字化けするのですがどうしたらなおりますか?
#!/usr/bin/perl
# ソースコードはutf8で書かれています
use utf8;
binmode STDIN, ":utf8";
binmode STDOUT, ":utf8";
use strict;
use warnings;
print " ここでは文字化けしない";
open (IN, "<./in.txt"); # in.txtはUTF8
while(<IN>){
print $_; #なぜか文字化け
}
close IN;
0669デフォルトの名無しさん
2011/12/27(火) 16:26:45.330670デフォルトの名無しさん
2011/12/27(火) 16:26:45.35utf8::decode()でなおりました
0671デフォルトの名無しさん
2011/12/27(火) 16:28:51.40うまくいきました
ありがとうございます
binmode STDIN, ":utf8";
をつかえばUTFフラグつきの文字列を受け取って貰えるかと思っていました
0672デフォルトの名無しさん
2011/12/27(火) 16:37:38.56open (IN, "<:utf8", "./in.txt");
が最適解かな。
0673デフォルトの名無しさん
2011/12/27(火) 16:39:52.97あとは
open (IN, "<./in.txt");
binmode IN, ":utf8";
while(<IN>){
...
とか。
0674668,670,671
2011/12/27(火) 17:06:20.93#!/usr/bin/perl
# test.pl: a /usr/bin/perl\015 script, UTF-8 Unicode (with BOM) text executable, with CRLF line terminators
use utf8;
binmode STDIN, ":utf8";
binmode STDOUT, ":utf8";
use strict;
use warnings;
my @array;
open (IN, "<:utf8", "./in.txt"); # in.txt: UTF-8 Unicode (with BOM) text, with CRLF line terminators
while(<IN>){
chomp($_);
push(@array, $_);
}
close IN;
print "$array[0]...........\n"; # ...........
print "$array[1]...........\n"; # ...........
print &repeat($array[0]); # 変になります
print &repeat("テスト2"); # テスト2テスト2
sub repeat{
my ($str) = @_;
chomp($str);
print "*** $str$str ***\n"
}
実行結果:
...........
...........
***トスト
1*** テスト2テスト2 ***
1
0675668,670,671
2011/12/27(火) 17:11:01.710676デフォルトの名無しさん
2011/12/27(火) 17:12:02.04open IN, '<:encoding(UTF-8)', 'in.txt'
perlunifaq - Perl Unicode FAQ
http://perldoc.jp/docs/perl/5.10.0/perlunifaq.pod#What32is32the32difference32between32:encoding32and32:utf863
0677デフォルトの名無しさん
2011/12/27(火) 22:57:23.67中括弧`{}`はBLOCKにもEXPR(無名ハッシュリファレンス)にも使われるから。
perldocのmapの一番下に例が書いてある。
http://perldoc.jp/func/map
http://perldoc.jp/docs/perl/5.8.8/perlref.pod#Making32References
の項番3にあるように、見つけづらいバグを不用意に埋め込んでしまわないよう
無名ハッシュリファレンスの開き括弧を明示的に`+{`にする人もいる。
逆にBLOCKを`{;`で始めてる例があるけど実際のコードでお目にかかった事はない。どっかにあるのかな。
俺の場合はreturnを省略せずにちゃんと書くかBLOCKの行末に`;`をつける。
0678デフォルトの名無しさん
2011/12/28(水) 10:48:25.53下記でモジュールインストール出来ますが、アンインストールをコマンドライン一行でする方法はどのようにすればよいのでしょうか?
perl -MCPANPLUS -e "install Math::Round"
0679デフォルトの名無しさん
2011/12/28(水) 13:29:02.800680デフォルトの名無しさん
2011/12/28(水) 13:43:01.12decode_utf8を使わぬとはまだまだだな
0681デフォルトの名無しさん
2011/12/28(水) 14:12:31.36App::pmuninstall
で行けなかったっけ?
0683デフォルトの名無しさん
2011/12/28(水) 17:02:07.51utf8の文字コードがあった場合、utf8フラグを付け、すでにフラグがついてればそのまま返す。
というもので、文字コードがsjisとかだと使えないということでしょうか?↓
use utf8;
my $str_utf8 = encode('utf8', 'あああ');
my $str = encode('utf8', $str_utf8);
my $str_test = encode('sjis', $str_utf8);
my $hoge1 = decode_utf8($str_utf8); #そのまま返すのでutf8フラグあり
my $hoge2 = decode_utf8($str); #utf8フラグ付きで返す
my $hoge3 = decode_utf8($str_test); #sjisなのでエラー??
0684デフォルトの名無しさん
2011/12/28(水) 17:27:33.030685デフォルトの名無しさん
2011/12/28(水) 17:29:23.430686デフォルトの名無しさん
2011/12/28(水) 17:37:17.490687デフォルトの名無しさん
2011/12/28(水) 17:49:09.27ソースの文字コードと扱うデータの文字コードは別だからおかしくはないだろ
0688デフォルトの名無しさん
2011/12/28(水) 17:55:00.72>>683よく見ろ。扱ってるデータはコードの中にしかない。
0689デフォルトの名無しさん
2011/12/28(水) 19:00:47.80これだと上手く行くのですが、
foreach my $n (1 .. 5) {
$n = $n * 10;
print "$n\n";
}
これだと「Modification of a read-only value」と言われてしまいます。
foreach my $n (1, 2, 3, 4, 5) {
$n = $n * 10;
print "$n\n";
}
0690デフォルトの名無しさん
2011/12/28(水) 19:38:24.77http://perldoc.jp/docs/perl/5.10.0/perldiag.pod
http://perldoc.jp/docs/perl/5.10.0/perlsyn.pod#Foreach32Loops
http://perldoc.jp/docs/perl/5.14.1/perlop.pod#Range32Operators
前者の $n は、範囲演算子で生成されたリストの各要素に対するエイリアスなので変更できる。
後者の $n は、コード中に書かれた各定数 1,2,3,4,5 のエイリアスなので変更できない。
0691デフォルトの名無しさん
2011/12/28(水) 19:50:41.29とりあえず use utf8; を外せばうまくいく。
必要になったときに use utf8; を使うようにすれば悩むことはない。
0692デフォルトの名無しさん
2011/12/28(水) 21:19:50.290693デフォルトの名無しさん
2011/12/28(水) 21:30:06.25http://ideone.com/6tCPX
0694デフォルトの名無しさん
2011/12/28(水) 21:35:58.370695デフォルトの名無しさん
2011/12/28(水) 21:55:58.29今年もおつかれさま。
0696デフォルトの名無しさん
2011/12/28(水) 22:09:19.670697デフォルトの名無しさん
2011/12/28(水) 22:36:56.770698デフォルトの名無しさん
2011/12/28(水) 22:44:43.650699デフォルトの名無しさん
2011/12/28(水) 22:55:16.98utf8フラグとい名前がまずかったね。
Perl文字列フラグなどという名前だったらよかった。
Perl文字列フラグはPerl固有のものだから
Perlコード外部から渡されるのは文字列ではない。
文字列でなかったらなにか?それはバイナリ。
バイナリを文字として扱いたければ、文字に変換しないといけない。
それがdecode。
ではソースコードに書いてあるのは、文字かバイナリか。
それはuse utf8を使えば文字で、そうでない場合はバイナリ。
話はこれだけ。
0700デフォルトの名無しさん
2011/12/28(水) 22:57:26.67これは良かったな
0701デフォルトの名無しさん
2011/12/28(水) 23:04:56.660702デフォルトの名無しさん
2011/12/28(水) 23:16:21.340703デフォルトの名無しさん
2011/12/29(木) 00:42:01.310704デフォルトの名無しさん
2011/12/29(木) 06:53:26.43目的と手段を逆にするとこんなに苦しいとは
0705デフォルトの名無しさん
2011/12/29(木) 07:32:57.74だってアプリケーションプログラマを見下すようなことになるんだもの
そうでしょ?おじいさん
0706デフォルトの名無しさん
2011/12/29(木) 12:06:21.23Shift JISとかEUC-JPとかUTF-8とかはそれぞれのコード体系にencodeされてるんだし
Perl内で文字列として処理する時はどんなバイト列になってるかとかは考えない、
つまりcodeとして意識する必要はないってタテマエなんだから、
encode/decodeは現状どおりで合ってんじゃね?
0707デフォルトの名無しさん
2011/12/29(木) 12:09:45.69なんか言ってること間違ってない?
0708デフォルトの名無しさん
2011/12/29(木) 13:16:03.82名前は大事だ。
0709デフォルトの名無しさん
2011/12/29(木) 14:04:16.08プログラミングするにあたっては何かひとつにまとめるんだろうけどさ
0710デフォルトの名無しさん
2011/12/29(木) 16:33:26.40decode関数は、
my $perl_internal_string = encode("internal", $binary);
0711デフォルトの名無しさん
2011/12/29(木) 16:45:37.67$binaryの文字コード情報がないわw
0712デフォルトの名無しさん
2011/12/29(木) 20:47:43.29なかったらテキストエディタとか自動判別に困る
0713デフォルトの名無しさん
2011/12/29(木) 20:54:51.34情報源がなくて困ってるから
自動判別なんて曖昧なものを使うしか無いんだろw
100%の制度を持つ全世界言語対応の
自動判別エンジンなんて無いんだぞ。
0714デフォルトの名無しさん
2011/12/29(木) 20:56:57.03utfフラグ付ければ、それはutf文字列になるのか?
ならんだろ。
そういうことだ
0715デフォルトの名無しさん
2011/12/29(木) 21:16:06.47> encodeされてるんだし
コンピュータサイエンスとして正しいかもしれないけど、プログラマ
もユーザもそのことを意識してない(意識させない)でしょ?普通。
例えば ASCII のときにそのことを意識してないでしょ?
0716デフォルトの名無しさん
2011/12/29(木) 21:28:47.50そういうことだ(キリッ)って恥ずかしくない?w
バイナリにutf8フラグをつけたらどうなるかだって?
答えは出てる。
一部(全部)が壊れたutf8文字列だ。
壊れているってことが解るのも重要なことなんだが、
お前はランダムで捏造したバイナリを
どう扱って欲しいわけ?
0717デフォルトの名無しさん
2011/12/29(木) 21:37:45.93> 例えば ASCII のときにそのことを意識してないでしょ?
論点がずれてるなぁw ま論点がずれた話に付き合ってあげるか。
ASCIIの時に意識してないというのは正確に言えば全部が
ASCIIで統一された世界であれば意識しないってことだよ。
残念ながら世界はASCIIで統一されていない。
ASCII以外を扱う世界で、ASCIIと同じように意識させない作るとしたら
すべてを何か一つのコードで統一しなければならない。ASCIIと同じように。
すべてをっていうのはPerlだけじゃなく内外すべての文書をUTF8なりなんなりで
統一するということ。それが可能ならその方法でいいよ。でも現実的じゃないよね。
じゃあどうするか、方法は2つある。
1.変数にどの文字コードが入ってるかを人間が意識してコーディングする
2.Perlの中だけは統一した世界を作って人間は変換処理だけをすればいい。
前者はShift JISとか日本語系文字コード以外も全て意識しないといけないので大変。
後者なら変換部分だけやれば、あとは文字コードを意識しないでいい。
つまり、ASCII以外を扱う世界において、ASCIIのように意識しないでいい最善の方法。
それがUTF8フラグ。
0718デフォルトの名無しさん
2011/12/29(木) 22:40:36.63最後の一行(と最後から4行目のくだりも)に同意できないんだな、これが
0719デフォルトの名無しさん
2011/12/29(木) 23:16:35.10同じわけだから、後者のほうが(最善の方法とか言って)まるで
魔法のように簡単であるかのような書き方には注意が必要です。
0720デフォルトの名無しさん
2011/12/29(木) 23:22:12.97「Perlで扱う文字列データ」の範疇の前にまず「Perlを記述するための記号セット」な訳で。
0721デフォルトの名無しさん
2011/12/29(木) 23:25:36.640722デフォルトの名無しさん
2011/12/29(木) 23:28:49.90なんにしても外部から入力される文字列のコードページは
誰にも判断できないんだから自動判断するしかないわな
0723デフォルトの名無しさん
2011/12/29(木) 23:47:22.16公式の規格外の符号位置を含んでいるわけで、そのままではdecode/
encodeがうまくいかない(入出力双方のマッピングテーブルが必要に
なる)。外字セットをたくさん扱っている場合は、毎回テーブルを
作るのも面倒だし、そもそもマッピングテーブルを作ることが仕事の
目的ではない。そうなると外字を含むテキストデータはバイナリと
して扱うのが当然の流れになる。
これが世の中の一般的なことだと主張するつもりはないけれど、自分
の身の回りに限るとこれが一般的。
"前者"も"後者"も変換を強く意識しているものの、自分の環境ではむ
しろ「外字も含めて意図しない変換がされないようにすること」が
ものすごく重要。
0724デフォルトの名無しさん
2011/12/30(金) 00:10:04.60変換規則を自分で簡単にカスタマイズできるからいい。
既存の何かが気に食わなければ自分で作ればいいのよ。
0725デフォルトの名無しさん
2011/12/30(金) 00:11:55.78○そうなると外字を含むテキストデータは入力された文字コードのまま扱うのが当然の流れになる。
0726デフォルトの名無しさん
2011/12/30(金) 01:01:39.86にも関わらず、マルチバイト文字もバイナリデータも扱うことが
できる。もしUTF-8版のJPerlがあったとしたらやはり同様だろう。
UTF8フラグの存在理由として、バイナリと文字列の区別のためと
まことしやかに語られるが、それは正しくない。
正しくは、Latin-1とUTF-8の区別のため、だ。
だからLatin-1のサポートをやめればUTF8フラグは必要なくなる。
その際にバイナリデータが扱えなくなる、なんてことにはならない。
0727デフォルトの名無しさん
2011/12/30(金) 01:16:48.180728デフォルトの名無しさん
2011/12/30(金) 01:43:56.68Latin-1のサポートをやめたら
バイナリデータが扱えなくなるぞ。
なんか最後の行で先手を打ったつもりだが無意味だ。
バイナリデータが扱えなくなるぞ。
0729デフォルトの名無しさん
2011/12/30(金) 01:48:33.19馬鹿だなぁw JPerlを持ってきた所で意味ないじゃないか。
JPerlの制限分かってるか?
その制限はそのまんまお前が言うUTF8版Perlに当てはまるんだよ。
http://gihyo.jp/dev/serial/01/modern-perl/0031
> jperlの制約
>
> ただし,田中氏のパッチではすべてが2バイト文字対応されていたわけではありません。
> readme.sjには以下のような制約が残っていることも明記されています。
>
> tokenに漢字を使うことはできない
> 文字列の大小関係はCのライブラリ関数の実装に依存
> substrやreverseは漢字を意識しない
> index,rindexの返す値は(文字位置ではなく)バイト位置
これがまさにUTF8フラグがなかったら、実現不可能なことになってるんだよ。
0730デフォルトの名無しさん
2011/12/30(金) 01:49:08.97すべてを漢字対応にしてしまうと(たまたま漢字と同じバイト列が含まれているような)
バイナリデータを扱うときや,全角半角入り混じった文字列の長さを
考慮した処理をしたいときに困るので,あえてオリジナルの挙動を
残しておいたと見るべきでしょうが,「jperlを使えばどんな書き方をしても
正しく日本語が処理される」というのは幻想にすぎません。jperlを使おうと,
こう書いてしまえば文字化けは起きます(上のchopの例と同じく,
一見正しく動作しているように見えますが,次の出力があったときに文字化けが起こります)。
0731デフォルトの名無しさん
2011/12/30(金) 02:00:28.05その幻想をぶち○す人とかも出てきそうだ。
0732デフォルトの名無しさん
2011/12/30(金) 09:45:52.75encode/decodeは直観的でないし、UTF8フラグとかUTF-8バイナリ文字列と混同しそうだし。
0733デフォルトの名無しさん
2011/12/30(金) 09:53:44.25jperlとjcode.plの区別がないあたりで、実はJPerlをよく分かっていない
ことが分かる。このふたつはやろうとしていること(方向性)が全く別のもの。
>Latin-1のサポートをやめたら バイナリデータが扱えなくなるぞ。
Latin-1とバイナリは別だから大丈夫だ。信じろ。
0734デフォルトの名無しさん
2011/12/30(金) 10:30:03.18のも道理。別に"対抗処置"で使い続けている訳ではないはず。
0735デフォルトの名無しさん
2011/12/30(金) 11:03:34.11の2つの用語に使い分けると混乱の収拾に役立つ。その場合、「外字を含む
テキストデータ」は「テキストデータ」なの?「非テキストデータ」なの?
ということになるわけで、文字列フラグというアイディアがあんまり有効で
ないことがここで判明する。
0736デフォルトの名無しさん
2011/12/30(金) 11:27:47.14ファイルからデータを変数に読み込んだ時
そのファイルに入っているのが、テキストかバイナリか
区別する必要があるってこと。
UTF8フラグが立っていればUTF8テキストでlengthで
1〜3バイトが1文字として返ってくる。
そうでなければ、lengthはバイト数で返ってくる。
変数に型もない言語においてutf8用の関数を作らないで対応するなら
UTF8フラグみたいに値にフラグをもたせるしか無い。
0737デフォルトの名無しさん
2011/12/30(金) 11:34:03.58Perlの設計した人がいう通りに使えばいいじゃないか。
特に不便は感じない。
0738デフォルトの名無しさん
2011/12/30(金) 12:02:12.470739デフォルトの名無しさん
2011/12/30(金) 12:26:16.90理解しやすい。UTF8フラグ1ビットに数年かけて議論するということ
もない。
0740デフォルトの名無しさん
2011/12/30(金) 12:50:31.85UTF8版を作れってかw
CPANモジュールにあるほぼすべての
関数が2倍になるなw
UTF8フラグを付けるだけで対応は完了するのに
ご苦労なことだなw
0741デフォルトの名無しさん
2011/12/30(金) 13:01:07.69Yes, No, No、な。
0742デフォルトの名無しさん
2011/12/30(金) 13:03:38.63ただのデータ出力であったとしてもだ。
UTF8バイトの途中で切れたらいけないしな。
そうすると、大きな修正が必要になる。
すべての関数が2倍になるほどに。
0743デフォルトの名無しさん
2011/12/30(金) 13:10:13.00正規表現部分がUTF8対応になれば動作するけど、
UTF8対応正規表現が別に用意されると、関数自体を書き換えないといけない。
もちろん互換性のために関数自体を書き換えるのではなく、別の名前の関数を
用意しないといけない。
そしてこの関数を使用している部分も書き換えないといけない。
このように依存関係のことまで考えると、そうとう修正が大きくなるのだが。
0744デフォルトの名無しさん
2011/12/30(金) 13:43:41.74特殊変数 $[ や $* は存在し続けているおかげで、既存の
スクリプトを書き換える必要がなかった。
エリートは過激にコトを考えすぎるので困る。
0745デフォルトの名無しさん
2011/12/30(金) 13:55:11.960746デフォルトの名無しさん
2011/12/31(土) 08:58:26.820747デフォルトの名無しさん
2011/12/31(土) 13:03:21.46※decode/encodeを二度がけしてはならない。
基本これだけ。
あとは、複数ある、どの方法でdecode/encode処理をするか。
0748デフォルトの名無しさん
2011/12/31(土) 18:29:02.11%test("mikan","みかん","ringo","りんご","budou","ブドウ");
foreach(%test){
print "$_<br>";
}
これだと全部出力されてしまいます
アルファベットの部分だけ出力するにはどうすればいいんですか?
0749デフォルトの名無しさん
2011/12/31(土) 18:31:48.49foreach(keys(%test)){
print "$_<br>";
}
0750デフォルトの名無しさん
2011/12/31(土) 20:05:54.57どうも
0751デフォルトの名無しさん
2011/12/31(土) 21:19:08.34古いファイルが勝手にリネームされて困ってたのが
今実行したらファイルの最後に追加されるようになった。
ソースを全くいじってないのにうまくいってしまった
どういうことですか?
if ( !open( DATAFILE, ">>", $input ) )
0752デフォルトの名無しさん
2011/12/31(土) 21:27:05.94正直にいっとこう。
なんかいじったんだろ?な?
0753デフォルトの名無しさん
2011/12/31(土) 21:27:47.460754751
2011/12/31(土) 21:43:36.17もうひとつの謎が急にpathが通ったことです。
ActivePerlをインストした時に環境変数のpathを通したはずなのに
”perl”では認識されずに”c:\perl\bin\perl”と毎回打ってたのが
再起動もせずに休止状態から復帰しただけで”perl”で認識されました。
0755デフォルトの名無しさん
2011/12/31(土) 21:46:11.63とかじゃねーーーだろなwww
0756754
2011/12/31(土) 21:50:49.730757デフォルトの名無しさん
2011/12/31(土) 21:58:15.52落ち着いてもう一度思い出すんだ。
環境変数はシェル毎に異なりうる。
設定が行われる前に開いていた違うシェルでは当然反映されない。
また再起動しなくても環境変数は反映させることができる。
古いファイルがリネームというのはどういう状況なのか>>751ではよく分からない。
一行だけじゃなくて、動くコードが無いと判断しようがない。
0758デフォルトの名無しさん
2012/01/04(水) 15:38:08.25ttp://www.kagematya.com/img/movie/10218/s02.jpg
0760デフォルトの名無しさん
2012/01/05(木) 12:45:23.83連想配列を先頭に追加するにはどうやったらいいんですか?
0761デフォルトの名無しさん
2012/01/05(木) 12:46:35.750762デフォルトの名無しさん
2012/01/05(木) 13:11:28.870763デフォルトの名無しさん
2012/01/05(木) 13:50:51.47$todoufuken{'hokkaidou'}="北海道";
foreach(keys(%todoufuken)){
print "$todoufuken{$_}<br>";
}
ソートしないで北海道を最初に表示させたいんですがどうすればいいんですか?
keysはどういう順番で表示されるのかわかりません
0764デフォルトの名無しさん
2012/01/05(木) 14:04:25.69ハッシュは普通、格納順番なんて記憶してない。
順番通りに取り出したいなら配列使うしかない。
使った事ないけど、そういうモジュールは存在するようだけど。
http://vv1.jp/bRL
0765デフォルトの名無しさん
2012/01/05(木) 15:15:07.43{k => 'toukyou', v => '東京'},
{k => 'chiba', v => '千葉'},
{k => 'gunma', v => '群馬'},
);
unshift @todoufuken, {k => 'hokkaidou', v => '北海道'};
for (@todoufuken) {
print $_->{v}, "<br>";
}
とか。(あまりすっきりはしてないが)
0766デフォルトの名無しさん
2012/01/05(木) 17:24:51.790767デフォルトの名無しさん
2012/01/05(木) 17:48:49.67まじでggrks
0768デフォルトの名無しさん
2012/01/05(木) 18:04:00.87http://www.perl-labo.org/analyse/host/
実行してもマシンの型番?みたいな環境変数の英数字しかでてきませんでした。
0769デフォルトの名無しさん
2012/01/05(木) 18:19:48.08ip は IO::Interface::Simple でとればいいんじゃね
Windows だとどうなるか知らないけど
あと、手元の環境では、IO::Interface::Simple だと
IPの振り方によっては2つ目以降のIPを取れないことがあるっぽい
0770デフォルトの名無しさん
2012/01/05(木) 18:20:47.010771デフォルトの名無しさん
2012/01/05(木) 18:24:38.61http://d.hatena.ne.jp/NeoCat/20070721/1184994948
こんなのとか出てくるじゃねーか
どんな調べ方してんだ
0772デフォルトの名無しさん
2012/01/05(木) 18:26:38.25あまりに抽象的すぎるなぁ…
「自分がインターネットにアクセスしたときに相手から見えるIPアドレス」ならば、
Perlならワンライナーで
% perl -MLWP::Simple -e 'getprint "http://whatismyip.org/";'
かな。
参考
ttp://diary.sshida.com/20090409-3-diary.html
0773デフォルトの名無しさん
2012/01/05(木) 19:23:49.14hostname も変な環境変数しか出力されません
>>771
参考のためにどう検索したか教えて下さい
>>772
参考になりました
ありがとうございました
0774デフォルトの名無しさん
2012/01/05(木) 20:47:34.42http://www.google.co.jp/search?client=ubuntu&channel=fs&q=perl+%E8%87%AA%E5%88%86%E3%81%AEIP&ie=utf-8&oe=utf-8&hl=ja
0775デフォルトの名無しさん
2012/01/05(木) 21:30:44.08そのファイルを利用する部分から抜けたら
確実に閉じられるような書き方・関数などはありますか?
こう書いておけば、途中でいきなりlastとかreturnとかしちゃってても
その部分から出る際に自動的に閉じてくれる、みたいな感じです
0776デフォルトの名無しさん
2012/01/05(木) 21:33:54.580777デフォルトの名無しさん
2012/01/05(木) 21:48:10.87で開いてれば $fh のスコープが終わると同時に自動クローズされる
それでも本当は毎回 close $fh or die $!; とかするべきではあるけど
0778デフォルトの名無しさん
2012/01/05(木) 23:09:25.00堂開いたらいいか どう作ったらいいかってな話が
際限なくソースがのびてグダグダになってabonしそうなクソが出来上がった
過去グロ嫁
0779デフォルトの名無しさん
2012/01/06(金) 00:20:42.58Perlじゃ簡単にできないんですね。
http://dev.classmethod.jp/etc/p3210/
The try-with-resources Statement
リソースを含めたtry文
プログラムが終了した際にクローズされていなければならないリソースを
try文に含めることができるようになりました。これらのリソースは
ステートメント終了時にクローズされることが保証されます。
0780デフォルトの名無しさん
2012/01/06(金) 00:23:30.09>>777
0781デフォルトの名無しさん
2012/01/06(金) 00:36:53.66http://perldoc.jp/docs/perl/5.10.0/perlopentut.pod#Indirect32Filehandles
> もう一つの便利は振る舞いとして、間接ファイルハンドルは、
> スコープ外に出るか undef にされると、自動的に閉じます:
0782デフォルトの名無しさん
2012/01/06(金) 03:27:17.79ありがとうございます、これで安心して開けます
>>777さんの最後が「閉じるほうも or die したほうが良いの?」と
ちょっと気になりましたが
>>779さんのサイトからclose()で偽を返す場合について確認しました
パイプは分かるのですが
PerlIO層がエラーを返す場合ってどんな場合なんでしょう?
>>779
確かにその類のことがやりたかったことに違いはありませんが
煽り目的の成り済ましはやめて下さい。
0783デフォルトの名無しさん
2012/01/06(金) 03:28:34.79ええと…感謝とサイトは>>781さんへ、です…
0784デフォルトの名無しさん
2012/01/06(金) 04:58:35.761,2,3,4,5
aiu,eo,kaki,ku,keko
と書いてあるdata.csvを用意しておき、これを使って新しくnewfile.textを作成して、その内容を
こんにちは
こんな 1 感じに 2 文字を 3 挿入 4 したい 5
こんな aiu 感じに eo 文字を kaki 挿入 ku したい keko
としたいと思っています。formatを使ってやったところ、@<<<<< の長さが固定されてしまい、
csvファイルに描いてある文字列の長さによっては不必要な空白が入ってしまいます。
これをうまく回避するにはどうしたらいいでしょうか?
0785デフォルトの名無しさん
2012/01/06(金) 06:10:46.300786デフォルトの名無しさん
2012/01/06(金) 11:54:11.00宿題?
0787デフォルトの名無しさん
2012/01/06(金) 12:03:36.82formatをつかわない。
0788デフォルトの名無しさん
2012/01/06(金) 15:50:27.66> PerlIO層がエラーを返す場合ってどんな場合なんでしょう?
書き込んでいてcloseされると、バッファフラッシュでwrite(2)が呼ばれて、そのエラーが返ることがある。
よくネタにされるのが、デバイス領域が足りない(ENOSPC)。
この辺りはCと同じ。
0789デフォルトの名無しさん
2012/01/06(金) 17:00:56.09ありがとうございます。しかし高度すぎて理解するのに時間がかかりそう。がんがります
>>786
MySQLの勉強してたんですけど、tableに一気にデータ入れたくてそれをperlでやってみようとしたらドツボにはまりました。
作ったのは以下のようなスクリプトなんですが、@<<<<<を長くすると不必要な空白が入ってしまいます。
------
open (NEWFILE, "> newfile.text");
open (DATA, "data.csv");
@data = <DATA>;
$length_data = @data;
for ($record_num = 0; $record_num < $length_data; $record_num++){
#print ("@data[$record_num]");
($id, $user_id, $title, $body, $created, $joined) = split(/,/,@data[$record_num]);
write NEWFILE;
}
close (NEWFILE);
close (DATA);
# Start Format
format NEWFILE =
insert into posts (id, user_id, title, body, created, modified) values (null, '@<<', @<<<<<', '@<<<<<', '@<<<<', '@<<<<<');
$user_id, $title, $body, $created, $joined
.
# End Format
---------------
それで、Formatのほうでは、@<<などの文字をVuser_idVなどの文字にして、writeのあとで文字置換しようとしたんですが、write NEWFILEの下に
while(<NEWFILE>){
s/Vuser_idV/$user_id/;
}
と書いてみたんですがダメでした。forループの中でその都度置換すればいいかと考えたんですが正しいやり方とかありますでしょうか。
0790デフォルトの名無しさん
2012/01/06(金) 17:19:32.06>open (NEWFILE, "> newfile.text");
今時どんな本でこういう書き方してるのか気になる
あとformat, writeとか使ってる人なんて十数年ぶりに見た
0791デフォルトの名無しさん
2012/01/06(金) 17:23:23.750792デフォルトの名無しさん
2012/01/06(金) 17:25:08.57mysqlコマンドにリダイレクトしようとしてるのかな?
その書き方じゃ普通にSQLインジェクションに弱くて危険だから
今からでも遅くないのでDBI使うようにするのをおすすめしたいです
0793デフォルトの名無しさん
2012/01/06(金) 17:25:34.65>>791「す『み』ませんだろゴルァ」
0794デフォルトの名無しさん
2012/01/06(金) 17:28:59.39はいはい先生は偉いお方だから口悪くても許されますねー
0795デフォルトの名無しさん
2012/01/06(金) 22:10:10.240796デフォルトの名無しさん
2012/01/06(金) 23:36:38.23どのように動作しているのでしょうか?
よろしくお願いいたします。
#!/usr/bin/perl
my $str = "abc";
print utf8::is_utf8($str)? 'flag' : 'no flag', "\n"; # no flag
print "x" . utf8::is_utf8($str)? 'flag' : 'no flag', "\n"; # flag <- ?
print "x" . (utf8::is_utf8($str)? 'flag' : 'no flag'), "\n"; # xno flag
0797デフォルトの名無しさん
2012/01/06(金) 23:59:56.89と等価になってるのでは?
0798デフォルトの名無しさん
2012/01/07(土) 00:23:27.09と
print (3+5) . "km";
どちらも8kmと表示されるものかと思いましたが違いました。
結合順が変わってしまうのは何故なのでしょうか?
前者では8kmと表示されますが、
後者では3+5とprintが先にくっついてしまい8と表示されてしまいます。
0799デフォルトの名無しさん
2012/01/07(土) 00:26:37.71print(3+5)という形があり、それに. "km"している形ですね。
printのカッコ省略に慣れて見えていませんでした。
スレ汚しスマソ
0800デフォルトの名無しさん
2012/01/07(土) 00:47:26.49なるほど。
その辺まで突き詰めると、もうPerl固有の話ではなくなりそうですね。
色々調べてみます、ありがとうございました!
0801デフォルトの名無しさん
2012/01/07(土) 02:21:42.37| かきくけこ
という文章のあ〜そまでを抽出する正規表現を書きました。 m/^a.(.*?)\n\n/ms
思い通りに動きました。ここに例外を加えたいです。それは
|a.あいうえお
|
↑ここに全角スペースがある場合はマッチさせないという動作です。
否定戻りよみを使い右のようにしました。 m/^a.(.*?)(?!< )\n\n/ms
しかしこれでは上記の文がマッチしてしまいました。
.*?が全角スペースを含む長さまで伸びた際にマッチするからだと思います。
どのように書けば期待する動くを実現できるのでしょうか?お知恵をお貸し下さい。
0802デフォルトの名無しさん
2012/01/07(土) 04:10:34.68http://www.din.or.jp/~ohzaki/regex.htm#Without
print "[$1]\n" while <<'EOS' =~ /^([a-d]\.(?:(?! ).)*?)(?:\n\n|\n*\z)/gms;
a.あいうえお
b.アイウエオ
カキクケコ
サシスセソ
c.いろはにほへと
ちりぬるを
d.イロハニホヘト
チリヌルヲ
EOS
0803デフォルトの名無しさん
2012/01/07(土) 09:41:19.77もしかして表紙が赤い奴?うひいw
もう「初めてのPerl」は5版まで出てるから新しいの入手した方がいいと思います。
さてここからはスレの皆さんへ質問。
リャマ本って第3版と第5版で内容は大幅に変わっているんでしょうか?
第5版 http://www.amazon.co.jp/dp/4873114276/
第3版 http://www.amazon.co.jp/dp/4873111269/ (安い中古出品中)
0804デフォルトの名無しさん
2012/01/07(土) 18:40:20.28レスありがとうございます!
なるほど否定先読みを使ったアプローチをすれば良かったのですね。
マッチさせたくないケースは1行目より下に全角スペースだけの行がある場合なので
例えば
d.イロ ハニホヘト
チリヌルヲ
のように途中にスペースを含むケースはマッチさせたいです。
なので(?:(?!\n ).)*?)としたらうまくいきました。
本題からそれますが、このHERE演算子の使い方は初めて見ました。こういう使い方も出来るんですね。
示してもらった具体例をコードにするための方法としてぴったりしていると感じました。
趣味とはいえそこそこ長い間Perlを触って来ましたが、
まだまだ知らない事だらけのような気がしてきました。リャマボン買ってみようかなー。
0805デフォルトの名無しさん
2012/01/07(土) 19:32:46.63折角 /m 付けてるんだからその場合 (?!\n ) より (?!^ ) の方が文意を読み取り易いかもな。
0806デフォルトの名無しさん
2012/01/07(土) 19:48:31.250807デフォルトの名無しさん
2012/01/08(日) 16:45:11.65これはどういう意味でしょうか? (最終要素?)
perl 5.14で動くようにする簡単な記法も教えてちょーだい。
0808デフォルトの名無しさん
2012/01/08(日) 16:47:28.720809デフォルトの名無しさん
2012/01/08(日) 16:49:25.950810デフォルトの名無しさん
2012/01/08(日) 16:51:53.54インストールするくらいなら聞かずに試してるわ。
0811デフォルトの名無しさん
2012/01/08(日) 16:55:02.820812デフォルトの名無しさん
2012/01/08(日) 16:59:09.95抜き出すと、↓これで
my @a = ();
print $a[-1]->[0];
エラーメッセージは
Modification of non-creatable array value attempted, subscript -1 at x.pl line 2.
0813デフォルトの名無しさん
2012/01/08(日) 17:04:20.42なぜか
print $a[-1];
はOKで
print $a[-1]->[0];
はエラーなのですよ。
それで、古いperlは[-1]で最終要素にアクセス出来たのでは? と予想したんだけど。
require 5.005;と書いてある。^^;
>>808
古いperlを入れずに試す方法を早く教えれ。
0814デフォルトの名無しさん
2012/01/08(日) 17:09:41.450815デフォルトの名無しさん
2012/01/08(日) 17:13:04.01エラーの意味も分からないのねかわいそうに
0816デフォルトの名無しさん
2012/01/08(日) 17:20:14.680817デフォルトの名無しさん
2012/01/08(日) 17:20:16.08原因は別のところか面倒だなあ。
0818デフォルトの名無しさん
2012/01/08(日) 17:54:01.51お前は何を言っているんだ
0819デフォルトの名無しさん
2012/01/08(日) 17:59:46.25>>815 を見て分からないなら->の意味がわかってないのでは。
0820デフォルトの名無しさん
2012/01/08(日) 18:01:52.33リファレンスって言いたいのでは
0821デフォルトの名無しさん
2012/01/08(日) 22:04:01.89自戒自戒…
0822デフォルトの名無しさん
2012/01/08(日) 22:54:52.27とにかく前提を省略しまくった質問は勘弁だわ、、、、、
0823デフォルトの名無しさん
2012/01/09(月) 04:16:28.67お前にエスパー能力が足りてないだけ
0824デフォルトの名無しさん
2012/01/09(月) 11:25:49.71世の中にはおまえみたいな気違いもいる、といういい見本になってくれてありがとう。
0825デフォルトの名無しさん
2012/01/09(月) 19:14:30.680826デフォルトの名無しさん
2012/01/10(火) 17:59:44.50print "<INPUT TYPE=\"hidden\" NAME=\"pass\" VALUE=\"$FORM{'pass'}\">";
crypt関数っていうの使った方がいいのですか?
これだと元に戻すのができないんだよな
0827デフォルトの名無しさん
2012/01/10(火) 18:33:48.19>>1を最低10回は声出して復唱しような。
0828デフォルトの名無しさん
2012/01/10(火) 22:38:38.60>>827に加えてついでに書いとくと
> formで入力したパスワードをこのようにhiddenで渡していくのは好ましくないんでしょうか?
好ましくないどころか根本から大間違い
0829デフォルトの名無しさん
2012/01/11(水) 01:19:01.380830デフォルトの名無しさん
2012/01/11(水) 01:28:14.84お前セッションて知らないのか?
0831デフォルトの名無しさん
2012/01/11(水) 01:31:33.41自炎乙
0832デフォルトの名無しさん
2012/01/11(水) 03:01:59.77徳丸本読んで出なおせ
0833デフォルトの名無しさん
2012/01/11(水) 10:08:24.32HTMLソースで見られるか、外部打ちでデータ書き換えできるからってことだろ?
そんなことするやつなんておらんだろ。
仮にいたとしてもパスワードをcryptで暗号化しておけば見られても平気だし
リファラ調べて外部打ち禁止にすればいいだけだからな
0834デフォルトの名無しさん
2012/01/11(水) 10:13:15.69おめえら、全員web板へ逝けよ、ゴミカス
0835デフォルトの名無しさん
2012/01/11(水) 10:48:30.04てゆか2chで徳丸本読んでる奴って100人もいないんじゃないか?
>>833
一体お前いつの常識に基づいてプログラムしてるんだ
手元にあるテキストは90年代に出版されたやつじゃないだろうな?
あとWebの基本知ってればReferer改ざんなんて誰でもできるぞ
>>834
すまん、これで最後にする
あとはセキュリティのセの字もわからん奴が暴れ続けないことを祈りたい
0836デフォルトの名無しさん
2012/01/11(水) 12:20:06.7590年代でもそんなひどい本は売ってなかったろ さすがに…
>>834
ゴミカスって言った奴が真のゴミカス と昔から決まっている
0837デフォルトの名無しさん
2012/01/11(水) 12:28:56.90黙れ。死ね
web板でやれ。
0838デフォルトの名無しさん
2012/01/11(水) 13:42:23.480839デフォルトの名無しさん
2012/01/11(水) 13:52:39.97gtk2を使うべきなんですか?
0840デフォルトの名無しさん
2012/01/12(木) 00:32:13.460841デフォルトの名無しさん
2012/01/12(木) 12:29:13.88やっていることはほとんどかわらんな
0842デフォルトの名無しさん
2012/01/12(木) 12:49:31.17釣りの練習なら余所でやれ
0843デフォルトの名無しさん
2012/01/12(木) 23:47:24.10あ、俺も聞きたい。
Tkいじってて、GUI32:+LOFTに手を出してみたらLOFTがダメで、
wxPerlに手を出そうとして資料の無さに絶望してTkにもどった
趣味でいじっているだけの人間だけどGTK+ってどう?
0844デフォルトの名無しさん
2012/01/14(土) 15:36:11.960845デフォルトの名無しさん
2012/01/14(土) 16:46:17.24ママゾンの和書のページに「本のお買い得情報・バーゲン」っていう
のがあります。
0846デフォルトの名無しさん
2012/01/14(土) 18:02:22.870847デフォルトの名無しさん
2012/01/14(土) 23:48:15.14新しくするためにスクリプトを書き直したり、新しいモジュールの
使い方を覚えたりするの?その労力を何か創造的な方面に...
0848デフォルトの名無しさん
2012/01/15(日) 14:38:28.68TkはPPMでいれられない
5.14.2用どっかあるとこ知らない?
0849デフォルトの名無しさん
2012/01/15(日) 15:53:25.92foreach(@hobby_list){
print "hobby=$_";
}
これの結果が
ゲーム、アニメ、パャRンになってしまいますが
ファイルにゲーム,アニメ,パソコンと書き込んで
open(IN,"hobby.dat");
$line = <IN>;
close(IN);
@hobby_list = split(/,/,$line);
としてprintした場合ちゃんとパソコンと表示されますがこれはどうしてでしょうか?
また文字化けをパソ\コンと手動で文字化けを直すのではなくて
自動で直す方法を教えてください
0850デフォルトの名無しさん
2012/01/15(日) 15:58:13.46ActivePerl なら始めから Tkx が付いてくるけど。
Tk を使いたいのなら bribes.org にあるからリポジトリに追加しとくといいよ。
http://www.bribes.org/perl/ppm/package.xml
0851デフォルトの名無しさん
2012/01/15(日) 16:02:02.13q/ソんな文字コードで大丈夫か?/
0852デフォルトの名無しさん
2012/01/15(日) 16:03:26.05http://homepage1.nifty.com/nomenclator/perl/shiftjis.htm#errors
0853デフォルトの名無しさん
2012/01/15(日) 16:58:57.11今そこにないんだよ
0854デフォルトの名無しさん
2012/01/15(日) 17:05:30.62あるよ。
http://www.bribes.org/perl/ppm/Tk-804.029-PPM514.tar.gz
PPMでもちゃんと出てくる。
0855デフォルトの名無しさん
2012/01/15(日) 18:19:01.35ソースコードをEUCにするとソースコード中の全角文字が読めない文字になるので
好ましくないだからshift-jisでやってる。
パソコンをパソ\コンというように文字化けしないように
自動的に\を付けるようにするようにしたいのである。
0856デフォルトの名無しさん
2012/01/15(日) 19:03:11.13フォフォフォwwwwwww
0857デフォルトの名無しさん
2012/01/15(日) 19:05:17.57前者は、まずソースファイル上でメタキャラクタとして認識された後に、データとして格納されている。
後者は、最初からデータとして扱われている。
0858デフォルトの名無しさん
2012/01/15(日) 19:05:42.790859デフォルトの名無しさん
2012/01/15(日) 19:24:20.150860デフォルトの名無しさん
2012/01/15(日) 19:24:37.080861デフォルトの名無しさん
2012/01/15(日) 19:54:29.36諦めてuse utf8とuse Encodeで処理したまえ。
0862デフォルトの名無しさん
2012/01/15(日) 19:59:25.430863デフォルトの名無しさん
2012/01/15(日) 20:01:54.670864デフォルトの名無しさん
2012/01/15(日) 20:08:03.20___ ム i
「 ヒ_i〉 ゝ 〈
ト ノ iニ(()
i { ____ | ヽ
i i /__, , ‐-\ i }
| i /(●) ( ● )\ {、 λ
ト−┤. / (__人__) \ ,ノ  ̄ ,!
i ゝ、_ | ´ ̄` | ,. '´ハ ,!
. ヽ、 `` 、,__\ /" \ ヽ/
\ノ ノ ハ ̄r/:::r―--―/::7 ノ /
ヽ. ヽ::〈; . '::. :' |::/ / ,. "
`ー 、 \ヽ::. ;:::|/ r'"
/ ̄二二二二二二二二二二二二二二二二ヽ
| 答 | j c o d e . p l │|
\_二二二二二二二二二二二二二二二二ノ
0865デフォルトの名無しさん
2012/01/15(日) 20:12:19.95以下、「>>865空気嫁」が1000まで続きます
0866デフォルトの名無しさん
2012/01/15(日) 20:28:39.50utf8フラグを理解することだってわかってないのかね?
どうせ、sjisだけ使う、euc-jpだけ使うと言ってても
結局はライブラリの制限によってutf8フラグに
かかわらないといけないだろう?
ほんの数時間、ちゃんと勉強すれば分かるはずのことを避けて、
逆に時間がかかってたら意味が無いだろう。
それとも認めるのかい?
自分がutf8フラグを理解出来ない馬鹿だってことを。
0867デフォルトの名無しさん
2012/01/15(日) 20:37:43.53Windows環境ならuse utf8で標準入出力をcp932にした方が早い。
0868デフォルトの名無しさん
2012/01/15(日) 20:38:19.63がんばってjperlでも探してくるしかないな。
0869デフォルトの名無しさん
2012/01/15(日) 20:42:47.420870デフォルトの名無しさん
2012/01/15(日) 20:46:31.784つ前のレスも読めんのかバカ
0871デフォルトの名無しさん
2012/01/15(日) 20:47:36.50それじゃだめだろ。
お前、use encodingの意味わかってないな。
だ〜か〜ら〜、ちゃんとutf8フラグを勉強しろと。
0872デフォルトの名無しさん
2012/01/15(日) 20:59:04.83共感できない場合は
require 'jcode.pl';
@hobby_list=("ゲーム","アニメ","パソコン");
foreach(@hobby_list){
jcode::convert(\$_,'sjis','sjis','z');
print "hobby=$_";
}
0873デフォルトの名無しさん
2012/01/15(日) 21:01:34.34さらに
open(IN,"<:encoding(cp932)", "hobby.dat");
にすればおkじゃね?
0874デフォルトの名無しさん
2012/01/15(日) 21:12:42.96普通にutf8フラグを理解すれば良い。
遠回りすんなや。
0875デフォルトの名無しさん
2012/01/15(日) 21:25:05.31PerlIO触るのも別にバッドノウハウじゃねーだろ
0876デフォルトの名無しさん
2012/01/15(日) 21:26:55.480877デフォルトの名無しさん
2012/01/15(日) 21:28:57.72そんなに必死にならなくても
0878デフォルトの名無しさん
2012/01/15(日) 21:35:24.35それ以外の推奨されないようなやり方は、自分がいいなら使えばいいけど、
初心者に進んで教えてるのはよくないな。
0879デフォルトの名無しさん
2012/01/15(日) 21:35:59.270880デフォルトの名無しさん
2012/01/15(日) 21:42:47.07utf8フラグとい名前がまずかったね。
文字列フラグなどという名前だったらよかった。
文字列フラグはPerl固有のものだから
Perlコード外部から渡されるのは文字列ではない。
文字列でなかったらなにか?それはバイナリ。
バイナリを文字として扱いたければ、文字に変換しないといけない。
それがdecode。
ではソースコードに書いてあるのは、文字かバイナリか。
それはuse utf8を使えば文字で、そうでない場合はバイナリ。
話はこれだけ。
(やばいぞ、この流れw)
0881デフォルトの名無しさん
2012/01/15(日) 21:45:03.160882デフォルトの名無しさん
2012/01/15(日) 21:45:46.830883デフォルトの名無しさん
2012/01/15(日) 22:25:31.54Perlの他にもあるのかな?
0884デフォルトの名無しさん
2012/01/15(日) 22:30:02.65えっ、Perl は言語の中ではご機嫌を取らないほうだろ?
0885デフォルトの名無しさん
2012/01/15(日) 22:30:38.47よっぽどの理由が無い限りコードはutf8で書いときなよ。
0886デフォルトの名無しさん
2012/01/15(日) 22:32:28.440887デフォルトの名無しさん
2012/01/15(日) 22:46:52.720888デフォルトの名無しさん
2012/01/15(日) 22:48:06.950889デフォルトの名無しさん
2012/01/15(日) 22:53:05.31cp932とeucjpms使わんから…
0890デフォルトの名無しさん
2012/01/15(日) 22:53:15.88リテラルと比較するにはどちらかをコード変換して合わせる必要が
ある。まあ、推奨の方法によれば外部データのシフトJISをutf8に
変換(decode)するわけだが。
0891デフォルトの名無しさん
2012/01/15(日) 23:53:59.04ストロベリーパールっていうやつはどうなんですか???
リナックスみたいに ウインドウズでもPerlとかCPANモジュール使いたいんですが
お勧めの構成教えて下さい
なんか
crygwinっていうやつクソでした Linuxとまるっきり同じ感じにしたいです
ストロベリーパールっていうやつは
CPANモジュールとかダウンロードできるような機能あんですか???
教えてください
0892デフォルトの名無しさん
2012/01/15(日) 23:57:49.820893デフォルトの名無しさん
2012/01/16(月) 00:00:05.860894デフォルトの名無しさん
2012/01/16(月) 00:01:34.71てゆか板違いだし英語もろくに書けないし何なの一体
0895デフォルトの名無しさん
2012/01/16(月) 00:15:02.20ありがとうございます
解決 しました
0896デフォルトの名無しさん
2012/01/16(月) 00:18:12.89クノーピクスでも使っていやがれ
CD-ROMで起動できるfuckな環境だっぜ
0897デフォルトの名無しさん
2012/01/16(月) 00:19:23.33コマンドプロンプトだとなんか変な風になります
http://d.hatena.ne.jp/perlcodesample/20080706/1215291523
ここの設定を見たんでうが
よくできません
あいうえおって表示させると
あいうえお・うえおえお・お・・
って表示されます
もうWindowsはこりごりです
なんかutf8を表示させる端末などなんかあったら教えてください
調べたくないです
誰か変わりに教えてください
0898デフォルトの名無しさん
2012/01/16(月) 00:22:59.96すれち、すまぬ。
0899デフォルトの名無しさん
2012/01/16(月) 00:56:21.65全角文字すべての後ろに\をつけるようにした方が簡単だな
0900デフォルトの名無しさん
2012/01/16(月) 01:02:39.580901デフォルトの名無しさん
2012/01/16(月) 02:50:06.59iconvインスコして、以下のバッチを作って、適当に名前付けて、パス通しておけばいいよ。
@echo off
perl %* | iconv -f utf-8 -t cp932
という私もcolinux突っ込んでる。
0902デフォルトの名無しさん
2012/01/16(月) 08:39:53.80おれはいろんなperl入門のサイトで見て勉強してる
とほほとかKENTとか
0903デフォルトの名無しさん
2012/01/16(月) 09:32:20.970904デフォルトの名無しさん
2012/01/16(月) 11:25:54.920905デフォルトの名無しさん
2012/01/16(月) 12:29:29.87EUCで保存って項目がないわ
0906デフォルトの名無しさん
2012/01/16(月) 12:39:04.00$str =~ s/aaa/www/g;
aaaをwwwに置換はできますが
$str =~ s/\/www/g;
\をwwwに置換しようとするとエラーになります
どのようにして\を置換できるのか教えて
0907デフォルトの名無しさん
2012/01/16(月) 12:44:48.440908デフォルトの名無しさん
2012/01/16(月) 14:29:23.550909デフォルトの名無しさん
2012/01/16(月) 15:41:23.580910デフォルトの名無しさん
2012/01/16(月) 15:53:28.12でも$str="あ表あ";
$str=~s/あ/www/g;は置換できるけど
$str=~s/表/www/g;はエラーで置換できませんでした
これの置換方法を教えてください
0911デフォルトの名無しさん
2012/01/16(月) 15:56:10.450912デフォルトの名無しさん
2012/01/16(月) 16:11:11.29なにも考えずにコレを書いて、utf8で保存だ。
-- ここから --
#!c:/perl/bin/perl.exe
use strict;
use warnings;
use utf8;
binmode(STDOUT, ":encoding(cp932)");
binmode(STDIN, ":encoding(cp932)");
binmode(STDERR, ":encoding(cp932)");
-- ここまで --
0913デフォルトの名無しさん
2012/01/16(月) 17:50:05.14CP932で 表/ は(\x95,\x5C,\x2F)の並びになる。
\x5Cはバックスラッシュ(\)なので、次の文字のスラッシュ(/)はクォートされ、
リテラルキャラクタ扱いになる。
これを防ぐには、"\\"というようにバックスラッシュを二つ重ねて、
バックスラッシュをリテラルキャラクタにする。
つまり、表\/ (\x95,\x5C,\x5C,\x2F)の並びにすれば良い。
よって、
$str=~s/表\/www/g;
これは、CP932の文字列をバイナリ列のまま扱うことに起因する問題なので、
>>7を守れば問題は起きない。
参照:
http://perldoc.perl.org/perlre.html
0914デフォルトの名無しさん
2012/01/16(月) 17:55:11.13$str="パソコン";
&jcode'convert(*str,'euc');
print "str=$str";としたところ文字化けしてしまいました、
ちゃんとEUCに変換したのに結局はパソ\コンとして\を追加しなければだめでした
EUCならば文字化けしないはずじゃなかったのですか?
もちろんHTMLのMETAタグはEUC-JPにしてます
0915デフォルトの名無しさん
2012/01/16(月) 18:00:27.99>>857
0916デフォルトの名無しさん
2012/01/16(月) 18:11:20.470917デフォルトの名無しさん
2012/01/16(月) 20:14:53.13の3つの引数が指定できるらしいけど
それ以前のperlでは書き込みファイルの文字コードはどうやって指定するんでしょうか?
普通はそのまんまopenでファイル作るとsjis形式になっているのでそこにEUCデータを書き込むと
ファイル開いたとき全く読めない文字になっているので
0918デフォルトの名無しさん
2012/01/16(月) 20:46:53.130919デフォルトの名無しさん
2012/01/16(月) 20:49:47.950920デフォルトの名無しさん
2012/01/16(月) 20:59:50.23古くはjcode.plなどを使って文字コードを変換してから書き出した。
0921デフォルトの名無しさん
2012/01/16(月) 21:02:57.49オブジェクト指向による文字コード変換が行われるようになった。
0922デフォルトの名無しさん
2012/01/16(月) 21:05:07.62Encodeモジュールというものができ、日本語だけではなく、世界中
の文字を扱えるようになったと一部では信じられている。
0923デフォルトの名無しさん
2012/01/16(月) 21:11:45.160924デフォルトの名無しさん
2012/01/16(月) 21:14:11.130925デフォルトの名無しさん
2012/01/16(月) 21:19:05.990926デフォルトの名無しさん
2012/01/16(月) 21:21:45.65よっぽどの理由があるのでsjisで書かせてください。
0927デフォルトの名無しさん
2012/01/16(月) 21:24:07.87おとぎ話の中でしか。
0928デフォルトの名無しさん
2012/01/16(月) 21:27:47.040929デフォルトの名無しさん
2012/01/16(月) 21:31:05.84早く終わるよ。
今ではutf8を使ったのほうが
ノウハウ多いしね。
0930デフォルトの名無しさん
2012/01/16(月) 21:31:54.91よろしくお願いします。
0931デフォルトの名無しさん
2012/01/16(月) 21:35:06.67コードは何から何に変換するつもりなの?
0932デフォルトの名無しさん
2012/01/16(月) 21:39:34.97釣りの練習なら余所でやれよ。
0933デフォルトの名無しさん
2012/01/16(月) 21:52:36.13プログラマにそんな選択の自由与えられていないだろ。
0934デフォルトの名無しさん
2012/01/16(月) 22:16:45.89社長様がPerl4で書けなどと強要する脳内ブラック企業はもういいです
0935デフォルトの名無しさん
2012/01/16(月) 22:40:52.970936デフォルトの名無しさん
2012/01/17(火) 00:38:30.68インタプリタの互換性 < スクリプトの互換性 < データの互換性
な。スクリプトはある意味、データだからな。
0937デフォルトの名無しさん
2012/01/17(火) 02:39:24.50・分散システム
・無停止システム
・さらにこれらに付随する多数の小規模システム
そう簡単にUTF-8にできるわけじゃないし、そうする動機もない
0938デフォルトの名無しさん
2012/01/17(火) 02:42:50.410939デフォルトの名無しさん
2012/01/17(火) 02:58:45.17そんなのをPerlで作ってるところなんて無いからw
0940デフォルトの名無しさん
2012/01/17(火) 03:04:24.25それ以外でなら、Javaとかの方がいいかもしんない
0941デフォルトの名無しさん
2012/01/17(火) 08:37:49.45こういうとき絶対に「Java上で書かれた言語」とかじゃなく「生のJava」をお勧めされるよねw
0942デフォルトの名無しさん
2012/01/17(火) 09:38:22.87書き方はいくらでもあるだろ
0943デフォルトの名無しさん
2012/01/17(火) 12:15:39.86環境はatciveperl5.8でwin7でブラウザはIEです
ちゃんとterapadとかいうエディタでソースコードをUTF8保存しました
どこがだめなんでしょうか?
結局sjisかeucでやるしかないのかな?
use utf8;
binmode STDIN,":encoding(cp932)";
binmode STDOUT,":encoding(cp932)";
print "テスト";
0944デフォルトの名無しさん
2012/01/17(火) 12:20:55.05まずエラーメッセージの内容ください
0945デフォルトの名無しさん
2012/01/17(火) 12:32:10.47ソースにBOMついてない?
一応レス。
0946デフォルトの名無しさん
2012/01/17(火) 12:33:52.16IEでこのブラウザでは表示できませんってエラーがでてくる
0947デフォルトの名無しさん
2012/01/17(火) 12:38:09.74本買ってきて基礎からやった方がいいよ。
0948デフォルトの名無しさん
2012/01/17(火) 12:39:44.90terapad はutf-8n指定しないとBOM
が付くみたいだから、それためしてみ。
0949デフォルトの名無しさん
2012/01/17(火) 12:41:18.67そしてどこで買ったか知らないが「表紙が赤い」オライリー本で勉強するいつものパターンですね、わかります
0950デフォルトの名無しさん
2012/01/17(火) 13:00:27.50もしCGIの話をしてるんだったらスレ違いだ。
0951デフォルトの名無しさん
2012/01/17(火) 13:07:22.28よく恥ずかしくないなこのゴミ
>>1すら読めない池沼はさっさと回線切れや
0952デフォルトの名無しさん
2012/01/17(火) 18:50:33.75分かる方のみ回答をお願いします
0953デフォルトの名無しさん
2012/01/17(火) 19:00:09.940954デフォルトの名無しさん
2012/01/17(火) 22:11:12.310955デフォルトの名無しさん
2012/01/17(火) 22:23:31.86・Perl4スレ
・Perl5.005スレ
・Perl5.8以降スレ
に分割すればいいのかと夢想したが、そうすると話題がないので
スレが伸び悩む。
0956デフォルトの名無しさん
2012/01/17(火) 22:33:57.56>>1の先頭に
use 5.008;
って入れておくのか。
0957デフォルトの名無しさん
2012/01/17(火) 22:42:49.23それよりモダンなPerlの書き方に関するスレ立てたいんだが閑古鳥必死かね…
0958デフォルトの名無しさん
2012/01/17(火) 22:55:50.810959デフォルトの名無しさん
2012/01/17(火) 23:09:02.61で考え出されたものは・・・・・・だからね。
0960デフォルトの名無しさん
2012/01/17(火) 23:18:57.22お前が無知なだけw
お前の知ってる方法で、世界中の言語を
扱ってみろよ。
0961デフォルトの名無しさん
2012/01/17(火) 23:21:59.270962デフォルトの名無しさん
2012/01/17(火) 23:27:19.96length 関数と substr 関数が使えれば世界中の言語を扱っている
っていうことなの?プログラマ自身が読み書き会話できないと
その言語を扱うっていうのは無理なんじゃないかと思うんだけど。
0963デフォルトの名無しさん
2012/01/17(火) 23:32:16.87たとえば受信したメールを
文字化けしないように表示すること
0964デフォルトの名無しさん
2012/01/17(火) 23:33:45.51文字化けしないように表示できればいいだけだな。
そんなこともわかんないのか?w
0965デフォルトの名無しさん
2012/01/17(火) 23:37:41.39扱ってみろと言ってるだけ。
練習すらできない?
0966デフォルトの名無しさん
2012/01/17(火) 23:39:47.48もうじきクラス替えみたいだから、元気でな
0967デフォルトの名無しさん
2012/01/17(火) 23:40:39.42揚げ足?
0968デフォルトの名無しさん
2012/01/17(火) 23:44:26.89これから最長4年間ほどは耐えなきゃならんな
まあガンバれYO!プークスクス
0969デフォルトの名無しさん
2012/01/17(火) 23:45:05.440970デフォルトの名無しさん
2012/01/17(火) 23:46:52.21世界中の文字コードをちゃんと解釈して表示できるものを
jcodeなんかを使ってやってみせてよ。
Encodeでしかまともに実現できないでしょ。
大幅に時間がかかる方法は却下。
0971デフォルトの名無しさん
2012/01/18(水) 00:12:50.922.表示の問題はフォントや表示機器の問題。
3.jcode(jcode.plのこと?)は変換のためのものだから表示うんぬんに関係がない。
4.文字が扱えるけど言語は扱えないっていうのは例えば、数式の記述にギリシア文字が使えるが、ギリシャ語を扱えるわけじゃないっていう例がある。でもそれは恣意的な例に思える。例えばその言語の禁則処理はできなくてもいいのか?それで言語を扱えてると言えるのか?
まあ、世界中の文字を扱えるって言いたかったのかもしれないとエスパーするが。
0972デフォルトの名無しさん
2012/01/18(水) 00:14:13.12やってみせろと言ってるだけ。
練習もできないのか?
0973デフォルトの名無しさん
2012/01/18(水) 00:15:55.20できたから、現在主流になってる方法がつかえなく
いつまでも古い問題に振り回されてるんだよな。
勉強する気がないならプログラマ向いてないよ
やめたほうがいい。
0974デフォルトの名無しさん
2012/01/18(水) 00:15:55.94それと中学はやっぱりクラス替えあるってよ。
0975デフォルトの名無しさん
2012/01/18(水) 00:16:28.49日本語も不自由なようだw
0976デフォルトの名無しさん
2012/01/18(水) 00:17:40.73出来ない奴は、やらない理由を探す癖がある。
0977デフォルトの名無しさん
2012/01/18(水) 00:18:20.910978デフォルトの名無しさん
2012/01/18(水) 00:20:06.06つか世間的にはそれが一般的
メンテが続いているほとんどのCPANモジュールも
きちんと対応されてる。
お前と俺とでは格が違うよ。
俺はやった上で言ってる。
お前はやらない理由を探してる。
0979デフォルトの名無しさん
2012/01/18(水) 00:21:09.61そんなに向きになんな。
0980デフォルトの名無しさん
2012/01/18(水) 00:23:18.24これからもおれはお前の邪魔したりはしないから、向きになんな。
0981デフォルトの名無しさん
2012/01/18(水) 00:26:06.84じゃまとかなにか勘違いしてるんじゃないのか?
俺は、お前以外の人に、最新のPerlはEncodeモジュールを
使うのが標準と伝え、お前のように勉強しない奴が
どれほどダメな人間かをこうやって伝えてるんじゃないか。
やってみろといってもやらない、
やらない理由探し、俺には必要ない。
言い訳ばかり、お前のしゃべる言葉すべてが
恥ずかしい言葉として、他に人の目に写っている。
それこそが俺がこうやってレスしている目的なんだがw
0982デフォルトの名無しさん
2012/01/18(水) 00:26:50.860983デフォルトの名無しさん
2012/01/18(水) 00:27:45.46ダメ人間っぷりを晒してくれて
手伝ってくれて、どうもありがとうって感じなんだがねw
0984デフォルトの名無しさん
2012/01/18(水) 00:27:48.620985デフォルトの名無しさん
2012/01/18(水) 00:28:40.86きっとその件についても
やらない理由を探してるよw
0986デフォルトの名無しさん
2012/01/18(水) 00:29:42.64すまん、残り少なくなってきたが分からないので解説よろ。
0987デフォルトの名無しさん
2012/01/18(水) 00:31:27.24仕事さがしてないってことだろw
Encodeモジュール程度でさえ、やらない理由を言ってるやつだぞ
仕事探しもやらない理由を言うばっかりでやってないに決まってるw
0988デフォルトの名無しさん
2012/01/18(水) 00:31:53.700989デフォルトの名無しさん
2012/01/18(水) 00:32:18.720990デフォルトの名無しさん
2012/01/18(水) 00:32:35.640991デフォルトの名無しさん
2012/01/18(水) 00:33:01.860992デフォルトの名無しさん
2012/01/18(水) 00:33:21.950993デフォルトの名無しさん
2012/01/18(水) 00:33:39.810994デフォルトの名無しさん
2012/01/18(水) 00:33:59.010995デフォルトの名無しさん
2012/01/18(水) 00:34:23.030996デフォルトの名無しさん
2012/01/18(水) 00:34:46.060997デフォルトの名無しさん
2012/01/18(水) 00:35:08.94了解。納得したw
0998デフォルトの名無しさん
2012/01/18(水) 00:35:26.110999デフォルトの名無しさん
2012/01/18(水) 00:35:32.51になることがあるな。でもな、生きていればきっといいことがあるから、
あきらめるんじゃないぞ。
1000デフォルトの名無しさん
2012/01/18(水) 00:35:41.1210011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。