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

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

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん2005/09/18(日) 02:23:25
"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
● 2005/03/17現在の最新版: 5.8.7
● 2005/03/17現在の開発版: 5.9.2

リンク集は>>2-3
過去スレは>>4-5
0002デフォルトの名無しさん2005/09/18(日) 02:25:15
[プログラミング自体の経験が無い奴はまずココを読め]
Perlプログラミング講座: http://www.site-cooler.com/kwl/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/

[オンラインマニュアル] (追加)
最新のドキュメント: http://search.cpan.org/~nwclark/perl-5.8.7/
perl5.8.xのドキュメント(一部): http://www.kt.rim.or.jp/~kbk/perl-5.8/
perl5.005_03 のドキュメント: http://www.kt.rim.or.jp/~kbk/perl5.005/
日本語ドキュメント検索: http://search.cpan.jp/
perldoc.jp: http://www.perldoc.jp/
Perldoc.com: http://www.perldoc.com/
0003デフォルトの名無しさん2005/09/18(日) 02:26:44
[モジュール]
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

[Perl5.8Unicodeメモ]
http://www.pure.ne.jp/~learner/program/Perl_unicode.html
http://www.namazu.org/~tsuchiya/perl/perl-5.8.html
http://www.lr.pi.titech.ac.jp/~abekawa/perl/perl_unicode.html
0004デフォルトの名無しさん2005/09/18(日) 02:29:01
[過去ログ]
1 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/
0005デフォルトの名無しさん2005/09/18(日) 02:29:59
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/
15 http://pc5.2ch.net/test/read.cgi/tech/1105953092/
16 http://pc8.2ch.net/test/read.cgi/tech/1111034732/
17 http://pc8.2ch.net/test/read.cgi/tech/1117870308/
18 http://pc8.2ch.net/test/read.cgi/tech/1121804136/
0006デフォルトの名無しさん2005/09/18(日) 02:38:09
初心者的な質問でスマソ。
$a=10;
$b=3;
$c=$a/$b;
これで答えを出すと少数が大量につくのだが、小数点以下の数字の数を指定するにはどうしたらいいんだ?
$c=3.33;
とか。intと何かを使う?
0007デフォルトの名無しさん2005/09/18(日) 02:42:17
>1乙
スレタイ間違ってるけどな

>6
printf '%.2f', 10/3;
変数に入れるならsprintfで。
0008デフォルトの名無しさん2005/09/18(日) 02:44:47
>>1
乙。
次スレ20にすれば無問題。
0009デフォルトの名無しさん2005/09/18(日) 03:09:00
>>7
サンクス
001012005/09/18(日) 03:11:33
はっ!
数字消して18入れ直したらしい。
前スレのテンプレをメモ帳にコピーして編集してたから・・・
0011デフォルトの名無しさん2005/09/18(日) 04:52:23
template-toolkit + mod_perl環境にてサードパーティ製のpluginを
使用すると「plugin error - [plugin名]: plugin not found」
が発生してしまいます。Commaプラグインを例にすると
初回プロセス作成時に[% USE Comma %]しているテンプレートを読み込んだ場合は
そのプロセスはその後もCommaプラグインをロードした状態を保持し続けるのですが
初回プロセス作成時に[% USE Comma %]を書いていないテンプレートを読み込んだ場合に
上記エラーが発生するようです。
エラー発生後、再度そのプロセスにアクセスするとCommaプラグインがロードされている状態になり
エラーは発生しなくなるのですが他のプラグインを読むと何故か前に読んだプラグインがアンロードされます。
どなたか同様の症状に遭遇された方はいませんでしょうか。

-環境-
fedora1
template-toolkit-2.14
httpd-2.0.51
mod_perl-1.99
perl-5.8.3
Apache::Reload使用
0012デフォルトの名無しさん2005/09/18(日) 11:00:59
根本的な質問ですいません。CGI:sessionの使い方が(導入方法も?)まったくわからないのですが、
何か良いページや本をご存知の方いますか?
どうやって使うんですか?と聞いて簡単に答えれるものでもないですよね?
0013デフォルトの名無しさん2005/09/18(日) 11:07:47
>>12
http://search.cpan.org/~sherzodr/CGI-Session-4.02/lib/CGI/Session.pm
0014122005/09/18(日) 11:31:05
サーバによってCGI::sessionがインストールされていないこいうことは多いでしょうか?
たとえば、あるプログラムを作りそれをいろいろ使いまわす時に、サーバによってCGI::sessionが
無かったら困るのですが、どうなのでしょうか?

また、入っていなかった場合はcgiと一緒にCGI/sessionフォルダもアップをし、自分の領域からCGI::sessionを
読み込むとかは許されるのでしょうか?

>>13
ありがとうございます。がんばって読んでみます。英語苦手ですが…
0015デフォルトの名無しさん2005/09/18(日) 13:23:24
日本語もあるでよ
ttp://perldoc.jp/docs/modules/CGI-Session-3.11/
0016デフォルトの名無しさん2005/09/18(日) 13:26:37
>>11
キャッシュとか使ってたりする?
0017デフォルトの名無しさん2005/09/18(日) 13:54:35
フヒヒヒヒ!すみません!
0018デフォルトの名無しさん2005/09/18(日) 14:49:52
>>15
古いけどな
001912005/09/18(日) 15:22:50
>>14
/libディレクトリを作り、そこにCGI::sessionをインストール
利用するスクリプトで
use lib '/lib';
use CGI::session;
0020 ◆TWARamEjuA 2005/09/18(日) 15:46:47
>>19
TOPに入れるのか。。。
djb並みだよなぁ♪
0021デフォルトの名無しさん2005/09/18(日) 16:02:41
>>14

CGI::Session - CGIアプリケーションにおける持続的なデータのセッション
http://perldoc.jp/docs/modules/CGI-Session-3.11/Session.pod

Tutorial - CGI::Sessionのさらに広範囲に渡って記述されたマニュアル
http://perldoc.jp/docs/modules/CGI-Session-3.11/Tutorial.pod

ご参考まで。

> また、入っていなかった場合はcgiと一緒にCGI/sessionフォルダもアップをし、
> 自分の領域からCGI::sessionを読み込むとかは許されるのでしょうか?

許すか許さないかは、そりゃ、プロバイダの考え方次第。でも、自作CGIの
使用を許しているプロバイダなら、禁止する理由はないと思うな。

やったことないから安請け合いはできないけど、たぶん自分のディレクトリに
置いても動くと思う。
0022212005/09/18(日) 16:08:48
あ、既出だったか。失敬。
0023112005/09/19(月) 00:11:54
>>16
TTのキャッシュでしょうか?もしそうでしたら使用しています。
デバッグの過程でキャッシュを使用しないで検証もしてみたのですが
同様の症状が発生しました。
ちなみにCommaとTruncateJpプラグインを使用して実験すると
CommaがロードされてるとTruncateJpがエラー
TruncateJpがロードされてるとCommaがエラー
という感じです。
発生状況がやや一定ではないので四苦八苦してます
0024デフォルトの名無しさん2005/09/19(月) 01:28:48
>>23
ううむ。再現できないとなんとも。
確実に解決する方法としてはstartup.plでTTのプラグインをロードするってのがあるんだけど。
そのほうが効率もいいし。それじゃ駄目?
0025112005/09/19(月) 02:01:12
>>23 さん
それで問題ないのですが
mod_perl、perl/CGIどちらでも動くように組んでいるので
動的にロードしてくれる方が美しいかなと思いまして。
今日もハマってみて何か分かったら報告致します。
0026デフォルトの名無しさん2005/09/19(月) 02:06:13
>>25
あ、いや、
テンプレート内でUSEしておいて、
かつstartup.plに書いておけばいいっしょ。
0027112005/09/19(月) 13:16:58
あ、勘違いしてました。
今までスクリプト中でuse Template::Plugin::Comma;
ってして逃げてたので勝手に読み違えていましたorz
0028デフォルトの名無しさん2005/09/20(火) 00:24:08
データベースとperlでデータをCSVに書き出すプログラムを書いています。

SQLで取得したデータをHTMLでテーブルにして表示しているのですが、
よくフリーメールであるような各行にチェックボックスがあって、
それにチェックを入れたデータだけCSVに書き出すといったものを作りたいのですが、
ロジック的にはどういったものになるのでしょうか??チェックボックスでCGIに渡せるパラメータは
○○=on とかってなりますよね。どうやって、データを識別したらよいでしょうか???
0029デフォルトの名無しさん2005/09/20(火) 00:50:13
>>28
CGIの作り方なら、WebProg板かWeb制作板で聞いたほうがいいんじゃない?
Perlと無関係とは言わないけど、ブラウザからCGIのプログラムに送りつけられたものを
どう受け取るかというのは、CGI全般の基礎知識だしPerl以外に知っておくべきことが
先にありそうな気がする。
0030デフォルトの名無しさん2005/09/20(火) 11:56:37
>>28
マルチ
0031デフォルトの名無しさん2005/09/20(火) 12:01:19
>>30
書き込み時刻から想像するけど、>>28は、ここで言われて、WebProg板に
移動したんじゃないの? いちおう初心者スレなんで、あんまりカリカリ
しないでのんびりやりましょうや。
0032デフォルトの名無しさん2005/09/20(火) 15:59:18
質問させてください
perlでHTMLをテキストにパースする場合
HTML::FormatTextあたりって使わないのでしょうか?

手製でタグ削除より
1.lynxでダンプさせる
2.またはperlのテキストフォーマッタとして
HTML::FormatTextあたりが出ていました

自分も似た感じになってるのですが
ttp://homepage3.nifty.com/h_sasaki/contents/ap6xx.html

それともテキストフォーマッタ相当の機能として統合されたのかな?

PPMのアーカイブ自体
ビルド800〜にはHTML::Format〜がみあたらない
...ので600〜から落として試したら

PPMでインストールできません。
ローカルのパッケージからインストールするには
なにか特別な設定がいるのでしょうか?
ActivePerl v5.8.6 built 811ですがreadmeどうり

cdでppm install html-format.ppd
するとsearchでネットワークを探しにいき
ないといいます。800〜のパッケージにはないのですが
ローカルから入れられないのでしょうか?

lynxでダンプさせていますがperlのテキストフォーマッタ
を使えないかなと思ったのですが
パッケージがはいらないので代わりに試せないorz...
0033デフォルトの名無しさん2005/09/20(火) 16:47:36
カルシウムパ〜ラ〜
0034ヽ(´ー`)ノ ◆.ogCuANUcE 2005/09/20(火) 17:13:26
>>32
HTML::FormatText に
> Formatting of HTML tables and forms is not implemented.
とあるが、それでもいいならイイんじゃね。

> 手製でタグ削除より
単純にタグを削除したいだけなら、HTML::Strip とかはどうよ。
0035デフォルトの名無しさん2005/09/20(火) 17:38:23
print 出力を変数内へ出力変更することはできないでしょうか?

・Sample

my $res="";

select( $res ); #できないけど、こんなイメージ
print "↑\n";
print "攻撃力2000\n";
select(STDOUT);
print "(^_^) " x 3 ,"\n";
print $res;

−出力結果−
(^_^) (^_^) (^_^)
↑
攻撃力2000
0036デフォルトの名無しさん2005/09/20(火) 17:47:47
無難に$value = sprintf();でいい気もするけど。
少なくとも、その構文では変数に入れる意味が全くない。
0037デフォルトの名無しさん2005/09/20(火) 18:37:16
>>35
少し高度になるけど、
パイプを使えばできるよ。

でも、特に理由がないなら sprintf か、
push あたりでいいのでは。

push の例:

my @res;

push @res, "↑\n";
push @res, "攻撃力2000\n";

print "(^_^) " x 3 ,"\n";
print @res;

−出力結果−
(^_^) (^_^) (^_^)
↑
攻撃力2000
0038デフォルトの名無しさん2005/09/20(火) 19:10:39
>>36-37
回答有り難う御座います。
Sampleが良くなかったですね。 目的は、同じ構文で出力先を
アクティブに変更したいと考えています。 sampleをもうちょいマジメに(汗)書き直すと、

-Sample-
my $res="";
if( $mode=0 ){  #標準出力
  select(STDOUT);
}elsif( $mode=1 ){ # File出力
  open(FILE,">> access.log");
  select(FILE);
}elsif( $mode=2 ){ # 変数出力
  select( $res ); #できないけど、こんなイメージ
}

&logline;

select(STDOUT); # 出力先を元に戻す
if( $mode=1 ){ close(FILE); # File出力
}elsif( $mode=2 ){ $res をゴニョゴニョ文字列処理して転用 }
exit;

sub logline{
 print "xx年xx月xx日 xx時xx分アクセス";
}
0039322005/09/20(火) 19:22:34
>>34
ありが�d
一発で入りました。
色々試してみます。
0040デフォルトの名無しさん2005/09/20(火) 19:26:30
IO::String
0041デフォルトの名無しさん2005/09/20(火) 19:27:39
>>37 さんの様に、全部配列に入れて好きに出力でもいいと思ってて、
C言語なら素直にその方法取りますが、Perlは結構いろいろ
できるみたいなので、こんなのもできるかなー と思いまして。

原始的な命令を繰り返すCに馴れてると、selectでprintの振る舞いが
変わるってのも結構な驚きで、perlって高級言語だなぁ と実感。
0042デフォルトの名無しさん2005/09/20(火) 19:35:31
>>41
> >>37 さんの様に、全部配列に入れて好きに出力でもいいと思ってて、
> C言語なら素直にその方法取りますが、Perlは結構いろいろ
> できるみたいなので、こんなのもできるかなー と思いまして。

技に溺れると、あとで後悔するよ。
0043デフォルトの名無しさん2005/09/20(火) 20:22:19
C++などでは
class hito{
public:
void atama(){ ・・・}
}
void hanasu(hito taro){
・・・
}
main(){
hito sakaki;
hanasu(sakaki);
}

このように関数間でインスタンスを渡すことができますが、perlではどのように
すればよいのでしょうか?

$test=hito->new();
hanasu($test);

これでは失敗しました…。
0044122005/09/20(火) 20:35:46
CGI::Sessionの件ですが、
CGI/Session.pmファイルも一緒にアップをして、
use CGI::session
で読み込んでくれました。
なんか、サーバ側で普通はインストール(?)をしなくてはい気がするのですが、できてしまいました。何でですかねf(^^;

とにかく、いろいろとありがとうございました。

0045デフォルトの名無しさん2005/09/20(火) 22:12:27
>>42
ストリームと同じ振る舞いをする文字列オブジェクトって
大抵の言語にあるじゃん。
>>35の難点といえば暗黙のグローバルな状態に依存してて
コードの局所性が低いことくらい。
0046デフォルトの名無しさん2005/09/20(火) 22:15:02
>>43
普通にできます。


失敗するコードを出さないとそのくらいしか言えない。
0047122005/09/21(水) 11:05:58
>>46
できました!!受け取り先をローカル変数にしていなかったために
できなかったみたいでした。
0048デフォルトの名無しさん2005/09/21(水) 18:22:44
リストの各要素を2つの文字列を交互に挟みながら凍結したいんですけど、どうすればいいでしょうか?
例えば(1,2,3,4,5,6)というリストがあったら、
1+2-3+4-5+6という感じに凍結したいのですが。
0049デフォルトの名無しさん2005/09/21(水) 18:38:04
凍結じゃなくて連結です。すみません。
0050デフォルトの名無しさん2005/09/21(水) 18:47:56
my @foo = (1..6);
print join("-", map { shift(@foo)."+".shift(@foo) } (0..$#foo/2));

巨大配列だと遅い。奇数の時場合分けする必要がある。
もっと簡単にできそうだけど思いつかん。
0051 ◆TWARamEjuA NGNG
my @foo = (1..60);
$Out_Strings = join '', map { sprintf qq|%s%s|, $_ == 0 ? '' : $foo[$_] % 2 ? '+' : '-' , $foo[$_] } (0 .. $#foo);
print $Out_Strings;

長ったらしい、、、
0052デフォルトの名無しさん2005/09/21(水) 19:13:23
私ならこんな感じで普通に書くかな。面白くないけど。

use strict;

sub njoin($\@) {
my($delims, $list) = @_;
my $r;
my $i = 0;

foreach (@$list) {
$r .= $_ . $delims->[$i];
$i = ($i + 1) % @$delims;
}

chop $r;

return $r;
}

my @l = (1, 2, 3, 4, 5, 6);
print njoin(['+', '-'], @l), "\n";
0053デフォルトの名無しさん2005/09/21(水) 19:49:07
ん?オレならこうするが

@foo = (1..60);
$bar = join '~', @foo;
$bar =~ s/~([^~]*)~/+$1-/g;
$bar =~ s/~/+/;
print $bar;
0054ヽ(´ー`)ノ ◆.ogCuANUcE 2005/09/21(水) 20:07:58
俺ならこうかな。

sub ejoin(&@)
{
my ($sep, $s, @n) = @_;

$s .= $sep->() . $_ foreach (@n);

return $s || '';
}

my $i = 0;
print ejoin(sub { print $i, "\n"; (++$i % 2) ? '+' : '-' }, 1 .. 6);
0055デフォルトの名無しさん2005/09/21(水) 20:17:48
my @foo = (1..60);
my $str;
my @sign = qw( + - );
$str .= $_ . $sign[ $_ % @sign ] foreach @foo;
print $str;

は?可読性と拡張性で勝負。
0056552005/09/21(水) 20:21:27
>>54
ケコーンとか言おうとしたら10分も遅れてるじゃん俺
0057デフォルトの名無しさん2005/09/21(水) 20:25:02
$str .= $_.('-', '+')[$_%2] for 1..100;
と書こうとしたらかぶってる上にchop入らねー
0058552005/09/21(水) 20:37:00
>>51
とりあえず無駄多すぎ

my @foo = (1..60);
print shift @foo;
print map { sprintf "%s%d", $_ % 2 ? '+' : '-' , $_ } @foo;
0059552005/09/21(水) 20:40:16
print map { $_ % 2 ? "+$_" : "-$_" } @foo;
ラス行もこれでいいと思われ。
2個の引数にsprintfは贅沢。
0060デフォルトの名無しさん2005/09/21(水) 20:41:43
短さで勝負。

my @foo = (1..60);

($_ = join "+",@foo) =~ s/(\d)\+(\d+)\+/$1+$2-/g;
print $_;
0061デフォルトの名無しさん2005/09/21(水) 20:44:19
あ、これで十分か。

($_ = join "+",@foo) =~ s/\+(\d+)\+/+$1-/g;
print $_;
0062552005/09/21(水) 21:07:04
>>60-61
>>53を読んでその程度に縮めることは出来るとは思ったが、
join後にg置換って、場合によっては重くならないか?

#俺達TIMTOWDIの真っ最中:-)
0063デフォルトの名無しさん2005/09/21(水) 21:19:06
ところでこの問題、与えられるリストは1..2Nだと仮定して
いいのかね?
0064デフォルトの名無しさん2005/09/21(水) 21:20:20
駄目に決まってんじゃん(^^)
0065デフォルトの名無しさん2005/09/21(水) 21:27:37
どうだろう。perlの内部関数だけで完結する分速そうだけど、
配列がデカくなると巨大文字列がメモリをバカ喰いして遅くなるかもね。
0066デフォルトの名無しさん2005/09/21(水) 21:30:47
任意の文字列のリストで通用するという条件にすると、
置換使った奴とか、その要素自体が偶数か奇数かで+-を
切り替えてる奴は使えなくなるよな。

たとえば @foo = qw(1 a -5 +5 xyz) みたいな。
0067デフォルトの名無しさん2005/09/21(水) 21:31:31
>>65
そういうときはベンチですよ
0068デフォルトの名無しさん2005/09/21(水) 21:45:01
>>62
TMTOWTDI ですよ。

@hoge = (1 .. 60);
$flag = !$flag and $_ .= '+' or $_ .= '-' for @hoge;
print substr(join('', @hoge), 0, -1);
0069682005/09/21(水) 21:47:00
真ん中こっちの方がイイかも

$_ .= $flag = !$flag ? '+' : '-' for @hoge;
0070682005/09/21(水) 21:47:55
カッコつけ忘れた
0071デフォルトの名無しさん2005/09/21(水) 22:09:29
いかにもPerlらしい、究極のリソース浪費術

@foo = (1..60);
@sep = qw[+ -];
$bar = join '$sep[$count++%@sep]', @foo;
eval qq[print "$bar"];
0072デフォルトの名無しさん2005/09/21(水) 22:33:36
$str .= $_.('-', '+')[$_%2] for 1..100;
chop $str;

これでよくないか
0073デフォルトの名無しさん2005/09/21(水) 22:53:06
>>63-64
0074デフォルトの名無しさん2005/09/21(水) 23:34:00
配列に0追加で 2Nを満たせばいんでないの
0075デフォルトの名無しさん2005/09/22(木) 00:06:16
realloc そんなに気になるかなぁ。
配列でかくて、セパレータ長ければ分かるけど。
1..60で、reallocは10回も無いのでは。
0076デフォルトの名無しさん2005/09/22(木) 00:44:19
すいません、どなたか教えてください。
以下の感じでソケットでwebページ情報とってきてるんですけど、
もし、取得に失敗してタイムアウトした際に
もう一度とってくるのってどうやって書けばいいのでしょうか?

どうぞお願いしまする


$client_socket = new IO::Socket::INET (
PeerAddr => $host,
PeerPort => 'http',
Proto => 'tcp',
TimeOut => '1'
);
unless ($client_socket){
print "Socket Error:$!\n";
}

0077デフォルトの名無しさん2005/09/22(木) 01:19:23
「取得に失敗してタイムアウトした際に」の意味がわからん
0078デフォルトの名無しさん2005/09/22(木) 01:21:05
>>76
do {
 ...
} while ($@ =~ m/Timeout/i);
0079デフォルトの名無しさん2005/09/22(木) 04:47:32
WEBページで日本語とマッチングさせて情報取りたいんですけど、
Perlってプログラム中にそのまんま漢字とか平仮名とか入れて平気でつか?
多分無理だと思うんでつけど、そういう場合ってどうすればいいでつか?
0080デフォルトの名無しさん2005/09/22(木) 04:52:01
>>79
平気でつ
0081デフォルトの名無しさん2005/09/22(木) 05:06:31
>>80
ありがとうございまつ
0082デフォルトの名無しさん2005/09/22(木) 05:43:29
どういたつまつて
0083デフォルトの名無しさん2005/09/22(木) 13:57:48
$list=[\%data1,\%data2,...]
としてデータ構造を作成した場合に
$listが指している要素数を知るにはどうしたらいいんでしょうか

0084デフォルトの名無しさん2005/09/22(木) 14:06:39
scalar @{$list};
じゃだめ?
0085832005/09/22(木) 14:33:18
>>84
できました!ありがとうございます
0086デフォルトの名無しさん2005/09/22(木) 23:05:59
または
$#$list + 1
0087デフォルトの名無しさん2005/09/22(木) 23:15:58
プオーン
0088デフォルトの名無しさん2005/09/22(木) 23:25:40
Perlのオブジェクトって、クラスチェンジできるよね。
これ使って何か面白いことできないかなぁ。前々から思ってるんだけど。

package Foo;
sub new { bless, {}, Foo; }
sub foo { print "foo\n"; }

pacakge Bar;
sub bar { print "bar\n"; }

package main;
my $obj = new Foo(); # Fooインスタンス作成
$obj->foo(); # --> "foo" と表示
bless $obj, Bar; # Barにクラスチェンジ
$obj->bar(); # --> "bar" と表示
$obj->foo(); # --> エラー : Can't locate object method "foo"...
0089デフォルトの名無しさん2005/09/22(木) 23:49:27
>>88
Smalltalkをインストールして
become: の senders を検索しる。
0090デフォルトの名無しさん2005/09/23(金) 00:55:55
>>88
おもしろいこと=newとdeleteの整合性がとれなくなってアボン
0091デフォルトの名無しさん2005/09/23(金) 14:54:55
FTPにて、指定フォルダ以下のファイルorフォルダを全てダウンロードするってどうやったらできます?
Net::FTPでできるの?
教えてください。
0092デフォルトの名無しさん2005/09/23(金) 20:29:23
画像掲示板でこんなのやりたいのです
お願いします

やりたいこと
・アップロードされた画像ファイルを縮小保存したい
条件とか
・画像は汚くてもかまいません
・jpg限定でかまいません
・鯖管じゃないのでimagemagicとかGDとかはナシで
0093デフォルトの名無しさん2005/09/23(金) 20:50:11
何がよろしくお願いしますなのか分からない
0094デフォルトの名無しさん2005/09/23(金) 21:40:04
仲間へのメールを間違えてここに書いちゃったんだよ きっと
0095882005/09/23(金) 21:45:51
>>89
なるほどSmalltalkですか。いかにもありそう。
後で調べて見ます。
0096デフォルトの名無しさん2005/09/24(土) 01:56:04
>>92
>>1
0097デフォルトの名無しさん2005/09/24(土) 03:14:32
何でstdio使う関数とstdio使わない関数を一緒に使っちゃ駄目なの?
0098デフォルトの名無しさん2005/09/24(土) 07:50:42
>>97
スレ違い。
0099デフォルトの名無しさん2005/09/24(土) 10:47:01
技術評論社のCGI&Perlって本で勉強を始めたのですが、
  $in_file = "./smple_data.txt";
  open( IN_FILE, "$in_file" );
  $record = <IN_FILE>;
  print $record;
  close( IN_FILE );
  exit;
このプログラムの3行目がファイルから1行目を読み込んで
$$recordに格納し、オープンしたファイルから1レコードを読み込む。
とされているのですが、何故1レコード目だけが読み込まれるのか理解できません。
データが3レコードあり、2レコード目を出力する事は出来ないのでしょうか?

全くの初心者なのでやさしく教えてください。
0100デフォルトの名無しさん2005/09/24(土) 11:14:57
>>99
http://www.kt.rim.or.jp/%7Ekbk/perl5.005/perldata.html#Context
0101デフォルトの名無しさん2005/09/24(土) 11:30:47
>>100 よくわかりません。

現在80ページ付近を勉強してるのですが、先に進めない訳じゃないんです。
学習が進めばこの項目は出てくると思うのですが、現状でその考え方を知っておきたいんです。
■ このスレッドは過去ログ倉庫に格納されています