トップページphp
1001コメント311KB

Perlコーディング初心者質問スレ Part 59

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん2009/02/16(月) 11:42:29ID:gvPTpodw
Perlのコーディングで困ってる人のスレです。

【投稿する際の注意】
質問するときは内容をよく吟味してから投稿してください。
「コマンドの意味がわかんない」とかはマニュアル見ましょう。
回答者さんは何でも屋じゃありません。

1: 自分はこういう事がしたい。
2: それでこんな風にやってみたが・・・
3: こんなエラーが出て上手く行かなかった。

最低でも1と3が無いと誰も答えられないよ。
良い回答は良い質問から。一緒に勉強しましょう。

お勧めサイトは >2 以降

前スレ http://pc11.2ch.net/test/read.cgi/php/1218030872/
0002nobodyさん2009/02/16(月) 11:42:52ID:gvPTpodw
ム板Perlスレより 1 of 2

[プログラミング自体の経験が無い奴はまずココを読め]
Perlプログラミング講座: ttp://www.site-cooler.com/kwl/perl/

[本]
リャマ: ttp://www.oreilly.co.jp/books/4873111269/
駱駝: ttp://www.oreilly.co.jp/books/4873110963/
Effective Perl: ttp://www.ascii.co.jp/books/detail/4-7561/4-7561-3057-7.html
クックブック: 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/~rgarcia/perl-5.10.0/
perl5.8.xのドキュメント(一部): ttp://www.kt.rim.or.jp/~kbk/perl-5.8/
perl5.005_03 のドキュメント: ttp://www.kt.rim.or.jp/~kbk/perl5.005/
日本語ドキュメント検索: ttp://www.cpan.jp/search.cgi
perldoc きまぐれ訳: ttp://fleur.hio.jp/perldoc/
perldoc.jp: ttp://www.perldoc.jp/
Perldoc.perl.org: ttp://perldoc.perl.org/
0003nobodyさん2009/02/16(月) 11:44:03ID:gvPTpodw
ム板Perlスレより 2 of 2

[モジュール]
CPAN: 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

[Perl5.8Unicodeメモ]
ttp://www.namazu.org/~tsuchiya/perl/perl-5.8.html
ttp://www.lr.pi.titech.ac.jp/~abekawa/perl/perl_unicode.html
0004nobodyさん2009/02/16(月) 20:24:32ID:???
前スレ999です。
嘘つきました、すいません。
0005nobodyさん2009/02/16(月) 20:27:50ID:???
いちおつ
0006nobodyさん2009/02/17(火) 00:20:41ID:???
単なるリストですが
0007nobodyさん2009/02/17(火) 03:27:54ID:???
>>前スレの御仁
Web::Scraperとかどうよ
0008nobodyさん2009/02/17(火) 04:11:20ID:???
title とるだけのために Web::Scraper とか大げさすぎだろ
0009nobodyさん2009/02/17(火) 11:38:27ID:???
試しにいかのコードをやってみれば分かります通り


my @list = qw/a b c d e f g/;

my $test1 = @list;
my ($test2) = @list;

print "test1 = $test1\n";
print "test2 = $test2\n";

() が無いと配列の数を受け取り、() があると配列の最初の要素を得てますよね?
それと同じ考えで、正規表現のなかに () があってマッチした場合、配列が返るんで、そういった動作になります。







たぶん。 そうだと思うw
0010nobodyさん2009/02/17(火) 11:44:43ID:???
スカラコンテキストとリストコンテキストは、きちんと理解していないと罠に嵌る。
たとえば、m//のgオプションは、コンテキストで挙動が変わるとか。
0011nobodyさん2009/02/17(火) 15:15:34ID:???
perl でちょっと大きめなファイルを扱うコンソールアプリを作ろうとしています。
処理中に進捗を表示しようとしてるのですが、普通に何パーセント終わったというのを出すと

1% finished.
2% finished.
 ・
 ・
 ・
100% finished.

と延々と100行も続きます。
DOS にはエスケープシーケンスというのがあり、カーソルの移動とかが出来て同じ場所に違うテキストを上書き表示をすることが出来ます。
しかし perl からエスケープシーケンスを出力しても文字化けで終わってしまいます。
ANSI.SYS を組み込めばエスケープシーケンスは有効ですが、出来る限り古い環境 (ANSI を組み込むという事は COMMAND.COM を使うことになりレガシーな環境になります)
を使わないで済むような方法はありますでしょうか?
0012nobodyさん2009/02/17(火) 15:40:15ID:???
今Windows rubyしかなくて試せないんだけど、"\r"を出力してもだめ?
0013nobodyさん2009/02/17(火) 15:41:52ID:???
print '1% finished.';
print "\r";
print '2% finished.';
以下略 ってことね。
0014nobodyさん2009/02/17(火) 15:45:27ID:???
こんな感じの表示にしたらいいのでは
....5....10....15....20....25....30....35...
0015nobodyさん2009/02/17(火) 15:52:37ID:???
Smart::Commentsのプログレスバーは?
http://search.cpan.org/~dconway/Smart-Comments-v1.0.3/lib/Smart/Comments.pm
0016nobodyさん2009/02/17(火) 15:56:11ID:???
>>13
キャリッジリターンの存在をすっかり忘れてましたw
希望通りの動作ができました
感謝です

>>14
一旦そのやりかたも考えましたが、一度考えた表示の仕方から逃げるみたいでなんかイヤだったんですよね^^;



ありがとうございました m(_ _)m
0017nobodyさん2009/02/17(火) 22:06:02ID:???
文字化けになった「エスケープシーケンス」って何?
0018nobodyさん2009/02/17(火) 22:25:23ID:???
>>17
ttp://www.mars.dti.ne.jp/~torao/program/appendix/esc.html
0019nobodyさん2009/02/18(水) 16:50:38ID:???
配列の要素を吐き出す際に、3の倍数の時に改行を入れようと
if($in/3 = 整数型)
上記のような事を考えていましたがperlでは整数型等の指定が出来ないみたいです。
何か方法がございましたら教えて頂けないでしょうか。よろしくお願いします。
0020nobodyさん2009/02/18(水) 16:55:58ID:???
>>19
if ($in % 3 == 0)
0021nobodyさん2009/02/18(水) 17:17:10ID:???
>>20
ありがとうございました。
条件式に余剰が使えるという発想がありませんでした。
もっと色々考えないといけませんね。
0022nobodyさん2009/02/18(水) 17:28:53ID:???
print "\n" if !($in % 3);
0023nobodyさん2009/02/18(水) 19:30:14ID:???
>>22
unlessの事もたまには…
0024nobodyさん2009/02/18(水) 19:34:19ID:???
そういや、そんな子も居ましたね・・・
0025nobodyさん2009/02/19(木) 02:34:53ID:???
unless ($hoge or $huga) とか unless ($hoge and $huga) とか、ぱっと見で意味が分からん
考えてもわからんけどな
0026nobodyさん2009/02/19(木) 02:40:24ID:???
周辺にコメントで
# if (!($hoge or $huga))
とか
# if (!($hoge and $huga))
って書いておけばいいんじゃねw
0027 ◆TWARamEjuA 2009/02/19(木) 07:16:44ID:???
(´-`).。oO(偶にはuntilのことも思い出してあげてください。。。)
0028nobodyさん2009/02/19(木) 13:22:08ID:X+sdAMms
配列に配列を入れるのはどうすればいいのですか?

単純に
@a = @b;
でいいのですか?
0029nobodyさん2009/02/19(木) 14:35:52ID:X+sdAMms

書き込むファイル名を変数で変えたいのですが美味く動きません、下記のどこに問題がありますか?

$data = "data.txt";

open(OUT, "> $data");
print(OUT "$s[0]",",","$s[1]");
close(OUT);

0030nobodyさん2009/02/19(木) 14:41:29ID:???
>>28
OK だけど、a とか b だけの変数名はオススメしない

>>29
こういうデータを希望してるのに、こんなデータになってしまう
ぐらいの言葉書けないの?
バカなの?
死ぬの?
0031nobodyさん2009/02/19(木) 14:45:02ID:???
open(OUT, "> data.txt");
print(OUT "$s[0]",",","$s[1]");
close(OUT);

こうなるのを期待しているのですが

open(OUT, "> ");
print(OUT "$s[0]",",","$s[1]");
close(OUT);

こうなるようです。専門用語はわかりません、すみません。
0032nobodyさん2009/02/19(木) 15:09:48ID:???
特におかしいようにも見えないがそれ本当に動かしてるソースじゃ
ないだろ?

コピペして@sに適当な値を入れてためしに実行したけどちゃんと
data.txtになんか書かれたよ。

とりあえず一般論として:

openにはエラートラップ必須。ちゃんと書くのが
面倒でもせめて or die $! をつける

いまどき2引数openは流行らない。3引数で書こう。
0033nobodyさん2009/02/19(木) 16:28:12ID:???
strictの勉強してるんだけど、外部から読み込んだハッシュのコピーする時に
our宣言が必要な場合は、

my %hoge = our %moge;

って感じで書くとエラーでないけどこういう書き方は問題ない?

our %moge;
my %hoge = %moge;

って書くべき?
0034292009/02/19(木) 16:28:52ID:???
単純に変数のつづりを間違っていただけでしたありがとう御座いました
0035nobodyさん2009/02/19(木) 16:53:49ID:???
>>33
どちらでも言語的には正しいが、俺は見易さから後者にするね。
わざわざourとか使うぐらいだからそれなりに大きいプログラム
なんだろうし。
0036nobodyさん2009/02/19(木) 17:36:11ID:???
あれ、perldocにmy/ourが何を返すか書いてないことないか。
0037nobodyさん2009/02/19(木) 19:03:07ID:???
Win32::Soundの使い方について質問です。
wavファイルを繰返して再生したいのですが

#! perl
use Win32::Sound;
$file = "sound.wav";
Win32::Sound::Play( $file, SND_ASYNC, SND_LOOP);

と書きましたが、音が出ず終了してしまいました。
意図する動作をさせるための書き方を教えてください。
0038nobodyさん2009/02/19(木) 20:24:56ID:???
ourで宣言した変数を、初期化しないで、すぐにmyで宣言した変数に代入するって、そういうのが必要なケースってある?
0039nobodyさん2009/02/19(木) 20:45:17ID:???
同じ事考えたのか、あるいは似たような事かはわからないが、
requireでhashだけ書き込んであるスクリプトを読み込んで、
そのhashを使おうとした時にourで宣言しないと駄目だった気がする。

いちいちデータを整形するのが面倒だから、
hashをそのまま読み込めるようにスクリプトとして直接出力して使った俺も俺だがw
サブルーチンの形で出力してrequireすれば戻り値使えてour使わず済むんじゃない?
そこまでいくと色々な意味で違う気がするがw
■ このスレッドは過去ログ倉庫に格納されています