くだすれPerl(超初心者用)3
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
2009/03/31(火) 22:20:27ID:???もしくは質問者自身何が何だが分からない質問を勇気を持って書き込むスレッドです。
Perl使いが優しくコメントを返しますが、
お礼はPerlの布教と初心者の救済をお願いします。
前スレ
くだすれPerl(超初心者用)2
http://pc11.2ch.net/test/read.cgi/php/1204488452/
関連スレ
Perlについての質問箱 39箱目
http://pc12.2ch.net/test/read.cgi/tech/1234181856/
Perlコーディング初心者質問スレ Part 59
http://pc11.2ch.net/test/read.cgi/php/1234752149/
【Perl上級者コーナーPart01】
http://pc11.2ch.net/test/read.cgi/php/1024741312/
0002nobodyさん
2009/03/31(火) 22:23:20ID:???時代はPHPですよ
化石ども必死だな
0003nobodyさん
2009/04/02(木) 16:40:02ID:8XnYHneDと言っておこう
0004nobodyさん
2009/04/02(木) 16:46:23ID:???コメントを送信したら自動的にhtmlに上書きされてページがリロードされるような
プログラムはどのように書けば良いですか?
考え方を教えていただければ自分で勉強しながら作ってみようと思いますので
どうかよろしくお願いします。
0005nobodyさん
2009/04/02(木) 18:30:57ID:???中に「#####REPLACE_HERE#####」みたくユニークな文字列を生めておく。
そこをコメントで置換してindex.htmlに上書きする。
0006nobodyさん
2009/04/02(木) 22:09:04ID:???最近オブジェクト指向を勉強しているのですが、なかなか理解できません。
たとえばタブ区切りテキストの外部ファイルを読み込んで
それぞれのデータを車というオブジェクトにして処理をしたい場合、
use Car;
sub new {
my $class = shift;
....
}
とコンストラクタを作って、テキストから読み込んだデータを引数とした
オブジェクトを作っていくことになると思うのですが、
すべてのデータに対してオブジェクトを作成するには
my @cars;
while (@lines) {
my ($name, $price, ....) = split /¥t/;
my $obj = new Car $name, $price, ...;
push @cars, $obj;
}
といった処理を行うことになるのでしょうか。
解説サイトなどを読むと、なんだか違うような気もするのですが
こういう具体的な使い方に関する記載のあるサイトが見つかりません。
この理解で正しいかどうか、正しくないならどういった用法が正しいのか
ご教示いただければ有り難いです。よろしくお願いします。
0007nobodyさん
2009/04/02(木) 23:03:49ID:qrjZG7kJそりゃ「オブジェクト指向側(モジュールね)」のコーディング次第だろ。
呼び出し側は、オブジェクト指向側の説明を読んでその指示通りに
コーディングするしかない。
あなたが使いたいモジュールがあるならその説明を読めば良いし、
オブジェクト指向側のコーディングをしたいなら、どうするか明確に決めて
作成すれば良い。
具体的には、その例で、package Car (だよね)がセル単位で処理する
(=行毎)なら、呼び出し元でも、行単位でオブジェクトを作成して、
行単位で処理せざるを得ない。
0008nobodyさん
2009/04/02(木) 23:05:00ID:???0009nobodyさん
2009/04/03(金) 02:33:22ID:???まずコンストラクタにはハッシュにして渡すのが一般的だと思う
ブレスするときどーせハッシュにするんだから、渡すときもハッシュのがメモリ的にも都合がいいんじゃないかな
00106
2009/04/03(金) 03:50:19ID:???何をやりたいのか書いてませんでしたね、ごめんなさい。
やりたいのは車のデータを各パラメータごとに比較したり
条件に合うものを抽出したりしつつ、
データに変更を加えて保存し直したりといった作業なんです。
なので、読み込んだデータを元に
その分だけのオブジェクトを生成する必要があるのかなと考えました。
既存モジュールの使用は今のところ考えていません。
>>9
確かに、ハッシュにして受け渡すのが一般的ですね。失念していました。
サンプルのコードもぐだぐだです…申し訳ないorz
0012nobodyさん
2009/04/04(土) 05:04:43ID:???sqlとの連携は考えてないと
じゃあインスタンス変数には車一台一台よりも車のデータ全部と条件を入れるようにした方がいいかも
{
cars => [{一台目のデータ色々}, {二台のデータ色々},…],
condition => {limit => 120, offset => 60…},
}
こんな感じのハッシュ作ってbless
空のハッシュをblessしてから色々付け足してもいい
条件は変更可能なようにセッターを作っておく
読み出し先が決まってるならnew内でハッシュの形に変換してやるだけでいいから引数には条件以外渡す必要はない
こうしてやると比較メソッドも抽出メソッドも車オブジェクトを2つ作って〜ってやるより簡単に実装できると思う
ここではカタログを作る方が絶対に正しい
知らんけどな
0013nobodyさん
2009/04/04(土) 12:46:52ID:WDYa0L/pとりあえず本に書いてあるとおりに打ち込んでるんですが、
require 'cgi-lib.pl';
と言う文に関してですが、「cgi-lib.pl」というファイルは普通パールをインストールしたときに入っているものなのでしょうか?
どこを探しても見つからないのですが。
パールは5.8.8を使ってます。
0014nobodyさん
2009/04/04(土) 13:07:00ID:???0015nobodyさん
2009/04/04(土) 13:08:15ID:WDYa0L/pそうなんですか;
すみませんでした。
検索してきます。
0016nobodyさん
2009/04/13(月) 12:18:35ID:HKNZkh73$hoge = ($hoge1, $hoge2)[$hoge3];
という記述が出てきたのですが、よく意味がわかりません。
$hogeにはどういう値が入るのでしょうか。
よろしくお願いします。
0017nobodyさん
2009/04/13(月) 12:26:48ID:???0018nobodyさん
2009/04/13(月) 19:01:36ID:???print $list[0];
これは分かるよな?
my ($foo, $bar) = ('hoge', 'huga');
print $foo;
これも分かるよな?
my $baz = ('hoge', 'huga')[0];
print $baz;
じゃぁ、これも分かるよな?
0019nobodyさん
2009/04/13(月) 22:37:57ID:4dLnuytPこれを全部開いてその内容を一つのデータにまとめたいです。
yahoo知恵袋を参考にしたところ、コマンドプロンプト上で表記する場合は
while(<*.data>)
{
## $_には、*.DATAなファイル名が格納されている。
open(F,"$_"); ##openする。
while(<F>)
{
##読み出された内容が$_に格納されている。
print $_; ##出力してみる。
}
}
でよい、とされていました。なのでmatome.txtというファイルに展開するとして
open(F1,">matome.txt")
while(<*.txt>)
{
open(F2,"$_");
while(<F2>)
{
print F1 $_;
}
}
としたところ延々と一部を除いたデータだけの書き込みを行ってしまいました。
まず、なぜこの書式では無限ループになるのかがわかりません。
また、なぜファイル内のデータで*.txt形式に当てはまっているものの一部が
省かれてしまったかがわかりません。
長くなってしまい申し訳ありませんがどなたか教えてください。
よろしくお願いします。
0020nobodyさん
2009/04/13(月) 23:59:17ID:???0021nobodyさん
2009/04/14(火) 02:04:04ID:rIst05p+19ですが
ありがとうございました
やっとわかりました
この場合はmatome.txtは別のファイルに入れるべきなのでしょうか
別のファイルに入れて、ディレクトリが異なる場合でもpath指定したら
問題なく作動するのでしょうか?
何度か別ファイルにあるtxtデータに書き込むと失敗するのですが、
pathに日本語があるとだめなのでしょうか?
ちなみにwindows XPを使用しています。
■ このスレッドは過去ログ倉庫に格納されています