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

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

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

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

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

http://www.perl.org/get.html
● 2006/12/21現在の最新版: 5.8.8
● 2006/12/21現在の開発版: 5.9.3

前スレ
Perlについての質問箱 29箱目
http://pc11.2ch.net/test/read.cgi/tech/1166708139/

リンク集は>>2-3
過去スレは>>4
0408デフォルトの名無しさん2007/05/02(水) 09:35:32
モジュール(lib/CPAN.pm)のコードを読む。
0409デフォルトの名無しさん2007/05/02(水) 14:03:43
>>406
知らないけど、ヒストリ用では?

よくUNIX用のシェルであるんだけど、 ! の直後にその番号入れて
実行するとその番号のコマンドが動くんだよ。全く同じなら再入力
する必要がないの。(更に後ろに :s/// のようなのを付けて文字列
置換できたりもする。 !30:s/aa/bb/ みたいな。全てのシェルが
同じこと出来るかどうかは知らないが)。
0410デフォルトの名無しさん2007/05/02(水) 21:18:49
cpanpのメリットがイマイチわからん
0411デフォルトの名無しさん2007/05/02(水) 21:20:37
最近CPAN.pmがだいぶ進化したからCPANPLUS.pmの意義が相対的に薄くなったしねー
0412デフォルトの名無しさん2007/05/03(木) 06:35:39
awkは多少かじったのですが、perlはまるっきりの初心者です。どなたかお知恵を貸して下さい。
2つのファイル a.txt と b.txt を比較して、条件にあった行を抽出、出力するスクリプトを作りたいのです。

具体的には、
[a.txt]
ID, field1, field2
1, 5.8, 7.3
2, 6.3, 8.2
3, 3.2, 4.1
4, 4.8, 4.0
5, 8.3, 10.2

[b.txt]
ID, field1, field2
1, 6.8, 7.7
3, 4.3, 5.5
4, 5.9, 4.9

というファイルがあったとき、b.txt のIDに数値が存在する行だけを a.txt から抽出して a2.txt として保存したいのです。

[a2.txt]
ID, field1, field2
1, 5.8, 7.3
3, 3.2, 4.1
4, 4.8, 4.0

と言った具合にです。よろしくお願いします。
0413デフォルトの名無しさん2007/05/03(木) 07:47:00
#!/usr/bin/perl
use strict;
use warnings;
open my $a, '<', 'a.txt' or die;
open my $b, '<', 'b.txt' or die;
my %ids = map { $_ => 1 } map { (split /,/)[0] } <$b>;
while (<$a>) {
    my $id = (split /,/)[0];
    print if $ids{$id};
}
04144122007/05/03(木) 08:00:05
>>413さま
 早速のレス、ありがとうございます。助かりました。
 こんなに簡単にできちゃうんですね。しかし、私にはスクリプトの内容は不明...。解読して勉強させていただきます。
0415デフォルトの名無しさん2007/05/03(木) 13:36:22
use IO::File;

sub func {
my $file = shift(@_);
my $input = IO::File->new($file,"r") or die;
ごにょごにょ
  ・
  ・
}

$filename = (ディレクトリからファイルネームをとるロジック);
&func($filename);

みたいに書くと、一番最初にいきなりファイルオープンのエラーが出ます。
その後、ファイルネームをとるロジックが走ってる模様…。
何故か解らないのですが原因解りますでしょうか。
0416デフォルトの名無しさん2007/05/03(木) 13:48:01
>>415
原因はわかりますよ。
あんたが、そう動くようにプログラムを作ったから。
04174152007/05/03(木) 13:53:53
>>416
早い回答ありがとうございます。
やっぱり自分が悪いんですね。
調べてみます。
04184152007/05/03(木) 14:26:25
うーんやっぱり解らない…。
サブルーチンが先に実行される事なんてあるのか…?
0419デフォルトの名無しさん2007/05/03(木) 14:50:10
>>415
まあエラーメッセージでも貼ってみ
04204152007/05/03(木) 15:05:12
>>419
そのようなファイルやディレクトリはありません at (何行目)
としか出ないんですが…。
0421デフォルトの名無しさん2007/05/03(木) 15:08:03
>>420
訳したりせずにそのまま貼れ
04224152007/05/03(木) 15:16:54
そのようなファイルやディレクトリはありません at test.pl line 32.

だけです。
CentOS4.4、perl5.8.5です。
04234152007/05/03(木) 15:30:01
フルパス指定してなかった…。

>>422さん、親身になってくれてありがとうございます。
くだらないミスで申し訳ありません。
本当にすみませんでした。
0424デフォルトの名無しさん2007/05/03(木) 15:40:40
>>423
s/422/421/g;
0425デフォルトの名無しさん2007/05/03(木) 15:47:38
突っ込みどころはいろいろあるけど、エラーメッセージは自分のためにも他人のためにもわかりやすくすべし。

my $fp_in = IO::File->new($filename, "<") or die qq(cannot open '$filename': $!);
04264152007/05/03(木) 16:07:57
>>425
了解です。ただ or die $!;だけしてました。
連休中にコメントありがとうございました。
0427デフォルトの名無しさん2007/05/05(土) 14:17:50
chompって何の略ですか?
0428デフォルトの名無しさん2007/05/05(土) 14:26:54
>>427
略じゃないよ。
噛み切るとかそんな感じ。
0429デフォルトの名無しさん2007/05/05(土) 14:41:24
chomp 【自動】 〜をムシャムシャ食う◆【同】champ
0430デフォルトの名無しさん2007/05/05(土) 14:43:41
へー。ありがとうございました。
0431デフォルトの名無しさん2007/05/05(土) 15:30:31
オブジェクト指向で書いていないので、巨大モジュールの分割がうまいこといかんのです><
具体的には、親パッケージが子パッケージをuseしているとき、
子パッケージから親パッケージのサブルーチンを呼べません。

Giko.pm
[-------
 package Giko;
 use Giko::Mona;
 (omaemonaサブルーチンをEXPORTしている)
 sub omaemona { .... }
-------]

Giko/Mona.pm
[-------
package Giko::Mona;
-------]

となっていた場合、
Giko::Monaの中でomaemonaを呼ぶ方法は、Giko::omaemonaしかないでしょうか?
Giko::Monaでuse Gikoはできないし、use base 'Giko';は違うみたいですし。
0432デフォルトの名無しさん2007/05/05(土) 17:12:46
Encodeモジュールのfrom_toを用いて
「�@」「�A」や「�T」「�U」などを
sjis <-> euc-jp 変換すると文字化けしてしまいます。

回避するにはどうすればいいでしょうか?
0433デフォルトの名無しさん2007/05/05(土) 19:33:33
>>432
つEncode::EUCJPMSのcp51932
0434デフォルトの名無しさん2007/05/05(土) 20:32:56
それは拡張文字なので、 sjis じゃなく cp932 を指定。
0435デフォルトの名無しさん2007/05/05(土) 20:40:22
単純に分割するなら、全部同じ名前空間に展開すればいいんじゃない

Giko/Mona.pm
[-------
package Giko::Mona;
package Giko;
-------]
04364312007/05/06(日) 01:14:39
遅レスで申し訳ないです。
>>435
なるほど。
まとめると巨大ファイルになりがちで不安だったのですが、
今のところはまだなんとか1ファイルにまとめられそうなので、
同じファイルスコープで仲良く共存してみます。
ありがとうございました。
0437デフォルトの名無しさん2007/05/06(日) 17:12:14
例
    ( split /\//, $x )[0 .. bar];

リストの末尾要素を除いたリストを返す方法、知りませんか?
barをどう記述すりゃいいのやら。

Perl ならできそうな気がするんですが。思い当たりません。
検索してみたものの、それらしいものも見つけられません。
0438デフォルトの名無しさん2007/05/06(日) 17:31:22
( @hoge, undef ) = split //, $foo ;
じゃダメなの?
0439デフォルトの名無しさん2007/05/06(日) 17:43:01
>>437
尻尾だけ消すのじゃだめなの?
0440デフォルトの名無しさん2007/05/06(日) 17:44:40
最後から2番目の要素をひとつ抜き出すだけなら (〜)[-1]
でいいんだけど、範囲演算子で(〜)[0..-1]とは書けないんだよな。

配列変数なら@x[0..$#x-1]という書き方もあるが、リストでは$#xに
相当するものが書けない。

とりあえずおもいついたのはこれ。

sub{@_[0..$#_-1]}->(〜)
0441デフォルトの名無しさん2007/05/06(日) 18:03:14
>>437
@list = split(/\/(?=.+\/)|\/.+$/, $x)

とかやってないで、全部入れてから$#list--すればいいんじゃね?
0442デフォルトの名無しさん2007/05/06(日) 18:31:19
>>429
首チョンパの略と思ってた
0443デフォルトの名無しさん2007/05/06(日) 18:38:52
まずchopありき。
やがてより安全なchomp生まれり。
0444デフォルトの名無しさん2007/05/06(日) 18:52:28
え…普通にpop関数じゃだめなの
0445デフォルトの名無しさん2007/05/06(日) 19:51:31
popの第1引数は左辺値つーかARRAYじゃないと×じゃ?
0446デフォルトの名無しさん2007/05/06(日) 20:19:01
splice @{[split /\//, $x]}, 0, -1 というのはどうだ
0447デフォルトの名無しさん2007/05/06(日) 20:35:56
ちょんぱ
0448デフォルトの名無しさん2007/05/06(日) 21:07:48
# 悪い例
(split /\//, $x)[0..(split /\//, $x)-2]
0449デフォルトの名無しさん2007/05/06(日) 21:21:14
>>448
scalar contextのsplitは@_を上書きしちゃうからねぇ。
0450デフォルトの名無しさん2007/05/06(日) 22:19:22
(split m{/})[0..(s{/}{/}g)-1]
0451デフォルトの名無しさん2007/05/07(月) 00:17:23
みんなよく頑張ったな。先生感心したぞ。

my $str = 'foo/bar/baz/quux';
sub p { printf ">>%d:[%s]\n", shift, join ',', @_ }

p(438, (my @arr, undef) = split m{/}, $str);
p(439, do { @arr = split m{/}, $str; pop @arr; join ',', @arr }); # & >>444-445
p(440, sub { @_[ 0 .. $#_ - 1 ] }->(split m{/}, $str));
p(441, split m{/(?=.+/)|/.+$}, $str);
p(446, splice @{[ split m{/}, $str ]}, 0, -1);
p(448, (split m{/}, $str)[ 0 .. (split m{/}, $str) - 2 ]);
p(450, (split m{/}, $str)[ 0 .. $str =~ tr|/|/| - 1 ]);
p(451, $str =~ m{(.+?)/}g);
0452デフォルトの名無しさん2007/05/07(月) 00:52:33
>>451
my $str = 'foo/bar/baz/quux';
を
my $str = '/foo/bar/baz/quux/';

にすると、いろいろ違いが出てくるね。
0453デフォルトの名無しさん2007/05/07(月) 00:58:21
>>451
重箱の隅つつき。

p(451 の行の正規表現。(.+?) ではなく(.*?) でなければ
split を用いた他の例と挙動が違うぞ。
$str = q{/foo/bar/baz/quux} で確かめろ。
04544372007/05/07(月) 01:10:11
多くのお返事ありがとうございました。

>440
単純な範囲演算子で記述できそうに思った私が考え足らずだったようです。
sub { @_[0 .. $#_ - 1] }->(split /\//, $x) は見た目にわかり易いですね。
いろいろ応用できそうだし。しかし、私は露とも思い至りませんでした。

>441
まぁ、そうなんですよね。

$file = "/usr/local/bin/bar"; # ファイル名が与えられて。。。
$fold = join "/", 〜split /\//, $file を使った記述〜; # フォルダ名を得る。

ここで余分に変数を使わず、可読性も損なわない方法がありそな気がしたもので。

>446
splice の第一引数はARRAYしかダメだと諦めてしまったのです。
リファレンスについて熟知すると、こんなやり方に気付くんですね。

自分の頭の硬さとリファレンスに対する理解の浅さを恥じて
精進したいと思います。
まず、>440 さんと >446 さんの方法、どっちを使うか悩みます。
0455デフォルトの名無しさん2007/05/07(月) 01:17:53
>>454
いいからFile::Specを使え。
0456デフォルトの名無しさん2007/05/07(月) 01:19:48
>>454
いや、可読性が低下するから、いったん配列に入れてからスライスした方がいいと思うぞ
上のは遊びなんだから
0457デフォルトの名無しさん2007/05/07(月) 02:28:37
こういうよくありそうな処理が案外スラっとかけないもんなんだね。
Dだと [0 .. $ - 1] でいけるんだが。
0458デフォルトの名無しさん2007/05/07(月) 05:57:16
>>456
しかし落ち着いて俯瞰すればこういう雑用の可読性を気にする時点でそのソース全体が残飯ですね。
0459デフォルトの名無しさん2007/05/07(月) 08:33:53
超初心者でふが良いですか?

標準のキーボードから入力を受け取ってどうやれば入力を反映させれるかわからないです・・・

#!/usr/local/bin/perl -w
require 'jcode.pl';
print"あなたはどれを使いますか?<br/>\n1:ドラゴン<br/>\n2:ゴーレム<br/>\n3:こねこ<br/>\n";
while(<>){
if($_=m/3/){print"これはこねこ"};
};

↑これでは3を入力するたびに、これはこねこって出てくるんですが、

#!/usr/local/bin/perl -w
require 'jcode.pl';
print"あなたはどれを使いますか?<br/>\n1:ドラゴン<br/>\n2:ゴーレム<br/>\n3:こねこ<br/>\n";
while(<>){
if($_=m/3/){print"これはこねこ";$kyara=3}
elsif($_=m/2/){print"これはゴーレム";$kyara=2};
};

これのelsif文が実行されないぽいんですがなんででふか?

頭硬くてすみません・・・
0460デフォルトの名無しさん2007/05/07(月) 09:30:09
> $_=m/3/
でなにをやっているのか良く考えてみ。
0461デフォルトの名無しさん2007/05/07(月) 11:52:54
>>460さん>
$_=m/3/ の部分を$_==3 にすると、うまく行きました!

最初$_==3でエラーが出て、良くわからなくて正規表現にすればうまくいくかなとか思って$_=m/3/に直して、(他の部分も少し直して、)それで3の時うまくいったのでてっきり正解かと思いこんでました。

$_=m/3/を$_==3と同じ意味で使ったつもりだったけど、動作は違うんですね。
もうちょっと調べてきます。
ありがとうございました。
0462デフォルトの名無しさん2007/05/07(月) 12:40:19
うまくいきました!
正規表現、はじめてで意味もよく知らずに=m/3/とかしてたけど、=~/3/とするのが正しかったんですね(汗
==3にすると数字以外の時の入力で(変数は数字ではありませんみたいな)無駄なエラーが出たけど=~/3/ならそういう変なエラーも出ないみたいなので=~/3/を使うことにしました!
↓

$kyara=4;
while($kyara==4){
$_=<STDIN>;
if($_=~/3/){print"これはこねこ";$kyara=3}
elsif($_=~/2/){print"これはゴーレム";$kyara=2}
elsif($_=~/1/){print"これはドラゴン";$kyara=1};
};

もうちょっとがんばってきます!
0463連カキスマソ2007/05/07(月) 13:11:33
もうちょっとがんばってきました(滝汗
if($_=~/3/){処理1}
elsif($_=~/2/){処理2}
とすると、3でも23でも32でも先に$_=~/3/にマッチしてしまう(32なんかは$_=~/2/にマッチさせたい)ので、ちょっと修正しました。
↓

#!/usr/local/bin/perl -w
require 'jcode.pl';
print"あなたはどれを使いますか?<br/>\n1:ドラゴン<br/>\n2:ゴーレム<br/>\n3:こねこ<br/>\n";
$kyara=4;
while($kyara==4){
$_=<STDIN>;
if($_=~/3$/){print"あなたはお昼ね好きのこねこを選びました☆";$kyara=3}
elsif($_=~/2$/){print"あなたはお人よしのゴーレムを選びました☆";$kyara=2}
elsif($_=~/1$/){print"あなたは気の強いドラゴンを選びました☆";$kyara=1};
};
print "(番号=)$kyara";

↑
これなら33111とかって入力でも3ではなく1のドラゴンとして判断してくれます☆

正規表現って便利ですね☆

>>460さん、アドバイス�dクスでした!
0464デフォルトの名無しさん2007/05/07(月) 13:18:31
一つ攻略おめ
そこで更に便利な連想配列をどうぞ
0465デフォルトの名無しさん2007/05/07(月) 13:19:13
あっ、この場合だったら配列だけでいいのか
04664602007/05/07(月) 16:10:24
462

なんか前向きなやつだなw
どっかの知恵袋のとは大違いだ。

ちょっと補足しておくと、Perlの場合処理対象の
変数を省略できることが多い。
たとえば $_ =~ /1/ なら /1/とか。
$_ = m/1/ と書いちゃうと、マッチの結果を
$_ に代入と解釈されて前の値を壊しちゃう。
ほかにもいろいろあるが長くなるので書かない。
まあがんばれ。

0467デフォルトの名無しさん2007/05/07(月) 16:18:01
>>459のチラ裏日記は、他人が見ても役に立ちそうだな。続けてくれ。
0468デフォルトの名無しさん2007/05/07(月) 17:04:17
てか
$inkey = <STDIN>;
これで読み取ったときって改行コード入ってない?
そこらへんも気をつけたほうがいいかな
0469デフォルトの名無しさん2007/05/07(月) 17:27:02
XML::Parser::PerlSAX のエラーハンドリングについて、どなたかご存知でしたら教えてください。
Parse対象のXMLにエラーがあった場合に、ユーザー関数をコールバックさせようと考えています。

デフォルトだと
mismatched tag at line **, column **, byte ***, at
/user/lib/perl5/site_perl/5.8.8/i386-linux-thread-multi/XML/Parser.pm
line 187

のように出力されてdieします。

0470デフォルトの名無しさん2007/05/07(月) 17:27:31
http://search.cpan.org/~kmacleod/libxml-perl-0.08/lib/XML/Parser/PerlSAX.pm

をみると、ParserがnewされるところでErrorHandlerに自分で作ったもの(例えばMyErrorHandler等)を指定すればよさそうなのですが、具体的になんという名前の関数を用意し、どのタイミングで呼び出されるかなど、よくわかりませんした。

すみませんが、どなたかお分かりでしたらアドバイスをください。
0471デフォルトの名無しさん2007/05/07(月) 18:14:52
使ったことないので分からんけど
ErrorHandlerに無名サブルーチンを渡しておけばパースに失敗したときにコールバックしてくれるんじゃないの?
0472デフォルトの名無しさん2007/05/07(月) 18:37:28
>>470
俺も使ったことないけど、フツーに考えて
$parser->{ErrorHandler}で例外をキャッチできるってことなんじゃなないの?
0473デフォルトの名無しさん2007/05/07(月) 18:59:18
>>466さん&>>468さん>
�dクスです!参考にして少し書き換えました!

#!/usr/local/bin/perl -w
require 'jcode.pl';
print"あなたはどれを使いますか?<br/>\n1:ドラゴン<br/>\n2:ゴーレム<br/>\n3:こねこ<br/>\n";
while (<>){
if (/[1-3]$/) {chop;$kyara=chop;last;}
};

if($kyara==1){print"あなたはお昼寝好きのこねこを選びました☆"}
elsif($kyara==2){print"あなたはお人好しのゴーレムを選びました☆"}
elsif($kyara==3){print"あなたは強気なドラゴンを選びました☆"};

while (<>){};

こんな感じに☆

>>464さん>
必要になってからがんがります☆(コラ
0474デフォルトの名無しさん2007/05/07(月) 19:00:38
あ、よく見たら、ドラゴンとこねこが逆(汗
0475デフォルトの名無しさん2007/05/07(月) 19:10:56
キメラは?キメラはいないの?
0476デフォルトの名無しさん2007/05/07(月) 19:14:49
1しか押さないだろこれは・・・
0477デフォルトの名無しさん2007/05/07(月) 19:27:33
>>475が「イサキは?」に見えた。
配列や printf を覚えて欲しくなるけど、楽しみながらコツコツやってそうでいいな。
0478デフォルトの名無しさん2007/05/07(月) 19:38:06
>>475
ああ、大きなキメラが入るよ。 今年一番の大幅改良だ。
0479デフォルトの名無しさん2007/05/07(月) 21:43:44
たった今Perlにprintfやsprintfがあることを知った。
俺は車輪を10も20も発明していたらしい。すばらしい!
0480デフォルトの名無しさん2007/05/07(月) 23:31:32
むしろ、どういうルートで習得していけば
そいつらと鉢合わせずに済むか、を考えるのが難しいかも。
04814732007/05/07(月) 23:32:46
質問してもいいでしょうか。。

print system("cls");
と書くと、PCではちゃんと画面クリアしてくれるんですが、サーバにアップしたら画面クリアしてくれませんでした。
ブラウザの画面をクリアする方法って無いんでしょうか・・?

あと、サーバにアップしたら、

while (<>){
if (/[1-3]$/) {chop;$kyara=chop;last;}
};

という部分も全て無視されました。
たぶん、while(<>)の部分がサーバでは無視されてしまってるんだと思うんですが、
どうすれば良いですか?
HTMLでフォームを表示させてそこから入力させるしか無いのでしょうか?
0482デフォルトの名無しさん2007/05/08(火) 00:03:55
clsはWinのコマンドだし (一応リンクは張ってはあるらしいが・・・)、
そもそも 「コンソールとブラウザの挙動を勉強してください」 としかいえない


ブラウザに対して print ""; でえぇんとちゃうのんかと


STDIN になんもデータ無いからあたりまえです
0483デフォルトの名無しさん2007/05/08(火) 01:16:20
これはどう見ても新手の荒らし
0484デフォルトの名無しさん2007/05/08(火) 02:59:42
>>481
荒らし以前に板違い。>>1 嫁
0485デフォルトの名無しさん2007/05/08(火) 05:32:43
すみません。
CGI以外の純粋なperlのみって書いてありますね。
気をつけます。

>>482
なんとなく理解しました。
clsをclearとしても無理だったので普通にフォームからの入力にします。

ご迷惑かけてすみませんでしたm(__)m
0486デフォルトの名無しさん2007/05/08(火) 09:09:04
>>478
「大幅改良っ!!キメラぁぁ!!おにいちゃんかっこいいいいぃぃぃい ぃくううううう!」
0487デフォルトの名無しさん2007/05/09(水) 14:52:59
>>481
JavaScript 埋め込んでクリアすれば良いんじゃない?
0488デフォルトの名無しさん2007/05/10(木) 13:07:53
すみません、
・ローカル変数の一覧を取得する方法
・ハッシュの内容をローカル変数に一括して設定する機能(PHPのextract()関数に相当する機能)
があれば教えてください。
0489デフォルトの名無しさん2007/05/10(木) 13:32:01
>>488
use Dumpvalue とか。

hashの展開はこんなんでいけるだろ。
while (($key, $value) = each %hash) {
eval("\$$key = \$value");
}
ただし任意のキーが使われる場合はexploitになるんで別の方法で。
0490デフォルトの名無しさん2007/05/10(木) 13:56:22
デバッガでも作ろうというのでなければハッシュのまま使ったほうが
いいと思うよ。たぶんろくなことにならない。
0491デフォルトの名無しさん2007/05/10(木) 14:20:02
cpanなしでHTML::Entitiesをインストールする方法を教えていただけませんか。
「Perl "HTML::Entities" インストール」でぐぐってもヒットせず困ってます。
0492デフォルトの名無しさん2007/05/10(木) 14:58:35
>>491
OSは?
0493デフォルトの名無しさん2007/05/10(木) 15:06:48
ActivePerl(Win)だと初めから入ってるし、Unix系で「CPANなしで」ってのも
ピンと来ないし何だろう。「レン鯖で使いたい」なのかな。
04944912007/05/10(木) 15:50:52
>>492
Linuxです。Perl5.8。
>>493
その通り、海外のレンタルサーバーです。
ただ今はロ−カルのMacでやってるんで、CPANにトライしてみたんですが、最初にいろいろ英語できいてきて、適当に答えてたら設定がおかしくなったのか、
cpan install HTML::Entities
がfetchできないとかでインストールできませんでした。
CPANむずい・・・
0495デフォルトの名無しさん2007/05/10(木) 16:01:10
>>494
要するに、ロ−カルのMacにインストールできずに
> CPANむずい・・・
と言ってるわけだ。

こんなこと言っている人がCPANなしでレンタルサーバにインストール
しようってわけね。考えるだけ時間の無駄というものでしょう。
0496デフォルトの名無しさん2007/05/10(木) 16:04:37
>>491
READMEに書いてあるじゃん
0497デフォルトの名無しさん2007/05/10(木) 16:18:17
HTML-Parser-*.tar.gz ひろってきて展開して
perl Makefile.PL && make && make install
だけどcpanの英語がわからんとか言ってるレベルじゃもっと無理じゃね?
04984912007/05/10(木) 18:34:51
>>497
HTML::EntitiesはHTML::Parserの一部ということでしょうか。
試しにHTML::Parserをインストールしてみると・・・たしかにHTML::Entitiesも印ストールされました。
貴重なヒントをありがとうございました。
#こんな情報どこにあるんですか。http://www.xav.com/perl/site/lib/HTML/Entities.html とか見ても書いてないし。

ちなみにHTML::ParserはMacPortsをつかって
sudo port install p5-html-parser
でいけました。CPANは難しくて分からなかった人でもMacPortsなら楽勝!MacPorts万歳!
0499デフォルトの名無しさん2007/05/10(木) 18:37:45
そ、それはよかった
0500デフォルトの名無しさん2007/05/10(木) 19:02:37
>>498
http://search.cpan.org/dist/HTML-Parser/lib/HTML/Entities.pm
0501デフォルトの名無しさん2007/05/10(木) 19:08:36
>>498
http://search.cpan.org/ をブックマークしておくといいね。
0502デフォルトの名無しさん2007/05/10(木) 19:08:43
>>498
cpanモジュールなんだからcpanで調べろよ。

search.cpan.orgでHTML::Entitiesをサーチすれば一番上に出てくる

ttp://search.cpan.org/~gaas/HTML-Parser-3.56/lib/HTML/Entities.pm

を見れば一発でわかるだろ。
0503デフォルトの名無しさん2007/05/10(木) 22:17:13
Tkを使用して、GUIアプリを作成しています。

大きく二つのフレームから構成しています。
1.左フレーム
2.右フレーム

この二つのフレームにそれぞれScrollbarを設けたいのですが、
Frameウィジェットには何故か-yscrollbarオプション等が無く
Scrollbarウィジェットを動作させることができません。
Scrolledで強引に取り付けると、レイアウトがおかしくなります。
どうおかしくなるかというと、

1.Frame内部のウィジェットの配置が決まらない
(HTMLでいう、alignやvalignが効かない)
2.そもそも、実行時にワーニングのような表示が出る(実行はできる)

1.に関しては、スクロールバーを外せば正常に(期待通りに)配置されます。


Tkを使用される方は、こういうフレーム分けしたレイアウトで、
かつ各フレームにスクロールバーを表示させたい場合、どのような
ウィジェットの使い方をされるのか、教えていただけないでしょうか。
0504デフォルトの名無しさん2007/05/10(木) 22:51:49
Paneというものを見つけました。
Tk::Pane provides a scrollable frame widget.
Once created it can be treated as a frame, except it is scrollable.

自己解決です。
スレ汚し申し訳ありません。
0505デフォルトの名無しさん2007/05/10(木) 23:08:52
Tkのことは分からんけど、そういうときはコンテナにしたフレームの中に
それぞれウィジェットを作って、その中で更にスクロールバーを設けるんでないかい
0506デフォルトの名無しさん2007/05/10(木) 23:09:22
ずこー
リロードしときゃよかった
0507デフォルトの名無しさん2007/05/11(金) 02:34:36
($1, $2, $3, $4 ...)
に相当するような配列の表現はありますか?
0508デフォルトの名無しさん2007/05/11(金) 02:56:54
もっと詳しく
できるならやろうと思ってることも
■ このスレッドは過去ログ倉庫に格納されています