Perlについての質問箱 18箱目
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
2005/09/18(日) 02:23:25"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
● 2005/03/17現在の最新版: 5.8.7
● 2005/03/17現在の開発版: 5.9.2
リンク集は>>2-3
過去スレは>>4-5
0153デフォルトの名無しさん
2005/09/27(火) 21:00:150find . -type f | xargs perl -ne 'if(/<div.*?class=(.*?)[ >]/){print $1,"\n"}' | sort | uniq
厳密に"perlで"とは指定されてないからシェルスクリプトで作ってやったぜ。
perlは使ってやってるから、
お前にやる気があるなら純Perlスクリプトの参考にはなるだろ。
0154GiantLeaves ◆6fN.Sojv5w
2005/09/27(火) 21:21:040同じディレクトリにあるファイルを読み込むのならできる。
ディレクトリの再帰検索もできるのかな?
0155デフォルトの名無しさん
2005/09/27(火) 22:12:51ID:0らくだ本によれば、strict 'vars' は、「myで宣言されている」
「完全修飾されている」「輸入されている」のいずれにも該当しない
ような変数にアクセスすると、コンパイル時エラーを発生させる、
とある。%ABCは、その何れにも該当しない。
型グロブを使うのを止めて、リファレンスを使うのが最適であると
思われる。
0156デフォルトの名無しさん
2005/09/27(火) 22:59:13>>154
File::Find使えよ
0157GiantLeaves ◆6fN.Sojv5w
2005/09/27(火) 23:04:040158デフォルトの名無しさん
2005/09/27(火) 23:09:31sub test {
local(*ABC) = @_;
our %ABC; # 追加
print keys(%ABC);
}
とかじゃ駄目だった?
0159153
2005/09/27(火) 23:33:02エスケープがひどいことになるのでめどくなって投げた。
実用上はそんなに問題ねえだろ、という手抜き精神が重要ってことだ。
0160デフォルトの名無しさん
2005/09/28(水) 00:40:040161デフォルトの名無しさん
2005/09/28(水) 01:40:33sub test {
>>152
my %ABC = @_;
print keys(%ABC);
}
で、良いと思うのだが。
localで型グロブなんて何年前のソース読んで勉強してるんだ?
0162デフォルトの名無しさん
2005/09/28(水) 02:42:08active perlに標準で付いてるperlccなのですが、
ライブラリが足りないと怒られます
Note (probably harmless): No library found for oldnames.lib
Note (probably harmless): No library found for kernel32.lib
Note (probably harmless): No library found for user32.lib
Note (probably harmless): No library found for gdi32.lib
Note (probably harmless): No library found for winspool.lib
Note (probably harmless): No library found for comdlg32.lib
Note (probably harmless): No library found for advapi32.lib
Note (probably harmless): No library found for shell32.lib
Note (probably harmless): No library found for ole32.lib
Note (probably harmless): No library found for oleaut32.lib
Note (probably harmless): No library found for netapi32.lib
Note (probably harmless): No library found for uuid.lib
Note (probably harmless): No library found for ws2_32.lib
Note (probably harmless): No library found for mpr.lib
Note (probably harmless): No library found for winmm.lib
Note (probably harmless): No library found for version.lib
Note (probably harmless): No library found for odbc32.lib
Note (probably harmless): No library found for odbccp32.lib
Note (probably harmless): No library found for msvcrt.lib
これらのライブラリを入手したいのですがどうすればいいでしょうか?
0163デフォルトの名無しさん
2005/09/28(水) 04:02:23perlcc はどうせ使い物にならないから
諦めなされ。
0164デフォルトの名無しさん
2005/09/28(水) 06:32:46またお前か
0165デフォルトの名無しさん
2005/09/28(水) 08:17:28それだとhashをリストにばらしてからまた再度作るようになって
要素数が多いとオーバーヘッドが馬鹿にならんよ。お前もどういう
ソース読んで勉強してるんだ(w
0166デフォルトの名無しさん
2005/09/28(水) 08:28:18お前は自民党のタイゾーか
0167ヽ(´ー`)ノ ◆.ogCuANUcE
2005/09/28(水) 10:07:56$telnet->cmd('terminal-type vt100');
とかいう話ではなくて?
0168デフォルトの名無しさん
2005/09/28(水) 10:59:47$telnet = new Net::Telnet::Cisco(Host => "xxx.xxx.xxx.xxx")
もしくは
$telnet->login(loginName => "user")
の時点で設定したいのです。
一般的なtelnetコマンドはセッション開始時にヘッダ部に
Terminal Typeが入ってるみたいなのですが…
0169デフォルトの名無しさん
2005/09/28(水) 11:35:02付けたいのですが
2005/09/28 → 20050928 → 2005092801(後付けで番号を入れる)
何かうまい書き方ないですかね。
ご教授お願い致します。
0170ヽ(´ー`)ノ ◆.ogCuANUcE
2005/09/28(水) 11:41:26Net::Telnet の TELOPT_TTYPE で出来ない?
今手元に好き勝手できる Cisco ルータがないから試せないけど。
>>169
やりたいことが上手く伝わってこない。
my $date = '2005/09/28';
$date =~ s,/,,g;
my $result = $date . sprintf('%02d', $num);
こういう話じゃなさそうだが…。
0171デフォルトの名無しさん
2005/09/28(水) 12:05:59素直にtimeの戻り値を連結すれ。
0172デフォルトの名無しさん
2005/09/28(水) 12:08:31レスありがとうございます。
Net::Telnetのドキュメントなど色々みたのですが
いまいちTELOPT_TTYPE(@EXPORT_OK)の設定方法が
よくわからなくて…
こいつにvt100設定すればいいのかなぁ?
0173デフォルトの名無しさん
2005/09/28(水) 12:10:53ありがとうございます。
素直に連結しようかと思います。
0174デフォルトの名無しさん
2005/09/28(水) 12:11:32素直に
$seq = 1; ←連番
@t = localtime(time);
$result = sprintf("%04d%02d%02d%02d", $t[5] + 1900, $t[4] + 1, $t[3], $seq);
じゃダメなの?
0175デフォルトの名無しさん
2005/09/28(水) 12:23:19http://search.cpan.org/src/AJWOOD/Term-VT102-0.82/VT102/examples/telnet-usage.pl
こんな感じじゃね
0176デフォルトの名無しさん
2005/09/28(水) 13:32:49無事Terminal Typeの設定ができました。
レス下さったみなさん、ありがとうございましたm(_ _)m
0177デフォルトの名無しさん
2005/09/28(水) 13:57:56どうしたらいいでしょうか?
うまい置換式が思い浮かばなくて・・・
0178デフォルトの名無しさん
2005/09/28(水) 14:04:230179デフォルトの名無しさん
2005/09/28(水) 14:35:15どうもありがとうございます
0180デフォルトの名無しさん
2005/09/28(水) 15:04:57こういう嘘つきにはレスすんなよ
0181デフォルトの名無しさん
2005/09/28(水) 15:39:53半島に帰れ!!!
0182デフォルトの名無しさん
2005/09/28(水) 15:41:28>>181カエレ
0183デフォルトの名無しさん
2005/09/28(水) 16:36:28漏れもこの質問者と同じ相談なんだけど、その回答者の中で、
「クリックした時の挙動はブラウザによるので、
たとえば全てのOS、ブラウザでダウンロードをさせたいとなると
CGIで処理するしかないと思います。
CGIと言ってもPerlなら4,5行程度でできます。」
と書いてあったんだけど、このPerl4,5行を詳しい人、書いてくり。
0184デフォルトの名無しさん
2005/09/28(水) 16:58:260186ヽ(´ー`)ノ ◆.ogCuANUcE
2005/09/28(水) 17:44:19#!/usr/bin/env perl
print "Content-Type: application/octet-stream\r\n\r\n" . `cat hogehoge.pdf`;
で駄目なん?
0187GiantLeaves ◆6fN.Sojv5w
2005/09/28(水) 19:02:31div要素のclass属性の属性値を書き出すのだったら、
DOM (Document Object Model) の方がやりやすい。
JavaScriptで
document.getElementsByTagName("div");
をやって、全アイテムについて、該当する属性の属性値を書き出せばいいのだから。
ディレクトリの再帰検索を誰か解説してください。
0188ヽ(´ー`)ノ ◆.ogCuANUcE
2005/09/28(水) 20:10:50use warnings;
use HTML::Parser;
use File::Find;
my @class = ();
my $parser = HTML::Parser->new(
'api_version' => 3,
'report_tags' => [qw/div/],
'start_h' => [ sub { push(@class, $_[0]->{'class'}) if $_[0]->{'class'} }, 'attr' ],
);
my @file = ();
find({ 'wanted' => sub { -f && m/\.html$/ && push(@file, $_) }, 'no_chdir' => 1 }, @ARGV);
foreach my $file_name (@file) {
$parser->parse_file($file_name);
}
{
my %class_history = ();
foreach my $class (grep { ! $class_history{$_}++ } @class) {
print $class, "\n";
}
}
0189ヽ(´ー`)ノ ◆.ogCuANUcE
2005/09/28(水) 20:13:05$ ./find_class.pl foo/ bar/baz/
とかで。
0190デフォルトの名無しさん
2005/09/29(木) 01:11:41USBメモリに入れて持ち運ぶ方法はないですか?
0191デフォルトの名無しさん
2005/09/29(木) 01:33:100192デフォルトの名無しさん
2005/09/29(木) 01:51:23ttp://www.google.co.jp/search?hl=ja&c2coff=1&q=PAR+Perl&btnG=Google+%E6%A4%9C%E7%B4%A2&lr=lang_ja
0193GiantLeaves ◆6fN.Sojv5w
2005/09/29(木) 11:43:480194GiantLeaves ◆6fN.Sojv5w
2005/09/29(木) 11:45:240195GiantLeaves ◆6fN.Sojv5w
2005/09/29(木) 11:46:080196デフォルトの名無しさん
2005/09/29(木) 13:38:530197デフォルトの名無しさん
2005/09/29(木) 14:21:16talk talk 五月蝿いし見にくいYO。
0198デフォルトの名無しさん
2005/09/29(木) 15:19:32Re:より糞
0199デフォルトの名無しさん
2005/09/29(木) 15:36:56特定のタグに囲まれたものだけを対象にかけたいと考えています。
ただ、
・対象となる文字列の点数
・置換前、置換後の文字は任意
という条件があるため、下のような状況の場合、
どうやって正規表現を組むか、悩んでいます。
<tuv> A A A </tuv>
↓AをAAに一括処理
<tuv> AA AA AA </tuv>
tuvタグで挟まれた文字列を変数に抜き出し
↓
変数に対して、A→AAの一括置換
↓
元の文字列と差し替え
という方法がベストなのでしょうか?
0200デフォルトの名無しさん
2005/09/29(木) 15:52:27s/>([^><]+)</&hoge($1)/eg;
sub hoge { my $set = shift; $set =~ s/A/AA/g; return $set; }
こんな感じ?
0201デフォルトの名無しさん
2005/09/29(木) 15:52:30みなさんお金払って使ってるんでしょうか、それともメモ帳を?
0202デフォルトの名無しさん
2005/09/29(木) 16:03:08世の中には秀丸とメモ帳しか無いとでも思っているのか?
0203デフォルトの名無しさん
2005/09/29(木) 16:09:41スレ違いなので学校で先生に同じ質問しろ。
0205デフォルトの名無しさん
2005/09/29(木) 16:18:39スレ違い。どこの学校だ? 情報リテラシに読み書きも怪しそうだが…
0207デフォルトの名無しさん
2005/09/29(木) 23:20:21スレ違いよりタチ悪いよ。
0208デフォルトの名無しさん
2005/09/29(木) 23:29:100209デフォルトの名無しさん
2005/09/29(木) 23:54:21ソースは? ひょっとして "フリー制度へのお申し込み" の事を
単に無料と呼ぶのなら、誤解の元で迷惑にしかならないが。
0210デフォルトの名無しさん
2005/09/30(金) 03:40:54どう違うんだ?
0211デフォルトの名無しさん
2005/09/30(金) 06:43:550212デフォルトの名無しさん
2005/09/30(金) 07:00:480213デフォルトの名無しさん
2005/09/30(金) 07:29:280214デフォルトの名無しさん
2005/09/30(金) 08:30:54WindowsMeでもつかえるフリーのパールってありますか??
0215デフォルトの名無しさん
2005/09/30(金) 08:50:18http://www.activestate.com/Products/ActivePerl/
#ちなみに、フリーでないPerlってあるのかな?
0216デフォルトの名無しさん
2005/09/30(金) 09:05:41あんたが貼ったリンク先
0217デフォルトの名無しさん
2005/09/30(金) 09:53:03そりゃ、サポートサービスやオマケツールに対してのライセンスだろ?
Perl本体そのものはフリーで、個人であろうと企業であろうと無償で使うのは
問題ないから、心配すんな >>214
0218デフォルトの名無しさん
2005/09/30(金) 10:04:04こういう話のときは入手するブツを単位に考えるのが自然じゃね?
0219デフォルトの名無しさん
2005/09/30(金) 12:10:48何のモジュールもuseしてなければ、perl.exeとperl5.8.x.dll?さえ
添付してれば動く。
それにバッチファイル付けて知り合いにスクリプトあげたことある。
0220デフォルトの名無しさん
2005/09/30(金) 18:45:370221デフォルトの名無しさん
2005/09/30(金) 18:49:250222デフォルトの名無しさん
2005/09/30(金) 18:51:200223デフォルトの名無しさん
NGNG0224デフォルトの名無しさん
2005/09/30(金) 21:22:57スレ違い
0225デフォルトの名無しさん
2005/10/01(土) 02:14:40助言ありがとうございます。
our
のおかげでハッシュの値は表示できました。
しかし、$ABC{'xxxx'} を表示できません....
0226デフォルトの名無しさん
2005/10/01(土) 11:50:29>定期的に、ID/PWを求められるページにログインする事はperlで出来ますかっ?!
「定期的に」という意味が不明だが、多分、
LWP::UserAgentを使えばできるんじゃないかな。
http://www.hio.jp/translation/perldoc/lib/LWP/UserAgent.html
これ見て解らないときは、Webプログラム板のスレ↓で質問したほうがいいね。
Perlコーディング初心者質問スレ Part 43
http://pc8.2ch.net/test/read.cgi/php/1123777607/l50
0227デフォルトの名無しさん
2005/10/01(土) 14:08:02>abc.3
gakjgajgeiajeiagaga
>sasa
sagageijgeigjeijaiejeiajwjojowjowewgeweeeee
>ushi.1
safakljgeijgleijelaijealijeliajelammmziej
....
のようなファイルを、abc.3という名前のファイルに
>abc.3
gakjgajgeiajeiagaga
sasaという名前のファイルに
>sasa
sagageijgeigjeijaiejeiajwjojowjowewgewe
のように、分けてそれぞれ名前をつけるにはどう書けばよいのでしょうか?
0228デフォルトの名無しさん
2005/10/01(土) 14:15:34while(<F>){
open(FH,">$1") if(m/^>(.+)/);
print FH $_;
}
0229デフォルトの名無しさん
2005/10/01(土) 15:15:11何がしたくてどういう法則で名前付けたいの?
0230デフォルトの名無しさん
2005/10/01(土) 21:02:50マルチファスタファイルの分解でしょうな、きっと。
0231227
2005/10/01(土) 23:37:18プログラムにするとこんな短くていいのですね。
本当に助かりました。
0232デフォルトの名無しさん
2005/10/02(日) 02:24:55今タイピングゲームを作ってます。
普通に提示した文字を入力してOKかNGかを判断できるとこまではできたのですが、
一定時間以内に入力されなかった時にNGとなるようにしたい。
forkを使ってるんですが、どうもうまく行きませんorz
forkは間違ってますか?
他にいい予約語調べたのですがわかません。
入力待ち状態(時間制限)と入力した文字の判断(OK/NG)の同時進行がうまく行かないorz
すいませんが教えて頂けませんかm(_ _)m
0233デフォルトの名無しさん
2005/10/02(日) 03:17:230234デフォルトの名無しさん
2005/10/02(日) 03:38:41どうやって引数渡してる?
test( \%foo );
とかしてるんだよね?
こっちじゃ問題なく動くよ。
0235デフォルトの名無しさん
2005/10/02(日) 05:53:35よくわからんけど。
0236デフォルトの名無しさん
2005/10/02(日) 19:03:53「指定されたサービスは既に存在します。」
とか言われて起動すらできないんですが・・・
OSはWindows98SEです。
解決方法を教えてください。
0237デフォルトの名無しさん
2005/10/02(日) 19:32:29Perlのバージョン依存らしい。
5.8以降だとalarmも実装されているそうな。
0238デフォルトの名無しさん
2005/10/03(月) 12:00:07perlで一つのプログラムを複数(大量)のファイルに対してかけるときは
どういったやり方があるのでしょうか?
どなたか教えてください。
0239デフォルトの名無しさん
2005/10/03(月) 12:04:010240デフォルトの名無しさん
2005/10/03(月) 13:31:22シェルスクリプトかバッチファイル
0241デフォルトの名無しさん
2005/10/03(月) 13:45:06複数のファイルを処理するように書くといいです。
0242238
2005/10/03(月) 14:05:16例えば、すべて頭にSTEPという文字列がつくファイルを一度に大量に
処理するときには,シェルでperl プログラム STEP*という使い方は
できないようですが、どうすればよいのでしょうか?
プログラムは$ARGV[0]でファイルを読み込んでいます。
0243デフォルトの名無しさん
2005/10/03(月) 14:09:03for i in STEP*; do
perl プログラム $i
done
でできると思う
0244デフォルトの名無しさん
2005/10/03(月) 14:40:47> シェルスクリプトがよくわかっていないのかもしれませんが
うん、その通りだ。
STEP* というのは、Perlに渡された段階で複数のファイル名に展開されてるんだよ。
だから、Perl側で($ARGVをshiftせずに)$ARGV[0] しか見てないのなら、
最初の1つしか処理できないのは当然。
0245デフォルトの名無しさん
2005/10/03(月) 15:24:06perlを起動すると、配列 @ARGV に、引数の一覧が入っている。
で、$ARGV[0]は配列@ARGVの先頭の要素な。
だから、
今のプログラムの処理のメインループを以下の構造で囲めば、
望み通りのことができると思うぞ。
while(@ARGV){
...
shift(@ARGV);
}
0246デフォルトの名無しさん
2005/10/03(月) 15:35:29仕事場までラクダ本持っていくのめんどくさい。
0247デフォルトの名無しさん
2005/10/03(月) 15:42:59まずラクダ本を持っていくのをやめるところからはじめよ。
0248デフォルトの名無しさん
2005/10/03(月) 15:48:28百科事典みたいに分厚くなったので、買い替えをためらってる…。
0249デフォルトの名無しさん
2005/10/03(月) 15:53:590250デフォルトの名無しさん
2005/10/03(月) 17:22:45本が壊れる(背の部分が割れてページが抜けてくる)まで読んだ。
青ラクダがなかなか日本で出なかったので、perldocとCPANモジュール読みまくり。
黒豹は英語で読んだ。
で、青ラクダ出たときには、読むべきところが少なくて(赤ラクダとそう大して変わらん)、
そのままになってる。perldocで十分だな。個人的には。
0251236
2005/10/03(月) 20:58:08前は普通にインストールできたんだけどね。
0252デフォルトの名無しさん
2005/10/03(月) 21:02:40パターンにマッチしていたら表示するというのはどうやるのでしょうか?
位置が決まっていれば、/\w+\s(\w+)/などのように、正規表現を使ってできるのですが、
この場合は何を使えばよいのでしょうか?
■ このスレッドは過去ログ倉庫に格納されています