1 名前:デフォルトの名無しさん mailto:sage [2010/02/19(金) 16:47:06 ] "The duct tape of the Internet" こと、Perl についての質問箱です。 "There's more than one way to do it" ということで、 Perl の奥深さについて皆で語り合い、追求してまいりましょう。 CGI についての質問は板違いです。WEB プログラミング板でどうぞ。 CGI と Perlの区別がつかない人も WEB プログラミング板に行ってください。 (WEB プログラミング板: pc11.2ch.net/php/ ) CGI の質問は答えが Perl と全然関係ない話に帰着する場合が 多かったりするので WEB プログラミング板に行って聞いたほうが得ですよ。 このスレでは(CGI 以外の)純粋にPerlのみに関係する質問を取り扱っていこうと思います。 スレ違いの質問にはスルーか、速やかな誘導をお願いします。 www.perl.org/get.html ● 2010/02/19 現在の最新版: 5.10.1 ▼ 前スレ Perlについての質問箱 42箱目 pc12.2ch.net/test/read.cgi/tech/1257139591/ リンク集は >>2-3 Perl 日本語処理の基礎の基礎 >>4 過去スレは >>5-7 あたり
175 名前:デフォルトの名無しさん mailto:sage [2010/04/01(木) 17:12:59 ] プログラミング言語Perl
176 名前:デフォルトの名無しさん mailto:sage [2010/04/01(木) 17:31:06 ] 正直最初にその1冊買ってそれが最後の本になるなw あとはCPANとかでいろいろ探しまくる作業が残りの半分。
177 名前:デフォルトの名無しさん mailto:sage [2010/04/01(木) 17:40:50 ] >>175 どの本ですか? アマゾンなどのリンクください。 プログラミング言語Perlマスターコース プログラミングPerl という本なら見つかるのですが
178 名前:176 mailto:sage [2010/04/01(木) 17:43:19 ] ああ、俺が言ってるヤツは プログラミングPerl。 オライリーのらくだ絵の本。Perl開発者が書いたやつ。
179 名前:デフォルトの名無しさん mailto:sage [2010/04/01(木) 19:04:29 ] モダンPerl読んだ方がいいと思う
180 名前:デフォルトの名無しさん mailto:sage [2010/04/01(木) 19:14:03 ] それバイブルどころか入門書じゃないの?
181 名前:デフォルトの名無しさん mailto:sage [2010/04/01(木) 19:30:19 ] プログラミングPerlって説明が古いじゃん
182 名前:デフォルトの名無しさん mailto:sage [2010/04/01(木) 23:06:19 ] Effective Perlがいいぞ
183 名前:デフォルトの名無しさん mailto:sage [2010/04/01(木) 23:17:35 ] モダンPerlはサスペンダーが大絶賛してたから意地でも読まない
184 名前:デフォルトの名無しさん mailto:sage [2010/04/01(木) 23:57:33 ] 江川達也さんは何の本でもたいしてちゃんと読まずに大絶賛するだろうが
185 名前:デフォルトの名無しさん mailto:sage [2010/04/02(金) 00:19:10 ] モダンPerl読んだけど、情報がとびとびでさっぱり理解できない 初心者にすすめるもんじゃないよありゃ
186 名前:デフォルトの名無しさん mailto:sage [2010/04/02(金) 02:40:11 ] プログラミングPerlは思想的に面白い。 Perl6なんて本当は完成させたくないんだよ。 綺麗すぎる言語は退屈だ。
187 名前:デフォルトの名無しさん mailto:sage [2010/04/06(火) 00:05:27 ] Linux上で動かすPerlについて質問があります。 ファイルリストに記載されているファイルのみを 別のディレクトリにコピーしたいのですが、 どのようなコードを書けばよいのでしょうか? ファイルリストを読み込み、$file_listで1文字ずつ表示させる状態にして、 system("cp $file_list $dir_name");とやっているのですが、うまくいきません。
188 名前:デフォルトの名無しさん mailto:sage [2010/04/06(火) 00:16:52 ] >>187 print `cp $file_list $dir_name`; エラーがあるならこれで分かるんじゃないか
189 名前:デフォルトの名無しさん mailto:sage [2010/04/06(火) 00:31:12 ] 俺の予想では、chompするとうまくいく
190 名前:デフォルトの名無しさん mailto:sage [2010/04/06(火) 04:09:32 ] 俺が touch ';rm -fr /;' しといてやるぜw >>187
191 名前:デフォルトの名無しさん mailto:sage [2010/04/06(火) 20:19:04 ] blessしたオブジェクトをscalar($self)した時に 任意の文字列を返すにはどうすればよいでしょうか? 例えばDateTimeモジュールはDateTime->now()でオブジェクトを取得しますが、 scalar($now)すると現在時間が文字列で返ってくるのですが、 こういうのはどう実装すればよいでしょうか?
192 名前:デフォルトの名無しさん mailto:sage [2010/04/06(火) 20:38:04 ] 少なくともDateTimeではscalar使った時点で文字列に変わったりはしない print $now; とか my $datestr = "$now"; で文字列になることを言ってるんなら、overload
193 名前:デフォルトの名無しさん mailto:sage [2010/04/08(木) 01:08:37 ] >191 use overload ( 略 '""' => '_stringify', 略
194 名前:デフォルトの名無しさん [2010/04/10(土) 00:38:14 ] どうしても文字化けしてしまいます。 どなたかヒントでも頂けるとありがたいです。 WWW::Mechanize でCSVをダウンロードします。 その後print や Encode::decode などすると「Wide character ....」 と表示されました。 UTF8フラグが立っているのかと思い、Encode::encode("utf8",$data_str) などして、 ファイルを保存して開いてみると文字化けしてしまいます。 エディタはEmacsでエンコード指定して開き直したりもしてみました。 本当に試行錯誤して、encodeやdecodeのいろんな指定をしてみましたがダメでした。 しかしブラウザからCSVをダウンロードするとエクセルできちんと開きますし、 Emacs で UTF-8 で開くことが出来ます。 正直、分かりません・・・。
195 名前:デフォルトの名無しさん mailto:sage [2010/04/10(土) 00:43:24 ] Encode::from_to($data_str, "utf8", "cp932");
196 名前:デフォルトの名無しさん mailto:sage [2010/04/10(土) 01:25:59 ] >>194 わかってないなら弾の言う通りに書けよ。
197 名前:194 mailto:sage [2010/04/10(土) 02:00:29 ] 単純にdos窓で表示できない、と言う訳ではありません。Emacsで開いているので。 ブラウザで落とすとUTF8になっているので、ファイルはUTF8なんだと思うんですが。。 Mechanizeのcontent には独特なエンコードルールが有るんでしょうか? contentのデータをencodeするのがマズイのかな。
198 名前:デフォルトの名無しさん mailto:sage [2010/04/10(土) 02:23:11 ] Mech使わないから知らんけど、LWP::UserAgentとかみたいにHTTP::Responseでデータ返してくれるんなら my $content = $res->decoded_content(charset => 'none'); # $res isa HTTP::Response で生データ取れるからそれをそのまま保存するなりすればいいかと。
199 名前:デフォルトの名無しさん mailto:sage [2010/04/10(土) 02:42:18 ] 文字化けとかUTF8と思うとか曖昧なこと言わないで バイナリエディタで中身見ればいいのに
200 名前:デフォルトの名無しさん mailto:sage [2010/04/10(土) 02:54:08 ] >ファイルはUTF8なんだと思うんですが。 思うってなんだそりゃw 自分で見てから判断しれよ
201 名前:デフォルトの名無しさん mailto:sage [2010/04/10(土) 04:20:49 ] >>194 とりあえずDevel::Peekなりでdumpしてutf8flagが立ってるかどうかをちゃんと確認した方がいい。 曖昧なまんまの推測だと答えも推測になるからなかなか答えにたどり着かんよ
202 名前:デフォルトの名無しさん mailto:sage [2010/04/10(土) 05:28:58 ] >>194 iso-8859-1なんじゃねえの?
203 名前:デフォルトの名無しさん mailto:sage [2010/04/11(日) 00:35:30 ] Spidering Hacksに載ってたな
204 名前:デフォルトの名無しさん mailto:sage [2010/04/11(日) 00:42:17 ] Spidering Hacksの内容は今となってはさすがに古過ぎる スクレイピングのマナーとか心構えとかは参考になるけどな
205 名前:デフォルトの名無しさん [2010/04/14(水) 19:52:51 ] もう5年以上前になると思いますが、 Perlで書かれたプログラムを実行するとラクダの形で文字列が出力され、 そのプログラム自体もラクダの形に揃えられていたものをみたのですが、 探してみてもなかなかみつかりません。 少ない情報ですが、お分かりの方はいませんでしょうか?
206 名前:デフォルトの名無しさん mailto:sage [2010/04/14(水) 20:21:48 ] Acme::EyeDropsじゃねーの
207 名前:デフォルトの名無しさん mailto:sage [2010/04/15(木) 23:32:19 ] URLを画面に表示する時に、指定した文字数より長すぎる場合、 ディレクトリ階層を優先してまびくようにするにはどうしたらいいでしょうか? 例: $url = "www.abc123.net/abcdefg/hijklmn/opqrstu/vwxyz/foo1234.html " ←65文字 $url = omiturl($url, 50); print $url; この結果としてこんな感じにしたいです www.abc123.net/ ... /vwxyz/foo1234.html ←47文字
208 名前:デフォルトの名無しさん mailto:sage [2010/04/16(金) 00:36:20 ] >>207 use URI; sub omiturl { my $uri = URI->new(shift); my $maxlen = shift; my $repl_q = quotemeta(my $repl = "..."); my $path = $uri->path; until (length "$uri" <= $maxlen) { $path =~ s,\A/(?:$repl_q/)?[^/]+,/$repl, or last; $uri->path($path); } return "$uri"; } 手っ取り早くURI使ってるから$replに半角スペースとか使うと%20にされちゃうんで、 そのへん気に入らなかったら適当に直してくれ
209 名前:デフォルトの名無しさん mailto:sage [2010/04/16(金) 04:53:00 ] >>208 便利につかわさせて頂きます。 ありがとうございました。
210 名前:デフォルトの名無しさん mailto:sage [2010/04/16(金) 05:59:51 ] localhost/p2/read.php?host=pc12.2ch.net&bbs=tech&key=1266565626&ls=208-#r208 のようなクエリ文字列 or フラグメントの長いURLを>>208 に通すと無限ループするな 見た感じだとマッチしなくなった時点でループを抜けるように書かれてると思うけど、なぜだろう
211 名前:デフォルトの名無しさん mailto:sage [2010/04/16(金) 06:53:08 ] マッチもしないし文字数もこれ以上短く出来なくなったら無限ループだな。 例えば文字の長さを10とかやったら絶対無限ループ
212 名前:208 mailto:sage [2010/04/16(金) 10:08:30 ] oh…やっちまった……テストはちゃんと書きましょうってことだな… untilを↓に差し替えで無限ループは回避できるはず。>>207 がまだ見てることを祈る… for (my $i = 0; length "$uri" > $maxlen and $i < 20; $i++) { # ループ20回で強制的に抜ける $path =~ s,\A(/(?:$repl_q/)?[^/]+),/$repl, or last; last if $path eq $1; # マッチするが置換しても内容が変わらない場合抜ける $uri->path($path); }
213 名前:デフォルトの名無しさん mailto:sage [2010/04/16(金) 22:26:22 ] Cだと static char hoge[128]; write(fd, hoge, 128); とすれば128バイト分の0x00が書き込まれると思うのですが perlだとどのように記述すればいいでしょうか?
214 名前:デフォルトの名無しさん mailto:sage [2010/04/16(金) 22:45:34 ] print 0x00 x 128;
215 名前:デフォルトの名無しさん mailto:sage [2010/04/16(金) 22:46:25 ] あ、ごめん "\x00" x 128 だ
216 名前:デフォルトの名無しさん mailto:sage [2010/04/17(土) 00:38:56 ] >>214 >>215 ありがとうございます、繰り返し演算子という奴を使うんですね。
217 名前:デフォルトの名無しさん mailto:sage [2010/04/17(土) 16:23:26 ] 配列の任意の位置に要素を入れるにはどうすればいいのでしょうか? my @arr = qw(a b c d e); my $i = 3; ??? add_elem @arr, $i, "z"; print "@arr"; #=> a b c z d e
218 名前:208 mailto:sage [2010/04/17(土) 17:34:11 ] splice @arr, $i, 0, "z";
219 名前:デフォルトの名無しさん mailto:sage [2010/04/17(土) 18:05:40 ] >>218 d できました
220 名前:デフォルトの名無しさん [2010/04/21(水) 18:25:44 ] require HOGE::FUGA; を require $foo; みたいにして、 HOGE::FUGAの代わりにHOGE::PIYOを読むように動的に変更したいのですが、 この場合'HOGE/FUGA.pm'ってパス指定しないとうまくいきません。 出来ればHOGE::PIYOのような形式で指定したいのですが、 上手い方法はないでしょうか?
221 名前:デフォルトの名無しさん [2010/04/21(水) 18:26:35 ] なるほど、evalの中でrequireするか、でなければUNIVERSAL::require使えばよいのか。
222 名前:デフォルトの名無しさん [2010/04/22(木) 00:53:15 ] こんばんは Perlでグラフを書く必要がありGD::Graphというモジュールを発見したので 使おうと思っていろいろ調べました。 その結果、このモジュールは軸を対数表示にすることができない?ようなんですが この認識であってますかね? search.cpan.org/~mverb/GDGraph-1.43/Graph.pm
223 名前:デフォルトの名無しさん mailto:sage [2010/04/22(木) 00:58:38 ] 対数計算した座標渡せばいいだけでは
224 名前:デフォルトの名無しさん mailto:sage [2010/04/22(木) 02:12:27 ] それだとグラフ自体は意図通りに描画されるかも試練が 軸の目盛り(?)が意図したようにならんのでは?
225 名前:デフォルトの名無しさん mailto:sage [2010/04/22(木) 05:03:24 ] じゃあ使うのやめれば
226 名前:224 mailto:sage [2010/04/22(木) 11:20:42 ] おれは使ってないぞw
227 名前:デフォルトの名無しさん [2010/04/22(木) 19:34:23 ] >>223 レスありがとうございます。 描画はそれでいけますが素直にgnuplotのほうが無難かな。
228 名前:デフォルトの名無しさん mailto:sage [2010/04/22(木) 22:51:17 ] データだけ吐いてR言語がいいぞ
229 名前:194 mailto:sage [2010/04/22(木) 23:50:50 ] 文字化け use strict; use warnings; use utf8; use Encode; use Net::Delicious; my $delicious = Net::Delicious->new({user=>'hoge',pswd=>'fuga'}); my $agent = LWP::UserAgent->new; foreach my $bookmark ( $delicious->recent_posts ) { my $url = $bookmark->url(); print utf8::is_utf8($bookmark->description) . "\n"; my $title = Encode::encode('utf8',$bookmark->description); my $tags = Encode::encode('utf8',$bookmark->tags); $tags =~ s/([^ ] )/#$1/g; print $title . "\n"; print $tags . "\n"; print "---------------------------------------------\n"; } 上のようなスクリプトをかきましたが、descriptionが文字化けしてしまいます。 Net::Delicious からとったデータはutfフラグがたっていたので、そのままencodeしました。 UTFフラグがたったものをencodeして文字化けする場合はどのように対処すれば良いでしょうか?
230 名前:デフォルトの名無しさん mailto:sage [2010/04/23(金) 02:37:56 ] >>229 試してみたけど文字化けしないな 使い方も問題なさそうだけど
231 名前:デフォルトの名無しさん mailto:sage [2010/04/23(金) 15:55:39 ] >>229 cpan moduleがencodeに対応してたりしてなかったりするものを混ぜると わけわかんなくなる場合がある。 関係してそうなmoduleかたっぱしからupdateしてみ
232 名前:デフォルトの名無しさん mailto:sage [2010/04/23(金) 16:31:43 ] package TestC; sub new{ my $class = shift; my $self = { a => [], }; return bless $self, $class; } ---- my $c1 = new TestC; my $c2 = new TestC; としたときに $c1 と $c2 の a が同じものになってしまいます。 ($c1 で編集すると $c2 も同じになる) インスタンスごとに配列も別の実態を参照してほしいのですがどうすればよいでしょうか?
233 名前:デフォルトの名無しさん mailto:sage [2010/04/23(金) 16:50:56 ] 普通ならないけどな。編集して同じになったというのが わかるソースも出せよ。 package TestC; sub new{ my $class = shift; my $self = { a => [], }; return bless $self, $class; } package main; $c1->{a}->[0] = 100; printf "c1: %d, c2: %d\n", $c1->{a}->[0], $c2->{a}->[0]; すくなくとも上記で試した限りでは結果は c1: 100, c2: 0 だった。
234 名前:デフォルトの名無しさん mailto:sage [2010/04/23(金) 16:55:03 ] >>232 別物みたいだけど? package main; my $c1 = new TestC; my $c2 = new TestC; warn '$c1->{a} and $c1->{a}: ' . is_equal($c1->{a}, $c1->{a}); warn '$c1->{a} and $c2->{a}: ' . is_equal($c1->{a}, $c2->{a}); sub is_equal { my($x, $y) = @_; ($x eq $y) ? 1 : 0; } package TestC; sub new{ my $class = shift; my $self = { a => [], }; return bless $self, $class; } 1; ==================== $c1->{a} and $c1->{a}: 1 $c1->{a} and $c2->{a}: 0
235 名前:232 mailto:sage [2010/04/23(金) 17:05:46 ] >>233 すいません、長くなりそうなのではしょってしまいました。 以下を実行すると c1 2 c2 2 と表示されます。@5.10.0 package TestC; ####new省略 sub push_array{ my $self = shift; my $a = $self->{a}; push @a, $_[0]; } sub get_count{ my $self = shift; my $a = $self->{a}; return @a; } package main; my $c1 = new TestC; my $c2 = new TestC; $c1->push_array(1); $c2->push_array(2); print "c1 ".$c1->get_count."\n"; print "c2 ".$c2->get_count."\n";
236 名前:デフォルトの名無しさん mailto:sage [2010/04/23(金) 17:18:56 ] use strictしなかった結果がこれだよ!
237 名前:デフォルトの名無しさん mailto:sage [2010/04/23(金) 17:40:45 ] $a!
238 名前:デフォルトの名無しさん mailto:sage [2010/04/23(金) 17:43:02 ] $a ≠ @a
239 名前:デフォルトの名無しさん mailto:sage [2010/04/23(金) 17:44:47 ] $aと@aは全くの別物。このプログラムに登場する@aはmyで宣言されてない から常に同じパッケージ変数が使われてる あと$a, $bはsortが使う特別な変数なのでそれ以外の用途で使うとろくな目に 会わないからやめとけ。
240 名前:デフォルトの名無しさん mailto:sage [2010/04/23(金) 20:07:59 ] $a使った結果がこれだよ!
241 名前:デフォルトの名無しさん mailto:sage [2010/04/23(金) 20:08:54 ] sortが$a, $bを使うという仕様を見た時は目ん玉飛び出たな どんな糞仕様だよと
242 名前:デフォルトの名無しさん mailto:sage [2010/04/23(金) 20:56:57 ] どこが? Perlなら妥当な仕様だろ。
243 名前:デフォルトの名無しさん mailto:sage [2010/04/23(金) 21:14:28 ] $_ とか $@ とか $! とかも糞仕様
244 名前:デフォルトの名無しさん mailto:sage [2010/04/23(金) 21:26:09 ] つまりPerlは糞言語だから糞仕様なのがむしろ妥当だと
245 名前:デフォルトの名無しさん mailto:sage [2010/04/23(金) 22:34:24 ] $aと$bをどう使うと降順になるのか何度やっても覚えない そもそも、降順と昇順の意味がピンと来ない
246 名前:232 mailto:sage [2010/04/23(金) 22:44:39 ] 返答が遅くなり申し訳ありません。 色々と得心がいきました。 解決したところで引き続き頭をこねこねしたいと思います。 ありがとうございました。
247 名前:デフォルトの名無しさん mailto:sage [2010/04/23(金) 23:26:38 ] $_やら$@やら$!はだれがプログラムしても同じ変数だから分かりやすい っていう話があってだな
248 名前:デフォルトの名無しさん mailto:sage [2010/04/24(土) 00:01:40 ] >>247 なるほど そう考えると確かにと思わざるを得ない ただあまり使わない特殊変数は検索かけても引っかかってこないのがウザい
249 名前:デフォルトの名無しさん mailto:sage [2010/04/24(土) 00:03:24 ] perldoc perlvar
250 名前:デフォルトの名無しさん mailto:sage [2010/04/24(土) 00:26:59 ] とりあえず>>245 が頭が悪いと言う事はわかった
251 名前:デフォルトの名無しさん mailto:sage [2010/04/24(土) 01:56:06 ] UTF-8 で書かれたテキストファイル hoge.txt の内容を Windowsのバッチファイルからワンライナーで msg="おはよう" から msg=こんにちは に置換したいんですが・・・ perl -i.BAK -pe "s/(?<=msg=).*/こんにちは/" hoge.txt これだとシフトJISで書き込まれてしまうんです。 UTF-8 で書き込む方法があれば教えてください。
252 名前:デフォルトの名無しさん mailto:sage [2010/04/24(土) 10:37:27 ] 見つけたよ特殊変数のスレ 同じプログラム板じゃないか Perlの特殊変数は氏ね。絶対に使うな。可読性下がる pc12.2ch.net/test/read.cgi/tech/1141988910/34 34 名前:デフォルトの名無しさん[sage] 投稿日:2006/03/11(土) 22:02:24 特殊変数は、他人や「昔の自分」が書いたソースに出てきても まったく可読性に影響の無い、数少ない構成要素の一つだろう。 同じ名前の変数には、常に同じ意味を持つものが入ってるんだから。 「これ何のためにあるの?何が入ってるの?」って状態になるのは普通の変数のほう。
253 名前:デフォルトの名無しさん mailto:sage [2010/04/24(土) 14:02:59 ] >>251 文字コードがsjisであれば、 perl -i.BAK -pe -MEncode "s/(?<=msg=).*/Encode::from_to('こんにちは','sjis','utf8')/e" hoge.txt >>252 可読性とか書きようによってはいくらでも良くなるし悪くもなるもんなのに、言語仕様のせいにするのはおかしいよね。 他の言語から見れば、Perlは変数の前に$@%*とか使ったり、特殊変数の意味が理解できないだろうから気持ち悪く映るんだろうけど。
254 名前:デフォルトの名無しさん mailto:sage [2010/04/24(土) 18:26:39 ] $@%があるからスカラなのか配列なのか、分かりやすくて良いと思う俺って少数派?
255 名前:デフォルトの名無しさん mailto:sage [2010/04/24(土) 18:27:43 ] 多数派
256 名前:デフォルトの名無しさん mailto:sage [2010/04/24(土) 20:20:59 ] じゃあリファレンスも別のプリフィクスを採用するべきだったよね あと配列もハッシュも中身にアクセスするとき$プリフィクスを要求するのは分かりにくいよね(これはperl6で変更になるけど)
257 名前:デフォルトの名無しさん mailto:sage [2010/04/24(土) 20:23:23 ] あれはあれでいいんだよ
258 名前:194 mailto:sage [2010/04/24(土) 20:59:32 ] >>231 ,230 Macだといけました。 Windowsだと化けるんだな。。 ppmのモジュールは確かに古かったから、cpanで入れ直してみようかと思います。 ちなみにeshellで出力してるので、winでもcp932にencodeしなくても大丈夫です。 てかこれで途中までは日本語がきちんと表示されます。
259 名前:デフォルトの名無しさん mailto:sage [2010/04/25(日) 01:08:38 ] >>256 おれはperl5の方が好きだ スカラだから$で統一されててわかりやすい
260 名前:デフォルトの名無しさん mailto:sage [2010/04/25(日) 03:03:46 ] 最終的に得るものがスカラ、という考え方か 例えばデリファレンスで配列を得たけりゃ@$array_refだし 確かにそりゃそうだなぁ
261 名前:デフォルトの名無しさん mailto:sage [2010/04/25(日) 05:23:43 ] あれだよな。@は配列変数 って書くサイトや本が悪いよな。 配列へのアクセスなのに。
262 名前:デフォルトの名無しさん mailto:sage [2010/04/25(日) 10:58:03 ] >>260 そういう思想で作ってあるって習ったから覚えやすかった
263 名前:デフォルトの名無しさん mailto:sage [2010/04/25(日) 14:29:25 ] @names = ('OZA-', 'POPPO', 'MASZOE'); @mes = ('012345678901234567890123456789', 'あいうえおかきくけこさしすせそたちつてとなにぬねのはひふへほ', いいいいい); 例えばこのようなものを、次のように2つのカラムがあるかのように出力したいのですが、どうしたらできるでしょうか? OZA- .| 012345678901234567890123 ...| 456789 POPPO | あいうえおかきくけこさしすせそたちつてとなにぬ ...| ねのはひふへほ MASZOE .| いいいいい こんなのでできるかなと思ったのですが無理でした… format AAA = @<<<<<<<<<< | @<<<<<<<<<<<<<<<<<<<< ~~ | @<<<<<<<<<<<<<<<<<<<< . よろしくお願いします。
264 名前:デフォルトの名無しさん mailto:sage [2010/04/25(日) 14:47:40 ] と思ったらformatでできました。お騒がせしました。
265 名前:デフォルトの名無しさん mailto:sage [2010/04/25(日) 19:20:18 ] >>253 ありがとうございます。すごい勉強になります。 > perl -MEncode -i.BAK -pe "s/(?<=msg=).*/Encode::from_to('こんにちは','sjis','utf8')/e" hoge.txt だと Modification of a read-only value attempted at C:/Perl/lib/Encode.pm line 195, <> line 280. って叱られるので perl -MEncode -i.BAK -pe "s/(?<=msg=).*/$s='こんにちは';Encode::from_to($s,'sjis','utf8');$s/e" hoge.txt でできました! Jcode使えば少し短くなりました perl -MJcode -i.BAK -pe "s/(?<=msg=).*/Jcode->new('こんにちは','sjis')->utf8/e" hoge.txt
266 名前:デフォルトの名無しさん mailto:sage [2010/04/26(月) 12:59:43 ] Perlの特殊変数って言っても、使うのは $_ $@ @_ とかほとんどこんなもんだろ。全部覚えてる奴なんてまずいない。
267 名前:デフォルトの名無しさん mailto:sage [2010/04/26(月) 14:39:27 ] 最低限:$_ @_ $1〜$9 $a $b 覚えてると便利:$@ $! $. $/ $? $$ ゴルフやるなら:$\ $, $" $& $` $' @F
268 名前:デフォルトの名無しさん [2010/04/26(月) 21:46:22 ] open IN,"file"; while(<IN>){ $str .= $_; } file内のテキスト全てを、$strというスカラー変数に代入してみました。 ファイルサイズが小さければ問題ないが何万行とかだと代入処理に失敗しますよね?
269 名前:(!>>268) mailto:sage [2010/04/26(月) 22:29:11 ] そういえば数値はスカラに2^1023以上、2^1024未満が入ったけど、 このヘンの上限というか仕様ってどこか載ってます?
270 名前:デフォルトの名無しさん mailto:sage [2010/04/26(月) 23:29:24 ] >>266 それは文法の一部で、特殊変数じゃない
271 名前:デフォルトの名無しさん mailto:sage [2010/04/27(火) 02:49:33 ] >>268 open IN,"file"; read IN,$str,-s IN;
272 名前:デフォルトの名無しさん mailto:sage [2010/04/27(火) 03:17:45 ] use File::Slurp; $str = read_file('filename'); >>268 メモリあれば大丈夫だよ。ただ毎行 .= すると遅い
273 名前:デフォルトの名無しさん [2010/04/27(火) 17:40:54 ] 教えてエロい人 perlはいつからスカラの要素を参照するときに@で参照できるようになったんだ? my @sca = (1,2,3); print $sca[1]; // OK... print @sca[1]; // OK?! @sca[1] = 'x'; print @sca[1]; // OK?!?!
274 名前:デフォルトの名無しさん mailto:sage [2010/04/27(火) 17:49:04 ] >>273 それスカラじゃなくてたまたま1要素の配列スライス。 配列スライス自体はperl4の昔からすでにあった。 それより前はシラネ
275 名前:デフォルトの名無しさん mailto:sage [2010/04/27(火) 17:53:30 ] my @sca = (1,2,3); @sca[0..2] = "a".."c"; print @sca[0..2], "\n", @sca[0, 2], "\n", @sca[0];