トップページ⇒tech
1001コメント321KB

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

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさんNGNG
"The duct tape of the Internet"こと、
Perlについての質問箱です
"There's more than one way to do it"ということで
ぱぁるの奥深さについて皆で語り合い、追求してまいりましょう。

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

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

姉妹スレッド(Perl コーディング初心者質問コーナー Part37@WebProg)
http://pc5.2ch.net/test/read.cgi/php/1093106507/

過去ログは>>2-1001あたり
0153デフォルトの名無しさんNGNG
>>151
PAR - Perl Archive Toolkit
JavaのJARのようなツールだが、exeも作成できる。

http://search.cpan.org/~autrijus/PAR-0.85/
0154デフォルトの名無しさんNGNG
>>152
>その後はちゃんと串刺してやってる。

ヲイ…
0155デフォルトの名無しさんNGNG
>>152
「ちゃんと」の用法がちゃうやろ。
そもそもアク禁されるほどの連アタにならないように「ちゃんと」接続を制御せな。
0156デフォルトの名無しさんNGNG
>>153
こんなのあるんですね。
でもこれってperl2exeと同じようなものですか?
0157デフォルトの名無しさんNGNG
>>148 >>150 >>152

貴重な意見<(_ _*)> アリガトォ
GET形式URLへはブラウザからだと取得できるので、
UA名を何かに変えてやってみまつ。

0158デフォルトの名無しさんNGNG
オブジェクト指向ではない一本糞のようなプログラムを書く場合
パッケージには触れない(パッケージ名を変えたりしないなど)方が
よいのでしょうか?
0159デフォルトの名無しさんNGNG
糞は早く流さないと臭いのでいちいちパッケージ変えたりしません
逆に、臭いからパックするという考えもアリ
0160デフォルトの名無しさんNGNG
家のトレイ、水洗じゃないので、全部そのままにしてまつ。
臭いです。
0161デフォルトの名無しさんNGNG
WindowsでGUIのperlプログラムを作ろうとしています。
Win32 GUI LoftのDemoは以下のようにコンソールよりGUIで起動できました。
 C:\Perl\loft\Demo\FetchURL>perl Fetch.pl
(ppmでインストールした)PAR-0.75で以下のようにexe化を行いました。
 C:\Perl\loft\Demo\FetchURL>pp --gui -a fetch.gld -o hoge.exe Fetch.pl
しかしhoge.exeを実行したときに
>par.exe - エントリ ポイントが見つかりません
>プロシージャ エントリ ポイント Perl_Gsv_placeholder_ptr がダイナミック リンク ライプラリ perl58.dll から見つかりませんでした。
と警告ダイアログが表示され実行されませんでした。
私には「何かインストールし忘れてるのかな」と感じただけなのですが、
どなたか解決方法のヒントをいただけないでしょうか。

今は(ppmでは手に入らない)PAR-0.85にアップグレードでどうにかならないかと、
Mkaefile.plやnmakeあたりの使い方を調べています。

Windows 2000
Perl 5.8.2
VC++ 有り
0162デフォルトの名無しさんNGNG
>>161
初めて知ったけど、Tkより楽ちんそうだね。
入れてみようかな。
0163デフォルトの名無しさんNGNG
2 1411.441578987632500 345.523617718994840 1065.917961268637800
91 1463.730149786665800 368.860556376834380 1094.869593409831400
165 1353.381577247856100 303.768416713978350 1049.613160533877600

こういった内容のファイルから入力しようとしているんですが、readだとバイト数が一定でないため使えません
どういったようにスペースで別れた数値を読み取れるようにできるんでしょうか?
0164デフォルトの名無しさんNGNG
while (<>) { push(@a, $_) for split(/\s+/); }

Perlのキホンと思われ
これに枝葉ごてごてつければどうにでも応用が利く
0165デフォルトの名無しさんNGNG
while (<>) { chomp; @a=split; ... }というのは良く見かけるが、
@a=split(...)のかわりにpush(@a, $_) for split(...)というのは
はじめて見たな。どこの芸風だろうか?
0166デフォルトの名無しさんNGNG
pushにも良い所があったって事でこの話題は終了しとこうぜ
0167デフォルトの名無しさんNGNG
あんまりPerl詳しくないので、うろ覚えの内容を書いてしまうけど、、
ヘンな記号みたいな特殊変数で、レコードセパレーターというか、
行(?)の区切りを設定する変数なかったっけ。

それをスペースにするっていうのはどうよ。
0168デフォルトの名無しさんNGNG
foreach (<>) の中の人と同じでしょ。
chompしてないところとかなんでもメモリに持ちたがるところとか
0169デフォルトの名無しさんNGNG
>>165
1行ずつ処理するんじゃなくて@aに全部ためるのが目的だったということですな。
0170デフォルトの名無しさんNGNG
>>164-168
splitを使えばよかったのですね、ど素人質問に答えてくれてありがとうございますた。
0171デフォルトの名無しさんNGNG
>>169
サンプルデータを見るに、明らかに行指向だと思うんだが
全部ごちゃ混ぜにした後で切り分けんの?
0172デフォルトの名無しさんNGNG
>>168
べつにchompぐらいええやん。
0173デフォルトの名無しさんNGNG
172 名前:デフォルトの名無しさん[sage] 投稿日:04/09/13 18:44:57
>>168
べつにchompぐらいええやん。
0174デフォルトの名無しさんNGNG
チョンプ?
0175172NGNG
chomp要らんやんって意味。
>>168は>>15か?
0176デフォルトの名無しさんNGNG
chompいらんって言ってる人は真性なの?
0177デフォルトの名無しさんNGNG
>>172
何故にchompいらないと思うのかね。
0178デフォルトの名無しさんNGNG
>>176
単なる初心者だろ
0179デフォルトの名無しさんNGNG
  _  _∩
( ゚∀゚)彡  chomp! chomp!
 ⊂彡
0180デフォルトの名無しさんNGNG
思わぬ魚が釣れた>>176-178
0181デフォルトの名無しさんNGNG
びっくりするほどTMTOWTDI!
びっくりするほどTMTOWTDI!
0182デフォルトの名無しさんNGNG
ワラタ、単なる初心者が居るな(w
あのコードなら chomp いらねーよ

0183デフォルトの名無しさんNGNG
┐(´∀`)┌ヤレヤレ
0184デフォルトの名無しさんNGNG
>>176-178は何が不満なんだ?正直、聞きたい(w
0185デフォルトの名無しさんNGNG
perldoc -f split

split /PATTERN/,EXPR,LIMIT
split /PATTERN/,EXPR
split /PATTERN/
split

Splits the string EXPR into a list of strings and returns that list.
By default, empty leading fields are preserved, and empty trailing ones are deleted.
                              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
0186デフォルトの名無しさんNGNG
>>185
それは split によって空文字列のフィールドが生成された場合、
後ろのものは捨てられると言っているだけだ。

print map "[$_]\n", split /\t/ for (
  "foo\tbar\tbaz\n", # foo, bar, baz\n
  "\t\thoge\t\tfuga\t\t", # '', '', hoge, '', fuga
);

chomp が要らないのは split のパターンが /\s+/ なので改行も
デリミタとして扱われる為。パターンを /\s/ にすれば分かる。

print map "[$_]\n", split /\s+/ for (
  "foo\tbar\tbaz\n", # foo, bar, baz
  "\t\thoge\t\tfuga\t\t", # '', hoge, fuga
);
print map "[$_]\n", split /\s/ for (
  "foo\tbar\tbaz\n", # foo, bar, baz
  "\t\thoge\t\tfuga\t\t", # '', '', hoge, '', fuga
);

fail safe や fool proof の為、常に chomp を入れておくのは
悪い選択では無いが、chomp を省くとこういうつまらん部分で
ハマる事もあるのでお勧めできない。
0187デフォルトの名無しさんNGNG
>>186
>>17
0188172NGNG
だからいらないんでしょ?
やれいうなら tr/\x0D\x0A//d; 使っとくけど。
0189デフォルトの名無しさんNGNG
PerlはいつからWindowsオンリーの言語と化したのですか?
0190172NGNG
>>189
それ俺に言ってんの?(w
0191デフォルトの名無しさんNGNG
>>186
ご高説ご尤もということで(w
>163に関しては、\nの後の空フィールドは自動的にナイナイされるんだから
別にいいんじゃない?
0192デフォルトの名無しさんNGNG
ちょmpはジョーシキ
0193デフォルトの名無しさんNGNG
>>190
お前以外に誰に言ってると思ってんの?
0194172NGNG
>>193
ほ〜このコード自体はUnixでもMacでも窓でも使えるぞ。

ttp://www.din.or.jp/~ohzaki/perl.htm#CRLF_Remove

ココ読んでこいや。
0195デフォルトの名無しさんNGNG
>>194
ああ。
それ自体はUNIXだろうがMacだろうが使えるだろうよ。
お前こそよく読め。
0196172NGNG
>>195じゃ、窓専用って>>189の発言はなによ?
0197デフォルトの名無しさんNGNG
>>196
分からないならもういいよ。
Windowsしか使わないお前自分自身のためのソースなら問題ないしさ。
0198デフォルトの名無しさんNGNG
m9(^Д^)プギャーーーッ
0199172NGNG
>chomp は Windows(DOS) や Mac,UNIX といった処理系に依存します.

俺がいいたいのはここだ。
0200デフォルトの名無しさんNGNG
で?ってゆう
0201デフォルトの名無しさんNGNG
>>199
依存して当たり前じゃねーか・・・
そもそも、UNIXで動くPerlはUNIX上で生成したテキストをUNIX上で処理するように作られてんだよ。
Windowsで作られたテキストをUNIXで処理するのをデフォルトなんかで作る訳ねーだろ・・・
わかるだろ?俺の言いたい事が。
0202デフォルトの名無しさんNGNG
漏れの場合は UNIX のデータを Win で処理したり逆をしたりするから、
chomp より >>188 の方が使いでがあるなあ。
0203172NGNG
だから、同一環境で作ったデータ使う環境ならchompでもええけど。
別OSから持ってきたデータだとつかえんでしょ?

ソーなったとき仕様で使えませんとでも言うの?
0204202NGNG
まあ適材適所ってことでいいんじゃないの。
「ソーいう仕様です」でまかり通るケースも多いでしょう。
0205デフォルトの名無しさんNGNG
その時はその時だろ
バカ?
0206172NGNG
俺は馬鹿でもいいけどさ。
0207デフォルトの名無しさんNGNG
あー・・・
なんか、もういいや。
その時々の対処でって事で。
0208デフォルトの名無しさんNGNG
俺もよくUNIXのデータをWinで加工するが、データを落とす時に改行コード変換するから
別にchompで問題なし。というか、chompでないと可読性下がるんでchomp推奨。
>>194のはいろんなプラットフォームのデータを処理するCGI向けコーディングの話だろ?
0209デフォルトの名無しさんNGNG
そんなん163が書けばいいこと。
なんで回答者がOSに依存しないよう考慮しなければいけないんだ?
使い捨てスクリプトかもしれんのに。
0210172NGNG
最後に、chompが駄目とはいわん。
あれこれ決めつける発言がウザかっただけだ。(w
0211デフォルトの名無しさんNGNG
最終結論は、
>>163のバカ!って事でFA?
0212デフォルトの名無しさんNGNG
Ruby の chomp なんかは CR でも LF でも CRLF でもてきとーに削ってくれて
気が利いてるなと思う。
0213デフォルトの名無しさんNGNG
>>212
適当に削ってくれてる辺りが適当な作りっぽくていい味出してるな
0214デフォルトの名無しさんNGNG
改行コードがCRの場合テキストにLFが入るわけねーしRubyは頭イイ
0215デフォルトの名無しさんNGNG
なぜPerlスレにルビ厨が混じってんだ?
0216デフォルトの名無しさんNGNG
>>211
Perlスレに質問するってことは、Perlで処理しようと思ってるわけだろ。
正規表現でテキスト処理ってPerlの使い方の代表みたいに紹介されてると思うんだけど
そういうの全く見たり聞いたりしてないのかな
0217デフォルトの名無しさんNGNG
>>214
極端な例。
各フィールド内の改行表現は CR、レコード区切りは LF の CSV 。

binmode DAT;
print DAT (
qq/1,abc\x0Ddef,2,ghi\x0A/,
qq/3,jkl,4,mno\x0Dpqr\x0D\x0A/,
qq/\x0Dstu,5,6,7\x0A/,
);
0218デフォルトの名無しさんNGNG
馬鹿スレさらしage
0219デフォルトの名無しさんNGNG
>>217
それを「テキスト」と言えるかは微妙。それこそ適材適所だべ。
0220デフォルトの名無しさんNGNG
EXCELでセル内に改行があるCSV作ると、
セル内改行はLFになるよね。
行の区切りはCR LFで。
0221デフォルトの名無しさんNGNG
で、それがテキストファイルだと?
0222デフォルトの名無しさんNGNG
勉強になるなぁ〜、いろいろ。
個人的には、whileだchompだと云うぐらいなら
てめぇが即レス回答しろや、ボケッ!とか思っちゃうが。
0223デフォルトの名無しさんNGNG
>>221
CSVはバイナリファイルだと?
0224デフォルトの名無しさんNGNG
>>219
いやまぁ微妙だから「極端な例」なんだけどね。
少なくとも while (<>) { chomp; ... という慣用句なら
問題なく処理できるけど。

あと見落とされがちだが chomp は $/ と連動してるので、
陽に $/ を設定すれば行末で悩む必要は無い。

local $/ = '0';
chomp, print "[$_]" while <DATA>;
__DATA__
102030405060708090
0225デフォルトの名無しさんNGNG
よーし、パパJAVAに移行しちゃうぞー!
0226デフォルトの名無しさんNGNG
>>18です。
再び質問です。
>>51で同じファイル内のものはたとえ名前(ameなど)が同じでもアルファベットを
表示しないようにするには、どうしたらよいのでしょう。
0227デフォルトの名無しさんNGNG
>>226
ちょっとは自分で考えてるんか?
0228デフォルトの名無しさんNGNG
foreachの件と言い、>>164と言い
妙ちくりんなコードはいったい何なんだ?
どっかに発生源があるんか?
アホウが書いた本がなぜか売れてるとか。
0229デフォルトの名無しさんNGNG
チョップするかわりにいつも
while(<>){
s/\s+$//;
}
みたいに書いてる。
0230デフォルトの名無しさんNGNG
でも一行ずつ処理に区切り付けたらソートとか出来ないんじゃないの?
0231デフォルトの名無しさんNGNG
>>226です。
いくら考えてもわかりません。
>>18で同じファイル内のものはたとえ名前(ameなど)が同じでもアルファベットを
表示しないようにするには、どうしたらよいのでしょう。

あまり聞きすぎるのも悪いので。
perlの基本的なことは勉強したのですが、まだ慣れていないようです。
プログラムの例が豊富にのっているようなホームページはないのでしょうか?

0232デフォルトの名無しさんNGNG
>>231
>>3
0233デフォルトの名無しさんNGNG
>>223
おまえCSVファイルって何のことか分かってて言ってる?
0234デフォルトの名無しさんNGNG
>>231
Perlの勉強よりアルゴリズムの勉強が必要だと思う
手順を論理的に考える能力が足らないんじゃないのかな
0235デフォルトの名無しさんNGNG
perl hoge.pl foo bar aho
で、foo bar ahoを文字列のリストとして取得するのはどうやるんでしょうか。
my $input = $_;はできても
my @inputs = @_;はできないですよね。
0236デフォルトの名無しさんNGNG
@ARGV
0237デフォルトの名無しさんNGNG
>>233
カンマ区切りテキスト
0238デフォルトの名無しさんNGNG
>>236
thx
0239デフォルトの名無しさんNGNG
なんか・・・ね・・・
0240デフォルトの名無しさんNGNG
やっぱり・・・だよ・・・ね・・・
0241デフォルトの名無しさんNGNG
PerlでWindowsのスクリーンセーバーを作るには
Win32モジュール使えばいいんですか?
0242161NGNG
PARで上手く実行ファイル化できないと質問した>>161です。

根本的な解決方法かどうかはわかりませんがPARのアップグレードを試みたので状況報告です。
(PAR-0.85の)makefile.plを実行してmissingと出たものをppmで追加し、全てloadedと表示されるようにしました。
しかし、Fetching 'PAR-0.85-MSWin32-x86-multi-thread-5.8.2.par' に失敗し、'script/parl.exe'の生成にも失敗しました。
そこで独自にparファイルをダウンロードしたのですが、@INCやMakefile.plと同じディレクトリに置いてもそれを使ってくれません。
parファイルを解凍しての手動インストールは難しそうなので断念しました。
0243デフォルトの名無しさんNGNG
漏れは、chompのソースコード書き換えて、
s/\x0d\x0a?$//;
にしてる。
0244デフォルトの名無しさんNGNG
>>242
ttp://www.bribes.org/perl/ppmdir.html は見たのか?
0245デフォルトの名無しさんNGNG
>>242
私も同じようなエラーが出たので
ttp://aut.dyndns.org/par/
から使っているPerlのバージョンにあう
PAR-0.XX-*.parをダウンロードして
手動でインストールした所、エラーが出なくなりました。
(Win2K Perl 5.8.3)

でも、結局、
PAR-0.85はエラーが出てインストールできなかったので、
もしかしたらPerlを最新バージョンにアップするとうまくいくかもしれません。
0246161NGNG
結果:できました!
---
>>245 回答ありがとうございます。
今Perlを5.8.2->5.8.4にバージョンアップさせました。

>>244 回答ありがとうございます。
そのサイトは見ていませんでした。
コンパイル済みPARの配布を行っているんですね。

・Perlのバージョンアップ
・ttp://www.bribes.org/perl/ppm/PAR.ppd からインストール
両方行ったところ「pp --gui -a test.gld -o test.exe test.pl」で実行ファイルを作成でき、起動も無事行えました。
具体的な原因は判らなかったもののこれが過去ログとなった時に役立てば幸いです。

本当にありがとうございました・゚・(ノД`)・゚・
0247デフォルトの名無しさんNGNG
>>246
情報Thx.
0248デフォルトの名無しさんNGNG
>>243
Mac 使い?
0249243NGNG
間違えた。s/\x0d?\x0a?$//;

0250デフォルトの名無しさんNGNG
>>249
chomp使わないで、
そうする利点がわかってんなら、
それでいいんじゃない。
あーっそって感じ。
0251デフォルトの名無しさんNGNG
人をばかにして折れが一番といいたい絶頂厨がいるな。
0252243NGNG
悪かったなー。二度と来る
■ このスレッドは過去ログ倉庫に格納されています