[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 2chのread.cgiへ]
Update time : 02/17 02:25 / Filesize : 157 KB / Number-of Response : 572
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

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



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 あたり

159 名前:デフォルトの名無しさん mailto:sage [2010/03/27(土) 20:21:09 ]
myだろ普通
JavaとかPHPとか他の言語は自動的に局所変数だ

160 名前:デフォルトの名無しさん mailto:sage [2010/03/28(日) 09:35:47 ]
最近は受ける変数名を考えるのが面倒だから
$_[0]とかを直接使ってるw

161 名前:デフォルトの名無しさん mailto:sage [2010/03/28(日) 13:56:50 ]
pythonのctypesに相当するものはありますか?

162 名前:デフォルトの名無しさん mailto:sage [2010/03/28(日) 14:03:11 ]
ん?PythonってCのやり方に頼りだしたんだw

163 名前:デフォルトの名無しさん mailto:sage [2010/03/28(日) 14:04:47 ]
書き忘れた
CPANでCtypeで検索しろ

164 名前:デフォルトの名無しさん mailto:sage [2010/03/29(月) 11:12:09 ]
swigしかないようです

165 名前:デフォルトの名無しさん mailto:sage [2010/03/29(月) 12:40:00 ]
Archive::Zipの解説しているWebPageないでしょうか。
できれば日本語で・・・

ぐぐっても、圧縮/解凍のやりかたしか出てない;;

166 名前:デフォルトの名無しさん mailto:sage [2010/03/29(月) 16:31:31 ]
>>165
「圧縮/解凍のやりかた」以外の何を知りたいのか
具体的に書くべきだろうな、そういう時は。
「マニュアルに書かれている内容が理解できないので
噛み砕いて教えて下さい」って言ってるのと同義なんだから。
search.cpan.org/dist/Archive-Zip/lib/Archive/Zip/FAQ.pod
search.cpan.org/dist/Archive-Zip/lib/Archive/Zip.pm

167 名前:デフォルトの名無しさん mailto:sage [2010/03/29(月) 16:48:45 ]
>>166
すみませんでした。

具体的にやりたいのは、画像ファイルを無圧縮ZIPに固めておき、それを解凍せずにブラウザに表示したいのです。
ローカルファイルを開いたハンドルから表示するのは出来たので、
ZIP内のファイルのハンドルが取れれば、出来そうなのですが・・・

my $zip = Archive::Zip->new('test.zip');
my $fh = $zip->open('hoge.jpg');

みたいに出来たらな・・・と。




168 名前:デフォルトの名無しさん mailto:sage [2010/03/29(月) 19:22:43 ]
>>167
お望みの物はArchive::Zip::MemberReadかい


169 名前:デフォルトの名無しさん mailto:sage [2010/03/30(火) 15:14:12 ]
>>168
ありがとうございます。
早速調べて試してみたのですが、Not a GLOB reference のエラーが出ます。perl は初めてなので、なにか勘違いしていると思いますが、それがどこかわかりません。

#!/usr/bin/perl
use Archive::Zip;
use Archive::Zip::MemberRead;

$imgtype = 'jpeg';
#// file @
# open(IMG, "./1.jpg") or die;

#// zip A
$zip = Archive::Zip->new('./1.zip');
$IMG = Archive::Zip::MemberRead->new($zip, "1.jpg");

#// イメージ表示
binmode $IMG;
binmode STDOUT;
print "Content-type: image/$imgtype\n\n";
print while (<$IMG>);
#// 画像クローズ
close($IMG);
#// 終了
exit(0);

@を生かし、Aを殺すとうまくいきますが、逆だと binmode $IMG の箇所でNot a GLOB referenceとなります

170 名前:デフォルトの名無しさん mailto:sage [2010/03/30(火) 16:28:22 ]
Archive::Zip::MemberReadは中をのぞいてみたけど
ハッシュをblessしただけの普通のオブジェクトだから
ファイルハンドルとしては使えない。あくまで同じような
メソッドが用意してあるだけの普通のオブジェクト。
binmodeとかはムリ。

IO::Stringみたいにグロブにtieしていろいろがんばれば
なんとかなるけどそこまではやってないようです。

171 名前:デフォルトの名無しさん mailto:sage [2010/03/30(火) 16:55:00 ]
テンポラリに展開して、それを読み込んだほうが良さそうですね。
そういう方向で修正していって見ます。

わざわざ中をのぞいていただき、ありがとうございました。


172 名前:デフォルトの名無しさん mailto:sage [2010/03/31(水) 21:16:21 ]
ドキュメントぐらい読めよ関数名見りゃだいたい分かるだろ
$zip->contents(FILENAME);

173 名前:デフォルトの名無しさん mailto:sage [2010/04/01(木) 11:14:51 ]
>>172
テンポラリファイルを使用する形で出来上がっていましたが、$zip->contents(FILENAME)を使用することで
「ファイルの書き込み→読み込み→出力」が、「ファイルの読み込み→出力」にすることが出来ました。
画像の縮小をさせるとレスポンスが遅いのですが、玄箱には重過ぎるのでしょう。

まだフロント(iアプリ)はテスト用でしか試してませんが、なんとか目処がつきました。
ありがとうございます。


174 名前:デフォルトの名無しさん mailto:sage [2010/04/01(木) 17:09:07 ]
Perlのバイブル本って何?

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の方が好きだ
スカラだから$で統一されててわかりやすい






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<157KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef