Perlについての質問箱 15箱目
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
05/01/17 18:11:32"There's more than one way to do it" ということで、Perlの奥深さについて皆で語り合い、追求してまいりましょう。
CGIについての質問は板違いです。WEBプログラミング板でどうぞ。
CGIとPerlの区別がつかない人もWEBプログラミング板に行ってください。
(WEBプログラミング板 http://pc5.2ch.net/php/ )
CGIの質問は答えがPerlと全然関係ない話に帰着する場合が多かったりするのでWEBプログラミング板に行って聞いたほうが得ですよ。
このスレでは(CGI以外の)純粋にPerlのみに関係する質問を取り扱っていこうと思います。
http://www.perl.org/get.html
● 2005/01/17現在の最新版: 5.8.6
● 2005/01/17現在の開発版: 5.9.1
0002デフォルトの名無しさん
05/01/17 18:20:411 http://pc.2ch.net/tech/kako/1017/10177/1017736187.html
2 http://pc3.2ch.net/tech/kako/1033/10336/1033688230.html
3 http://pc2.2ch.net/tech/kako/1041/10412/1041205885.html
4 http://pc2.2ch.net/tech/kako/1048/10485/1048519394.html
5 http://pc5.2ch.net/tech/kako/1053/10530/1053053082.html
6 http://pc5.2ch.net/tech/kako/1060/10606/1060689008.html
7 http://pc2.2ch.net/test/read.cgi/tech/1068051036/
8 http://pc2.2ch.net/test/read.cgi/tech/1074151549/
9 http://pc5.2ch.net/test/read.cgi/tech/1079114157/
10 http://pc5.2ch.net/test/read.cgi/tech/1085564875/
11 http://pc5.2ch.net/test/read.cgi/tech/1090889189/
12 http://pc5.2ch.net/test/read.cgi/tech/1094579428/
13 http://pc5.2ch.net/test/read.cgi/tech/1097851764/
14 http://pc5.2ch.net/test/read.cgi/tech/1101649274/
0003デフォルトの名無しさん
05/01/17 18:22:45Perlプログラミング講座: http://www5a.biglobe.ne.jp/~n_rieko/perl/
[本]
リャマ: http://www.oreilly.co.jp/books/4873111269/
駱駝: http://www.oreilly.co.jp/books/4873110963/
Effective Perl: http://www.ascii.co.jp/books/detail/4-7561/4-7561-3057-7.html
クックブック: http://www.oreilly.co.jp/books/4873110378/
[オンラインマニュアル]
Perldoc.com: http://www.perldoc.com/
perldoc.jp: http://www.perldoc.jp/
perl5.005_03 のドキュメント: http://www.kt.rim.or.jp/~kbk/perl5.005/
[モジュール]
CPAN.com: http://search.cpan.org/
河馬屋二千年堂: http://homepage3.nifty.com/hippo2000/
[テクニック]
Perlメモ: http://www.din.or.jp/~ohzaki/perl.htm
Perlのページ: http://homepage1.nifty.com/nomenclator/perl/
Perlの小技: http://homepage3.nifty.com/hippo2000/perltips/index.htm
00041
05/01/17 18:26:489〜14が開けない場合、2chブラウザ以外で試してください。
00051
05/01/17 18:28:510006デフォルトの名無しさん
05/01/17 20:00:00,ageとこう
0007デフォルトの名無しさん
05/01/17 21:17:400009デフォルトの名無しさん
05/01/17 21:56:370010デフォルトの名無しさん
05/01/17 21:58:55googleで探してもUNIXコマンドのページばかりひっかかってどうしても見付かりません
どなたか御指導お願いします。
0011デフォルトの名無しさん
05/01/17 22:08:59001210
05/01/17 22:10:15'ls ./' などのようにすればいいだけなのですね。
お騒がせしました。
0013デフォルトの名無しさん
05/01/17 22:15:26それシングルクォーテーションじゃ・・・
とりあえず三通り
[1]
system("command");
[2]
open(PIPE, "command |");
@msg = <PIPE>;
close PIPE;
[3]
$msg = `command`;
3番はバッククォーテーションだから注意
0014デフォルトの名無しさん
05/01/17 22:53:370015デフォルトの名無しさん
05/01/17 23:46:440016デフォルトの名無しさん
05/01/17 23:49:480017デフォルトの名無しさん
05/01/17 23:52:390018デフォルトの名無しさん
05/01/18 22:12:1714 の次が 15 だと推論するのに時間がかかりました。
なんか閑散としてますが他の人も同じなのか?
0019デフォルトの名無しさん
05/01/18 22:15:30よほどのネタ振りがあるか
粘着初心者くんでもいないかぎり。
まあ大抵後者でスレが消化されて行くわけだが。
0020デフォルトの名無しさん
05/01/19 20:20:190021デフォルトの名無しさん
05/01/19 20:33:35IPC::Open2なんか使えば出来るかも
0022デフォルトの名無しさん
05/01/19 21:25:11Expect なんか使えば出来るかも
sudo の -S オプションなんか使えば出来るかも
0023デフォルトの名無しさん
05/01/19 23:06:280024デフォルトの名無しさん
05/01/19 23:39:200025デフォルトの名無しさん
05/01/19 23:44:59alarmとか使えばできると思うが、他のサイトってのがhttpなら
ソケットでごりごりやるよりLWP使ったほうが楽だよ。
0026デフォルトの名無しさん
05/01/20 17:41:480027デフォルトの名無しさん
05/01/20 17:48:01パッケージ名まで知りたいなら
my ($package, $filename, $line) = caller();
あたりでどうなんだろ?
0028デフォルトの名無しさん
05/01/20 17:52:36__FILE__ とか?
0029デフォルトの名無しさん
05/01/20 18:00:45出ました。ありがとうございます!
0030デフォルトの名無しさん
05/01/20 18:03:30蛇足ですが、caller はサブルーチン呼び出し 1 段以上経てないと機能しませんから!
package foo;
sub bar {
my ($package, $filename, $line) = caller;
print "$package, $filename, $line\n";
}
bar();
print "$0\n"; # ついで
0031デフォルトの名無しさん
05/01/20 18:16:000032デフォルトの名無しさん
05/01/21 06:21:2950回繰り返したら1回だけ動かしたいスクリプトがあるんですが、
どう書いたら良いかわかりませぬ。
気が向いたら教えてくださいm(_ _)m
0033デフォルトの名無しさん
05/01/21 06:24:560034デフォルトの名無しさん
05/01/21 07:00:36> forって10回までしか繰り返せないんでしょうか?
なぜそう思い込み、決めつけ、疑いのないそのまっすぐな眼差しで
この愚劣極まる質問を発したのかを説明してくれると、みんな楽
しめると思います。ぜひお願いします。
0035デフォルトの名無しさん
05/01/21 12:38:130036デフォルトの名無しさん
05/01/21 17:34:530037デフォルトの名無しさん
05/01/21 19:16:13これでa.plを実行したら、表示される結果は1?2?
やっぱり1?
手元にperlを実行できる環境がないけど、至急回答が必要なの…。
./a.pl
#!/usr/bin/perl
my $a = "1";
require './b.pl';
print $a;
./b.pl
#!/usr/bin/perl
$a = "2";
1;
0038デフォルトの名無しさん
05/01/21 21:02:542
0039デフォルトの名無しさん
05/01/21 21:13:311
0040デフォルトの名無しさん
05/01/21 21:17:020041デフォルトの名無しさん
05/01/22 22:55:29http://perldoc.jp/docs/modules/Switch-2.09/Switch.pod
0042デフォルトの名無しさん
05/01/22 22:57:310043デフォルトの名無しさん
05/01/22 23:10:09実行環境がなくてもすぐ手元で確認できるようにPerlのインタプリタを作ればいいじゃないか?
0044デフォルトの名無しさん
05/01/22 23:12:15undef
0045デフォルトの名無しさん
05/01/22 23:33:42知ってはいるけど使ったこと無い
大抵はラベルとブロックを組み合わせた方法で事足りるから
0046デフォルトの名無しさん
05/01/23 00:36:420047デフォルトの名無しさん
05/01/23 01:23:370048デフォルトの名無しさん
05/01/23 02:59:420049デフォルトの名無しさん
05/01/23 15:20:240050デフォルトの名無しさん
05/01/24 11:26:14cpan> install HTML
Warning: Cannot install HTML, don't know what it is.
Try the command
i /HTML/
to find objects with matching identifiers.
となります。どうやったらインストールできますか?
0051デフォルトの名無しさん
05/01/24 11:31:230052デフォルトの名無しさん
05/01/24 11:38:52や
i /HTML::LinkExtor/
などとすると、
cpan> i /HTML::LinkExtor/
Module id = HTML::LinkExtor
DESCRIPTION Extract links from HTML documents
CPAN_USERID LWWWP (The libwww-perl mailing list <[email protected]>)
CPAN_VERSION 1.33
CPAN_FILE G/GA/GAAS/HTML-Parser-3.45.tar.gz
DSLI_STATUS RmpO (released,mailing-list,perl,object-oriented)
MANPAGE HTML::LinkExtor - Extract links from an HTML document
INST_FILE /usr/local/lib/perl5/site_perl/5.8.5/mach/HTML/LinkExtor.pm
INST_VERSION 1.33
と出ます。
要するにインストールするにはどうしたらいいのでしょうか?
0053デフォルトの名無しさん
05/01/24 11:54:360054デフォルトの名無しさん
05/01/24 11:55:180055デフォルトの名無しさん
05/01/24 11:59:110056デフォルトの名無しさん
05/01/24 12:15:150057デフォルトの名無しさん
05/01/24 12:18:230058デフォルトの名無しさん
05/01/24 13:03:590059デフォルトの名無しさん
05/01/24 13:13:340060デフォルトの名無しさん
05/01/24 16:54:23windowsXP
この環境で、aというフォルダ内にたくさんあるフォルダの中にある.txt/.csv
ファイルなどを全てaの直下に移すプログラムを書きたいのですが、どうすればいいでしょうか?
my @fold = glob 'aの中にあるフォルダだけを取得';
foreach (@fold){
my @sub_fold = glob 'aの中にあるフォルダの中にあるファイルを全て取得';
}
・・・ファイルの移動ってどうやるんですか?
一度元を読み込んで、任意の場所でopenをして自動でファイルを新規に開いて
そこに元になるものを流し込むみたいな方法以外にないのでしょうか?
ちょっと大変そうですねそれ;
0061デフォルトの名無しさん
05/01/24 16:57:12move *.txt ..
move *.csv ..
0062デフォルトの名無しさん
05/01/24 17:04:32File::Find
File::Copy
006360
05/01/24 19:16:08File::Copyの解説(英語)を読む方がしんどいです。
本当に日本語訳以外のperl.docの説明書って直感的でないですね。
英語だろうが、関数の使い方くらいパットミでわかると思いマシ多雨。が、疎コマsだsファslgじゃkjgばsdgかjdbがshd
1から自分で書きます。それなら30プンですから
0064デフォルトの名無しさん
05/01/24 19:28:422)エクスプローラでF3を押してファイル名検索「*.txt;*.csv」検索結果をCTRL+A
0065デフォルトの名無しさん
05/01/24 20:07:000066デフォルトの名無しさん
05/01/24 20:10:130067デフォルトの名無しさん
05/01/24 20:53:390068デフォルトの名無しさん
05/01/24 21:22:020069デフォルトの名無しさん
05/01/24 21:28:260070デフォルトの名無しさん
05/01/25 00:06:38SQLite、使ってみたいと思ってます。
(いまのとこ、インストールしただけです。時間がなくて)
日本語、通りますか?
そのままじゃ通らないとしたら、urlエンコードなど
使ったりするのでしょうか?
よろしかったら、教えてください。
0071デフォルトの名無しさん
05/01/25 00:47:15Perlで「"」ダブルクォート内の文字列を抜き出したいのですが
やり方がわかりません。
何か方法が有るのでしょうか?
0072デフォルトの名無しさん
05/01/25 00:48:17実際にやってみようとは思わないのか?
Shift_JISもEUC-JPも特に問題はないが、文字列操作関数を使うならUTF-8にしておいたほうが無難ではある。
0073デフォルトの名無しさん
05/01/25 00:49:18意味不明。パラフレーズせよ。
0074デフォルトの名無しさん
05/01/25 00:56:28while(/"(.*?)"/g) {print $1;}
0075デフォルトの名無しさん
05/01/25 00:56:44C:\path\to\a\dir /s /b *.txt | perl -nle "`move /y $_ C:\path\to\a`"
うはwwww
0076デフォルトの名無しさん
05/01/25 01:02:32>>74
それで1発で逝けました。
ありがとうございました。
0077デフォルトの名無しさん
05/01/25 01:04:41サンクスです。
>実際にやってみようとは思わないのか?
思いますぅ。ただ、クエリの初歩から勉強という段階で…。
近日中に、なんとかします!
0078デフォルトの名無しさん
05/01/25 04:53:27データベース板の SQLite スレもよろしく。
0079デフォルトの名無しさん
05/01/25 07:02:14環境はWindows XP Pro SP2,perl, v5.8.2 built for cygwinです。
#! /usr/bin/perl
use Cwd;
my $dir1 = Cwd::getcwd();
print "$dir1\n";
my $infile = $ARGV[0];
open (INFILE, "$infile");
open (OUTFILE, ">result.txt");
print OUTFILE "hogehoge\n";
上記のようなスクリプトをコマンドラインで実行すると実行時のデ
ィレクトリがカレントディレクトリになりますよね。
それに対しperlコンパイラ(PAR,perl2exe,perlcc)でコンパイルし、
入力ファイルを実行ファイルにドラッグすると、カレントディレク
トリである$dir1はホームディレクトリになってしまい、その結果
OUTFILEもホームディレクトリに出来てしまいます。
1)INFILEと同じディレクトリにOUTFILEを作りたいので、現在の所
infileの最後の"/" or "\" までを取得してchdirしているのですが、
もう少しスマートな方法はないでしょうか?
2)ドラッグ時にカレントディレクトリがホームになるあたりについ
ての説明のソース等がありましたら教えてください。
よろしくお願いします。
0080デフォルトの名無しさん
05/01/25 09:49:26超一般論だけど、引きずって落とした時には、
その引きずり落としを行なうシステムが、
カレントディレクトリを決定するのではないか?
Winでそのあたりの設定をいじった記憶があるのだが、
もう何年も触ってないのでうろ覚え。
それから、ふつう、chdirなどせずに、OUTFILEを絶対パス
していしたりすると思うが。
0081デフォルトの名無しさん
05/01/25 11:53:03>infileの最後の"/" or "\" までを取得してchdirしているのですが、
>もう少しスマートな方法はないでしょうか?
それが一番スマート
0082デフォルトの名無しさん
05/01/25 12:44:56いや実は、少なくとも v5.6.1 では "$infile/.." で通る罠。
BEGIN {
push @INC, "$0/..";
}
とかよくやる。
008382
05/01/25 12:56:52実際、perl 以外のシチュエーション(たとえば ls './foo.txt/..' とか)は NG (Not a directory) なので処理系依存であることは間違いない。
0084デフォルトの名無しさん
05/01/25 13:09:320085デフォルトの名無しさん
05/01/25 21:29:35んなあほな、と思ったらマジでできる。。。
5.8.4でもOKだった。
../で打ち消される部分は単純にスラッシュの数だけ数えてて、
間のフォルダ名は何書いても評価されてないみたいね。
0086デフォルトの名無しさん
05/01/25 21:35:18open (OUT, ">>$cur/;,:?<>|/../foobar.txt");
こんなのまで許される。うわー。
0087デフォルトの名無しさん
05/01/25 23:08:59my($exec_dir) = $0 =~ /^(.*?)[^\/]+$/;
おれこうやって受け取ったファイルのディレクトリとか
実行ファイルのディレクトリいつもゲットしてchdirをめったに使わん。
0088デフォルトの名無しさん
05/01/26 04:12:49いや、いないならいいんですけど…
0089デフォルトの名無しさん
05/01/26 06:48:10while(1){
A;
B;
サブルーチン();
C;
}
これサブルーチンに一回戻ってもう一度Aから動かしたら
ABCと動いて最後にもう一度Cを実行してしまうんですが、
二回目のCを実行しないようにするにはどうしたらいいんですかね?
サブルーチンで一旦別の場所に飛んでwhile(1)に戻って来た時に
サブルーチン呼び出し以下のコードを二度繰り返さないようにしたいんですが。
last;入れてもループ自体が終了しちゃってだめですた。
0090デフォルトの名無しさん
05/01/26 07:10:440091デフォルトの名無しさん
05/01/26 08:15:240092デフォルトの名無しさん
05/01/26 10:25:34サブルーチンは毎回実行される(C; は繰り返さない)なら
while{A; B; サブルーチン();} と等価何じゃねーの
とりあえず next; 調べて来い
0093デフォルトの名無しさん
05/01/26 10:27:55なにいいたいのかよく分からん。
戻るっていまドコにいるんだよ?
て言うかあれか?再帰とかしてんのか?
せめてルーチンの中見せなさいよ。
0094デフォルトの名無しさん
05/01/26 10:38:211回目のループのみCを実行したいんだぬ?
while(1){
$count ++;
A;
B;
サブルーチン();
$count == 1 and C;
}
とか?みたいな?
0095デフォルトの名無しさん
05/01/26 10:58:33推理する謎解き大会になってきたな...
0096デフォルトの名無しさん
05/01/26 11:28:26無限ループ内で整数をカウントアップさせっぱなしはやめれ。
2^32 回に一回実行されるし、そもそも符号付き整数のオーバーフローで roundup せずに例外投げる
アーキテクチャも広い世の中にはあるらしい。(直に見たことはないが)
0097デフォルトの名無しさん
05/01/26 11:34:32もとの記述が無限だったんだ。俺のせいじゃない。
0098デフォルトの名無しさん
05/01/26 12:12:23>>89が「すれ立てるまでもない…」でマルチしてるんですけど、
勝手に自己解決してるみたいです!
0099るんぱっぱ〜る
05/01/26 12:19:48use Image::Size;
したいのですが、Can't locate auto/Image/Size/jpegsize.alって出ます。
ちゃんとスクリプト冒頭で
use FindBin qw($Bin);
use lib "$Bin/lib";
ってやってるのですが、なぜでしょうか?
(Size.pmは、(Perlスクリプト本体のディレクトリ)/lib/Imageの中にあります)
とんでもないヘマをやらかしてますか?
心優しいPerlコミュニティの皆様、教えてください…
0100デフォルトの名無しさん
05/01/26 12:26:57エラーメッセージに書いてあるようにないのはjpegsize.alなので、
Size.pmがあったからといってどうにもならんのだが。多分Size.pm
は読めていてその中でjpegsize.alを要求していると思われる。
まずはjpegsize.alがあるか確認すべきだろうな。
0101るんぱっぱ〜る
05/01/26 13:02:07Size.pmと同じ階層のディレクトリに置きました。
いざ実行してみると!
…同じエラーが出てだめでした。
alファイルというのはオートロードファイルということがわかったの
ですが、このオートロードというのは、どの時点で自動(オート)で
読み込まれる(ロード)でしょうか?スクリプトの実行時?
(そもそも画像データの扱いはImage::Magickを使うのが一般的なので
しょうか。)
■ このスレッドは過去ログ倉庫に格納されています