1read 100read
2012年1月2期プログラム9: Perlについての質問箱 50箱目 (191) TOP カテ一覧 スレ一覧 2ch元 削除依頼
・ 次のスレ
10: 【SL4】Windows Phone 7 アプリ開発スレ Part3【XNA】 (128)
11: Win32API質問箱 Build102 (787)
12: ★★Java質問・相談スレッド151★★ (392)
13: 【GPGPU】くだすれCUDAスレ part5【NVIDIA】 (375)

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


1 :12/01/18 〜 最終レス :12/01/27
CGI についての質問は板違いです。WEB プログラミング板でどうぞ。
CGI と Perl の区別がつかない人も WEB プログラミング板に行ってください。
(WEB プログラミング板: http://hibari.2ch.net/php/ )
このスレでは(CGI 以外の)純粋にPerlのみに関係する質問を取り扱っていこうと思います。
スレ違いの質問にはスルーか、速やかな誘導をお願いします。
"The duct tape of the Internet" こと、Perl についての質問箱です。
"There's more than one way to do it" ということで、
Perl の奥深さについて皆で語り合い、追求してまいりましょう。
http://www.perl.org/get.html
● 2011/10/30 現在の最新版: 5.14.2
▼ 前スレ
Perlについての質問箱 49箱目
http://toro.2ch.net/test/read.cgi/tech/1319953460/
リンク集は >>2-3辺り
Perl 日本語処理の基礎の基礎 >>4辺り

2 :
[プログラミング自体の経験が無い奴はまずココを読め]
Perl プログラミング講座: ttp://www.site-cooler.com/kwl/perl/
[本]
リャマ: ttp://www.oreilly.co.jp/books/9784873114279/
駱駝: ttp://www.oreilly.co.jp/books/4873110963/
Effective Perl: ttp://ascii.asciimw.jp/books/books/detail/4-7561-3057-7.shtml
クックブック: ttp://www.oreilly.co.jp/books/4873112028/
Perl ベストプラクティス: ttp://www.oreilly.co.jp/books/4873113008/
Perl Hacks: ttp://www.oreilly.co.jp/books/9784873113142/
[オンラインマニュアル]
最新のドキュメント: ttp://search.cpan.org/dist/perl/
perldoc.jp: ttp://perldoc.jp/
perldoc.perl.org: ttp://perldoc.perl.org/

3 :
[モジュール]
CPAN.com: ttp://search.cpan.org/
河馬屋二千年堂: ttp://homepage3.nifty.com/hippo2000/
[テクニック]
Perl メモ: ttp://www.din.or.jp/~ohzaki/perl.htm
Perl のページ: ttp://homepage1.nifty.com/nomenclator/perl/
Perl の小技: ttp://homepage3.nifty.com/hippo2000/perltips/index.htm
[Perl 5.8 Unicodeメモ]
ttp://www.rwds.net/kuroita/program/Perl_unicode.html (修正)
ttp://www.namazu.org/~tsuchiya/perl/perl-5.8.html
ttp://www.lr.pi.titech.ac.jp/~abekawa/perl/perl_unicode.html

4 :
# [Perl 日本語処理の基礎の基礎]
# このレスは、Windows の ActivePerl で日本語処理を行う場合のテンプレートです。
# このレスの内容をそのまま、UTF8 形式のソースファイルに保存して下さい。
# 入出力ともシフト JIS 形式のファイルまたは DOS 窓を想定しています。
# まず、以下の行を先頭に入れて下さい。
use utf8;
use open IO => ":encoding(cp932)";
binmode STDIN => ":encoding(cp932)";
binmode STDOUT => ":encoding(cp932)";
binmode STDERR => ":encoding(cp932)"; # ※1
use Encode;
# 次に、あなたが実行したい処理の内容を入れて下さい。
$file = 'C:/なんたら/かんたら.txt';
open my $fh, '<', encode("cp932", $file) or die $! ; # ※2
print <$fh>;
# 以上の内容は、日本語処理が解らない人でも、とりあえず日本語処理ができてしまう
# おまじないです。条件が異なる場合の対処方法は、ご自分で勉強して下さい。
# 【注】※1. の行を入れると、DOS 窓への日本語出力は簡便になりますが、
# ソースファイル名に非 ANSI 文字が含まれる場合に die 文の出力が失敗します。
# ※2. OS に渡す文字列(ファイル名,dos コマンドのオプションなど)は、
# この例のように cp932 でエンコードする必要があります。

5 :
Encodeモジュール (現在のPerl文字コードの標準)
http://search.cpan.org/dist/Encode/
UNICODEでわからなくなったらここを読め
http://perldoc.jp/docs/perl/5.8.1/utf8.pod
http://perldoc.jp/docs/perl/5.10.0/perlunifaq.pod

6 :
DBIを使ってMySQLなどのデータベースを扱う時に、
データベースへ送るSQL文はutf8へエンコードした方が良いのでしょうか?
$dbh->do(encode_utf8("UPDATE table SET name = 'てすと〜〜〜'"));
このように書いても、また、encode_utf8を抜いて書いても、
どちらで試してもエラーは出ず、文字化けするような事もありませんでした・・・
不要ならオーバーヘッドが起きるのでencode_utf8せず処理したいのですが、
一応utf8へエンコードしておいた方がよいでしょうか・・・?

7 :
>>4
前に書いたけれど、
use open IO => ":encoding(cp932)";
binmode STDIN => ":encoding(cp932)";
binmode STDOUT => ":encoding(cp932)";
binmode STDERR => ":encoding(cp932)";
は実際には
use open qw(:encoding(cp932) :std);
で充分じゃないの?

8 :
>>6
DBI は Perl のエンコードのことは考えずに、SET NAMES で指定したエンコー
ディングで文字列がエンコードされているものとみなすので、UTF-8 なら引数
を encode しようがしまいが関係なしのはず。
select で返ってきた値は decode しないとその後の処理でおかしくなる可能性
が高い。

9 :
>>8
教えてくれてありがとうございます。
わかりました、selectで取得する時だけdecodeするようにします。
何度も申し訳ないですが、もう一つ質問させてください。
オブジェクトを作って、インスタンス化し、
そのメソッド名を変数で指定する事は可能でしょうか?
input1、input2、input3 というメソッドがある場合、
my $obj = MyObject->new();
@list = (input1, input2, input3);
for my $m (@list) {
  $obj->$m("代入");
}
雰囲気的にはこんな感じで処理したいのですが・・・
もちろん、これではエラーが出てうまく動きませんでした。
どうすればうまく動いてくれるでしょうか・・・

10 :
>>9
> $obj->$m("代入");
これは可能。
http://perldoc.jp/docs/perl/5.10.0/perlobj.pod#Method32Invocation
> 矢印の右側は典型的にはメソッド名ですが、メソッド名やサブルーチン
> リファレンスが入った単純スカラ変数も使えます。
> @list = (input1, input2, input3);
my @list = qw(input1 input2 input3);

11 :
>>10
教えていただきありがとうございました。
可能だと言われ、見なおした所・・・
配列に入れてたメソッド名をタイプミスしてました・・・
助かりました、ありがとうございました。

12 :
コマンドプロンプトでperlを実行するにはどうしたらいいんですか?
コマンドプロンプトウィンドウにソースコードファイルをドラッグしてエンター押しても
ファイルが開くだけでした。
今まではBJDなどの簡易サーバーでブラウザで実行結果表示していたからやり方わからないです

13 :
perl perlscript.pl

14 :
>>12
>>2
http://www.site-cooler.com/kwl/perl/environment.htm#helloworld

15 :
>>12
コマンドプロンプトの扱い方から勉強しなおせよ糞
コマンドプロンプトの使い方知ってたらファイルドラッグとかするわけないだろ
Perl以前の質問をPerlスレでするとか荒らし?

16 :
スレ違いの質問にはスルーか、速やかな誘導をお願いします。

17 :
>>7
use open qw(:encoding(cp932) :std);
だと単語数が多い割にはドキュメント性が低くて、何を cp932 と
するのか分かりにくいのが難点。せめて :std がデフォルトになっ
ていて、省略できればよかったのに。

18 :
はいはいそうだね

19 :
open(OUT,">test.dat");
close(OUT);
このように空のファイルを作ったときエディタを開くと文字コードがshift-jisになっています。
エディタのステータスバーの右下のところがsjisになってます。
空のファイルでもEUCかUTF-8形式にしたいです。
どうすれば文字コードを指定してファイルの作成ができるのですか?

20 :
>>19
エディタのデフォルト設定の問題ですよね。

21 :
ここまでのアフォがいるとはさすがに思わなんだ……
ゆとりとかそういうレヴェルを遥かに超越したとんでもないks・kzだ
お前にゃあプログrマイング一切は向いていない

22 :
なるほど、それであれほど言われてもSHFT-JISに固執してたのか
謎が解けたよ
ぶっちゃけ君にパソコンは無理
いや、煽りとかそんなんじゃなくて、真面目な話で

23 :
>>21
>お前にゃあプログrマイング一切は向いていない
文法エラー

24 :
>>19
ゴミは帰れよ

25 :
Net::Twiterとかそのあたりで、TwitterのURLから書き込み内容とかのデータを取得するAPIってないかな。
CPANのドキュメント漁ってるけど見つからない・・・俺が節穴なのかな。

26 :
http://twitter.com/username/status/{status_id}
からその内容を取りたいってこと?
Net::Twitter(::Lite)?のドキュメント読んでそれが見つからないと言ってるのなら節穴なのかもね

27 :
> Twiter
たぶんfusianaなんだろうなー
> TwitterのURLから書き込み内容とか
こっちのつづりは合ってるのにな―

28 :
節穴とゴミしかいないスレwwwwww

29 :
>>26
そう。やっぱりあるよな。俺が節穴すぎるのか。
見なおしてくる。

30 :
ゴッミでぇーーーすッ!!!!

31 :
ゴミはゴミ箱へ

32 :
スレ違いの質問にはスルーか、速やかな誘導をお願いします。
と言いましたが、アフォなので誘導は不要です。単にスルーでお願いします。

33 :
ああ見つかった。俺節穴だな・・・。

34 :
chinge

35 :
and Aska

36 :
Perl5.005までは
Perlについて
ttp://toro.2ch.net/test/read.cgi/tech/1217851121/l50
を使って同じ質問が繰り返されないようにすることを提案します。

37 :
うるさいゴミ

38 :
>>36=ただの自治厨

39 :
hoge.plがおいてあるフォルダにあるテキストファイル名を
取り込みリストに格納したいのですがどうしたらできますか?

40 :
要するに ls *.txt の結果を受け取りリストに格納したいのです

41 :
opendir(my $dh, './') or die $!;
my @list = grep(/\.txt/ ,readdir($dh));
closedir($dh);

42 :
あ、plおいてあるとこるか
'./ 'をdirname($0)に変更かな
use File::basenameしといて

43 :
>>22
PCインストラクター、SE、PGもやってきているのでパソコンが無理ってことはないです
パソコンは会社で一番できるし、上司よりもできるのでパソコンは得意です

44 :
perlで2次元配列を使うにはどうすればいいのか教えてください

45 :
>>43
偽物乙
子供が用語だけ並べてもダメよ

46 :
>>44

このゴミ何?

47 :
>>44
リファレンスを使うんだ

48 :
>>43
そのパソコン大先生が何でこんなスレで質問なんかしてるの?

49 :
>>44
http://perldoc.jp/docs/perl/5.10.0/perllol.pod

50 :
>>42
こうなったんですが・・・
ちなみにperl hoge.plはエラーはないものの正しく動作しません
$ cpan -i File::Basename
CPAN: Storable loaded ok (v2.20)
Going to read '/home/****/.cpan/Metadata'
Database was generated on Fri, 20 Jan 2012 05:11:07 GMT
Running install for module 'File::Basename'
CPAN: YAML loaded ok (v0.71)
The most recent version "2.83" of the module "File::Basename"
is part of the perl-5.15.4 distribution. To install that, you need to run
force install File::Basename --or--
install F/FL/FLORA/perl-5.15.4.tar.gz
CPAN: Time::HiRes loaded ok (v1.9719)
Running make test
Can't test without successful make
Running make install
Make had returned bad status, install seems impossible

51 :
>>50
5.15.4 なら File::Basename は標準で入っているのでわざわざ入れなくていい。
>>41-42 の言わんとしている事はこう。
#!/usr/bin/perl -w
use strict;
use File::Basename; # http://search.cpan.org/dist/perl/lib/File/Basename.pm
my $path_separator = '/';
my $dir = dirname($0); # http://perldoc.jp/docs/perl/5.14.1/perlvar.pod
opendir(my $dh, $dir) or die $!;
print map "$dir$path_separator$_\n", grep(/\.txt\z/, readdir $dh);
# もしくはこう。
print map "$_\n", glob "$dir$path_separator*.txt";
# 本当に ls *.txt が欲しいのならこう。
print `ls *.txt`; # http://perldoc.jp/docs/perl/5.14.1/perlop.pod#Quote-Like32Operators

52 :
↑クソワロタwwwwwwwww

53 :
>>51
perl v5.10.1 だったのですができました。
ありがとうございます。
失敗してた理由はいまから調査します。

54 :
>>53>>50>>40>>39ですが
ただしく作動しなかった理由がわかりました。
デバッグしてる時の話ですが
ある場所で処理を止めたいので
sleep(100);
を挟んでいました。sleepはちゃんと止めたい場所の下に入れてたのですが
どうも出力が遅れる事が多いのです。
なぜだかわかりません。環境はcygwinです。
<>;で止めるほうがいいのでしょうか?
$ uname -r
1.7.9(0.237/5/3)
$ perl -v
This is perl, v5.10.1 (*) built for i686-cygwin-thread-multi-64int
(略)

55 :
>>44
ものぐさなPerlの世界へようこそ。
他のスクリプト言語に慣れているのならperlrefとperlvarを一読することをお勧めします。
Perlでは配列をネストしようとするとすべてペッタンコに並列化してしまいます。
my @aa = ('foo', 'bar');
my @ab = ('hoge', 'fuga');
my @ac = (@aa, @ab); # => ('foo', 'bar', 'hoge', 'fuga')
$ac[2]; #=> 'hoge'
二次元配列を扱う場合はリファレンスを使って下さい。
my @ac = (\@aa, \@ab); # => (['foo', 'bar'], ['hoge', 'fuga'])
$ac[1]->[0]; #=>'hoge'
並列化する意図がなければ、配列を全てリファレンスとして扱う方が分かりやすいかもしれません。
my $aa = ['foo', 'bar'];
my $ab = ['hoge', 'fuga'];
my $ac = [$aa, $ab];
$ac->[1]->[0]; # => 'hoge', これは次のように省略できます。
$ac->[1][0];
次は一時変数の時にお会いしましょう。ごきげんよう。

56 :
>>54
Perlにはデバッガーがついています。
便利ですので、眠たがらずに是非活用しましょう。
http://d.hatena.ne.jp/perlcodesample/20100302/1269670120

57 :
>>56
デバッガーがある事を知りませんでした。
使ってみます。
ありがとうございました

58 :
Perlの基本はあらかたわかったけどどういう時にどういうモジュール使えば良いのかよくわからんな
これは自分で調べながら経験を積むしか無いのか

59 :
モジュール探すのは時間がかかるし解説サイトが英語ばかりだから
ちょっとしたものは自分で作る方が早いよ
なんでもかんでもモジュールに頼るとプログラミング力が養われない

60 :
>>59
LWPなしにネット関係の処理すると思うとぞっとします。

61 :
>>59
こういうこと言う奴が既存のモジュールよりもいい物を作れたためしがない

62 :
難しい理由の一つに英語を挙げるヴァカがいるのはこのスレですか?
自分の頭の悪さではなく言語を言い訳にするとかガチ池沼w
さっさと回線切ればいいのにwww

63 :
いまさらplaggerをlinuxにインストールしようとしてるんだけど、
今はもうできないの?
CPANから全然入らない。

64 :
ソース落としてきてコンパイルすればすむ話だろ

65 :
>>63
自分はcpanmでできました。
どうしてもだめならテストかっとばしたらどうでしょう。

66 :
>>56
何も環境を用意しなくても、-d を指定するだけで使える便利さ。
それに比べてPHPときたら…

67 :
PHP使ってる奴は情弱
脳に問題あるのかと思うくらい情弱

68 :
【プログラミング部】 PHPが100倍速で動くようになったぞー
http://awabi.2ch.net/test/read.cgi/poverty/1327050821/

69 :
UTF8にしたのに文字列の中でユニコードの特殊文字が使えません。
例えば○の中にRが入っている文字®という文字を文字列の中に入れたいんですが
この文字列をエディタにコピペするとただのRになってしまいます。
$str = "あああ®www";というようにしたいのですがうまくいきません。
UTF8ではユニコード文字が使えるんじゃなかったのですか?

70 :
UTF8が使えるエディタに変更してください。
Perlとは全く無関係の話です。

71 :
>>69
Perl関係ないのに書き込むなよゴミ

72 :
いいだろカス

73 :
病的折衷主義のガラクタ出力装置から出てくるのはやっぱりゴミカスか

74 :
だったらPython使えよ
外人が作ってて書き方は一つしかないきっちりしたPythonを!

75 :
> 外人が作ってて
お前はゴミカス同様に欧米コンプとかあんのか?
アフォじゃねーの?
何人が作ろうと関係ないじゃんか
これだから低能のksは困る
巣に引っ込んでろgm

76 :
突っ込むようなところじゃないのに突っ込んでファビョってるヴァカは可哀想としか言いようがない

77 :
>>75
>何人が作ろうと関係ないじゃんか
ところが関係あるんだなぁこれが。
特にRubyが嫌いでPythonに定着した人たちにとっては。

78 :
>>77
もしかするとお前はスレタイも読めないのか?
本当に日本人なのか?
それ以前にアルファベット読めるのか?
ここはperlのスレだぞ?
Rubyの何かと勘違いしていないか?
外人が作ったから良いんだみたいなksなーショーはRubyスレでやってろgomi
あとどこら辺に国民性が出てるのか言えるんだろ?
言ってみろよkz
まあお前は低能の肥溜めのハエ以下の蛆だからぁ
何も語れずにクソひり出して大人しく墓穴に入ってりゃあいいさ

79 :
お手本になる、小さくまとまってて綺麗なPerlモジュールってCPANで言うとどれ?
玉石混交とはよく聞くけど、何が「玉」で何が「石」か判断つかない。
お勧めあったら教えて。

80 :
うるさいゴミ

81 :
図書館の地図の日本海に「東海シール」を貼りつける韓国人
図書館所蔵地図の日本海の上に「東海シール」を貼りつける韓国人たち
画像
http://mamorenihon.files.wordpress.com/2012/01/kankoku2.jpg
January 16, 2012
http://ameblo.jp/asuka-1020-umare/entry-11137288593.html
http://www.youtube.com/watch?feature=player_embedded&v=nmRGjO4Jj0Q


82 :
ファイルを開くときの例外処理って必ずする必要があるのですか?
このようにファイルを開けなかった場合はデフォルト値にしたい場合
例外処理するとopenでプログラムが終了されて、デフォルト値にすることができないのでこのようにするしかないんですが
@default_hobby_list=("ゲーム","アニメ","PC");
open(IN,"hobby.dat");
@hobby_list = <IN>;
close(IN);
#@hobby_listが取得できなかった場合
if(@hobby_list==0){
@hobby_list = @default_hobby_list;
}

83 :
例外処理って何のこと?
普通にこんなのじゃいけないの?
if (open my $f, 'filename') {
    なんか処理;
    close $f;
} else {
    デフォルト処理;
}

84 :
>>82
それだと読み込んでも配列がゼロ行なら処理しちゃうよ。
それでも良いなら良いけどね。
あと、例外処理って"or die"のことか?
別にdieじゃなくても
$operror = 0;
open(IN,"hobby.dat") || $operror = 1;
とかできるぞ。

85 :
例外処理は必須じゃなくてアプリケーションのポリシーによるのだけど、
open が失敗するのはファイルが存在しない場合だけじゃないので、
ファイルの存在確認をしたいだけならファイルテスト演算子を使うべきだし、
open についても die じゃなくてもせめて warn $! ぐらいはしといたほうが、いざ想定外が起こったときにも原因究明に時間かけなくて済むよ。
# >>85 - for popup
use strict;
use warnings;
my $filename = './hobby.dat';
my @default_hobby_list = ("ゲーム", "アニメ", "PC");
my @hobby_list;
if (-f $filename && -r _) {
open my $in, '<', $filename or die "cannot open: $!";
@hobby_list = <$in>;
close $in or die "cannot close: $!";
}
if (@hobby_list) {
chomp @hobby_list;
} else {
# file not found or empty
@hobby_list = @default_hobby_list;
}

86 :
あ、最後のif-elseのifのほう無駄だな。最初のifに含めればいいだけだ。

87 :
>>84
> open(IN,"hobby.dat") || $operror = 1;
|| の方が = より優先順位が高いので compilation error になる。

88 :
行の末端から読んでソートするにはどうすればいいですか?
?かすでいいばれすうどはにるすトーソでん読らか端末の行
(例)
yahoo
apple
google
goo
banana

banana
google
apple
goo
yahoo
--
入出力は何でもいいです。

89 :
宿題みたいだなー。答えたくないなー。

90 :
>>88
http://perldoc.jp/func/reverse
http://perldoc.jp/func/sort

91 :
Twitterは32分で返信きてた
このスレのハゲは本当に無能ばかりだな
>>89
問題外
分からないならレスするなカス
>>90
遅い
URL貼るだけに何分かかってんだよ

92 :
じゃあこんな所じゃなくてトゥイッタァーでやればよくね?

93 :
>>88>>91

94 :
早い話がリモートホストの集計がしたいのですが
どうやったらいいのでしょうか?
逆順ソートすればいいのかと思ってるのですが

95 :
リモートホストの集計と逆順への並べ替えの関係がよくわからんのだが
これじゃだめなのかい
while (<>) {unshift @data, $_}

96 :
>>94
>>88 のままでいいなら >>90 の関数を使って
print map reverse . "\n", sort map scalar reverse, qw(
apple.com
example.jp example.net example.org
goo.ne.jp
google.com google.co.jp
namco.jp namco.co.jp
yahoo.com yahoo.co.jp
apple.com
);
TLD・ドメイン名・ホスト名を区別して揃えてくれるソートルーチンが欲しいなら
既存のアクセス解析ツールのコードをあたってもらった方が早いし、
ここでダラダラ再発明されても困る。

97 :
クソスレわらた

98 :
>>97
失せろゴミ

99 :
↑頭悪そう、PHP厨か?w

100read 1read
1read 100read
TOP カテ一覧 スレ一覧 2ch元 削除依頼
・ 次のスレ
10: 【SL4】Windows Phone 7 アプリ開発スレ Part3【XNA】 (128)
11: Win32API質問箱 Build102 (787)
12: ★★Java質問・相談スレッド151★★ (392)
13: 【GPGPU】くだすれCUDAスレ part5【NVIDIA】 (375)