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

このエントリーをはてなブックマークに追加
1デフォルトの名無しさん
"The duct tape of the Internet" こと、Perlについての質問箱です。
"There's more than one way to do it" ということで、
Perlの奥深さについて皆で語り合い、追求してまいりましょう。

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

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

http://www.perl.org/get.html
● 2008/07/09 現在の最新版(安定版): 5.10.0
● 2008/07/09 現在の開発版: ------

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

リンク集は>>2-3
Perl 日本語処理の基礎の基礎 >>4
過去スレは>>5 あたり
2デフォルトの名無しさん:2008/07/09(水) 11:12:05
[プログラミング自体の経験が無い奴はまずココを読め]
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/books/detail/4-7561-3057-7.shtml (修正)
クックブック: 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/dist/perl/
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.jp: ttp://www.perldoc.jp/
perldoc.com: ttp://www.perldoc.com/
3デフォルトの名無しさん:2008/07/09(水) 11:13:06
4デフォルトの名無しさん:2008/07/09(水) 11:13:52
#  [Perl 日本語処理の基礎の基礎]
# このレスは、Windows の ActivePerl で日本語処理を行う場合のテンプレートです。
# このレスの内容をそのまま、UTF8 形式のソースファイルに保存して下さい。
# 入出力ともシフトJIS形式のファイルまたはDOS窓を想定しています。
# まず、以下の行を先頭に入れて下さい。
use utf8;
use open IO => ":encoding(cp932)";
binmode STDIN => ":encoding(cp932)";
binmode STDOUT => ":encoding(cp932)";
binmode STDERR => ":encoding(cp932)"; # ※1
use Encode;
# 次に、あなたが実行したい処理の内容を入れて下さい。
$file = 'C:/なんたら/かんたら.txt';
open my $fh, '<', encode("cp932", $file) or die $! ; # ※2
print <$fh>;
# 以上の内容は、日本語処理が解らない人でも、とりあえず日本語処理ができてしまう
# おまじないです。条件が異なる場合の対処方法は、ご自分で勉強して下さい。
# 【注】※1.の行を入れると、DOS窓への日本語出力は簡便になりますが、
# ソースファイル名に非ANSI文字が含まれる場合にdie 文の出力が失敗します。
# ※2.OSに渡す文字列(ファイル名,dosコマンドのオプションなど)は、
# この例のようにcp932でエンコードする必要があります。
5デフォルトの名無しさん:2008/07/09(水) 11:14:55
6デフォルトの名無しさん:2008/07/09(水) 11:15:45
7デフォルトの名無しさん:2008/07/09(水) 12:21:47
perl 死ね!
8デフォルトの名無しさん:2008/07/10(木) 00:22:31
死んじゃう死んじゃう〜





>>1
9デフォルトの名無しさん:2008/07/10(木) 02:12:07

  ☆ チン
        ☆ チン  〃  ∧_∧   / ̄ ̄ ̄ ̄ ̄ ̄ ̄
          ヽ ___\(\・∀・)<  perlboob まだ〜?
             \_/⊂ ⊂_)_ \_______
           / ̄ ̄ ̄ ̄ ̄ ̄ ̄/|
        |  ̄  ̄ ̄ ̄ ̄ ̄ ̄:| :|
        |           .|/
10デフォルトの名無しさん:2008/07/11(金) 03:24:39
頭無き心は邪なる魂なり
11デフォルトの名無しさん:2008/07/11(金) 11:31:07
普通の配列に連想配列を入れるときは
my %d = ( 'name'=>'ami', 'size'=>74 );
push @list, \%d;
という感じで詰めていけるけど、これを取り出すとき
一旦変数に入れたいんだけどどうしたらいい?

my %e = $list[0];
print $e{'size'};
とかやっても見れないみたい。
print $list[0]['size'];
などで見るのはできるのに。
12デフォルトの名無しさん:2008/07/11(金) 11:36:58
日本語でおk
13デフォルトの名無しさん:2008/07/11(金) 11:50:15
>>11
デリファレンスを勉強する

%e = %{$list[0]};
print $e{'size'};

または

$e = $list[0];
print $$e{'size'};
14デフォルトの名無しさん:2008/07/11(金) 11:50:41
my $e = $list[0];
print $e->{'size'};
15デフォルトの名無しさん:2008/07/11(金) 12:26:59
>>13
えーと・・・ $e = $list[0]; の時点では 実体のコピーは発生してない
ってことでおk?
16デフォルトの名無しさん:2008/07/11(金) 13:08:05
だから、リファレンスとデリファレンスの勉強してこいって。
1715:2008/07/11(金) 13:48:30
勉強した結果がこれだよ
18デフォルトの名無しさん:2008/07/11(金) 14:19:35
\%d←リファレンス←実体へのアドレス←コピーじゃない
1915:2008/07/11(金) 16:29:39
すみません、分からないのでガンダムで例えてください
20デフォルトの名無しさん:2008/07/11(金) 17:58:28
\%d←リガズィ←情けないモビルスーツ←νガンダムは伊達じゃない
21デフォルトの名無しさん:2008/07/11(金) 18:36:45
ガンダムもどきですね、わかります
22デフォルトの名無しさん:2008/07/11(金) 19:10:51
\%d←F91←口が開く←質量をもった残像だというのか?
23デフォルトの名無しさん:2008/07/12(土) 15:58:44
以下のようなコードを書いて perl -n to_sjis.pl < euc-jp.txt > shiftjis.txt しても
euc-jp.txt の最初の 1 行しか出力してくれませんでした
何故なんでしょうか?

-- to_sjis.pl --

#!/usr/bin/perl

use strict;
use warnings;
use Encode;
use Encode::Guess;

# Shift_JIS
if ( ref(guess_encoding($_, qw/shiftjis/)) )
{
print $_;
exit;
}

# EUC-JP
if ( ref(guess_encoding($_, qw/euc-jp/)) )
{
print encode("shiftjis", decode("euc-jp", $_));
exit;
}

# Others
die "error!";

-- to_sjis.pl --
24デフォルトの名無しさん:2008/07/12(土) 16:15:11
>>23
何故も何も-nの動作詳細とprintした直後に何してるのかを100万回見直せ。
25デフォルトの名無しさん:2008/07/12(土) 16:24:31
>>24
> printした直後に何してるのか

ああどうも
perl -n って全行に perl hoge.pl を適用するんじゃなく
while (<>) { 〜 } の 〜 に hoge.pl を埋め込むような動作なわけね
んで exit が効いちゃうわけね
2623:2008/07/12(土) 16:31:18
とりあえず EUC-JP の場合のみ Shift_JIS に変換するようにしてみた
当たり前かもしれないけど Encode::encode じゃ文字コードは変わっても改行コードは変わらんのね…

-- to_sjis.pl --

#!/usr/bin/perl

use strict;
use warnings;
use Encode;
use Encode::Guess;

if ( ref(guess_encoding($_, qw/euc-jp/)) )
{
$_ = encode("shiftjis", decode("euc-jp", $_));
}
27デフォルトの名無しさん:2008/07/13(日) 21:18:30
ActivePerlでImage::Magick使いたいんですけど助けてください。
ActivePerl5.10だとcore_rl_magick.dllがありません的なこと言われて、
ActivePerl5.8だとCan't locate Image/Magick.pm in @INC (@INC contains: C:/Perl/site/lib C:/Perl/lib.)って出ます。
ImageMagickはImageMagick-6.4.2-1-Q16-windows-dll.exeで入れました。

ActivePerl5.8とImageMagick6.3.4-7入れてる別のパソコンでは使えてるんですが
そのバージョンのImageMagickを入手できるところがない。
28デフォルトの名無しさん:2008/07/13(日) 22:16:33
つ PPM
2927:2008/07/13(日) 22:26:02
>>28
PPM見ても
Apache-ImageMagick
Image-Magick-Square
Image-Magick-Thumbnail-Fixed
しかなくて、目的のとは違うと思うんですよね。
30デフォルトの名無しさん:2008/07/13(日) 22:33:16
ppm rep add "BRIBES" "http://www.bribes.org/perl/ppm/package.lst"
ppm install Image-Magick
31デフォルトの名無しさん:2008/07/13(日) 23:28:15
>>30
できました!!!
聞いてよかった。ありがとうございましたー
32デフォルトの名無しさん:2008/07/13(日) 23:39:06
おれも感謝感謝

ImageMagickって古いversionはどこに置いてあるんだろうね。
33デフォルトの名無しさん:2008/07/14(月) 11:30:50
リモートホストの設定変更などをNet::SSH::Expectで、 自動化してやらせようとしています。 これってリモートホストからの反応の速さに関係なく、 必ず設定したタイムアウトの時間まで待ってしまうのですが、 そういう仕様なのでしょうか?
34デフォルトの名無しさん:2008/07/15(火) 02:28:34
tentakelとかつかっとけ
35デフォルトの名無しさん:2008/07/15(火) 23:04:37
my $hoge;

という変数があるとき
この変数が宣言されただけか、なにか値が入れられたかを
判定する方法ってありますか?
36デフォルトの名無しさん:2008/07/15(火) 23:16:26
>>35
defined $hoge
で、undef か否かを判定する事は出来るよ。
3735:2008/07/15(火) 23:32:58
>>36
ありがと。これで納期に間に合いそうです。
38デフォルトの名無しさん:2008/07/16(水) 01:37:47
>>37
いいってことよ
39デフォルトの名無しさん:2008/07/16(水) 03:41:10
print を使い何行もの文章を書く場合
毎行はじめにprintと書いているのですが、
これを書かずに1回のprint、或いはもう少し簡単に表記できる方法はありませんか?
40デフォルトの名無しさん:2008/07/16(水) 04:23:43
いいかげんにしてくれ
41デフォルトの名無しさん:2008/07/16(水) 04:36:04
print q{print を使い何行もの文章を書く場合
毎行はじめにprintと書いているのですが、
これを書かずに1回のprint、或いはもう少し簡単に表記できる方法はありませんか?};
42デフォルトの名無しさん:2008/07/16(水) 07:16:52
print << "MULTIPLE_LINES"
print を使い何行もの文章を書く場合
毎行はじめにprintと書いているのですが、
これを書かずに1回のprint、或いはもう少し簡単に表記できる方法はありませんか?
MULTIPLE_LINES
43デフォルトの名無しさん:2008/07/16(水) 07:23:55
ミスったorz

print << "MULTIPLE_LINES";
print を使い何行もの文章を書く場合
毎行はじめにprintと書いているのですが、
これを書かずに1回のprint、或いはもう少し簡単に表記できる方法はありませんか?
MULTIPLE_LINES
44デフォルトの名無しさん:2008/07/16(水) 16:36:58
ヒアドキュメントだとインデントが綺麗にならないからバットノウハウに載ってた気がするけど毎行printで書いてしまう。
ttp://chalow.net/2006-09-07-1.html こういう話もあるけど
45デフォルトの名無しさん:2008/07/16(水) 17:02:38
>>44
何か有名な解説本に載ってた解法。
(都合上 indent は全角でやってるが、半角 x 4 に置き換えてくれ)
sub del_ind ($$){ ( my $in = $_[0] ) =~ s/^\s{$_[1]}//gm ; $in ; }
 my $bar = del_ind <<' EOF', 4 ;
 hoge
 foo
 bar
 EOF

print $bar ;
46デフォルトの名無しさん:2008/07/16(水) 23:12:30
#__END__ 以下に複数のドキュメントを含めたければ、ラベルで区切って、それを切り出すサブルーチンを作れば良い。
#変数展開したければevalするよろし。
print <DATA>;
__END__
print を使い何行もの文章を書く場合
毎行はじめにprintと書いているのですが、
これを書かずに1回のprint、或いはもう少し簡単に表記できる方法はありませんか?
47デフォルトの名無しさん:2008/07/17(木) 16:58:15
systemのstdoutを配列に入れ込むことはできませんか?
48デフォルトの名無しさん:2008/07/17(木) 17:00:19
何がしたいのか今ひとつ理解できんが多分できるよ。
49デフォルトの名無しさん:2008/07/17(木) 17:02:05
すみません 途中で送信してしまいました。

my @test = system( 'ls');

としているのですが、lsの内容がstdoutに出力されてしまい、@testには代入されません。
@testにls(他のコマンドの場合もあります)の出力を代入したいのですが、
そのような方法はありませんか?
50デフォルトの名無しさん:2008/07/17(木) 17:10:23
>>49
qx演算子とかopen関数とか
詳しくはperlop, perlfunc参照
51デフォルトの名無しさん:2008/07/17(木) 17:25:16
>>49
lsコマンドの変わりにglobとかstat使っても良いよ。
52デフォルトの名無しさん:2008/07/17(木) 17:26:52
>>49
my @test = `ls`;
53デフォルトの名無しさん:2008/07/17(木) 19:20:47

.∧_∧
(`・ω・) ……むぅ、のってないよ
/ヽ/⌒/⌒/
  ⌒`⌒
54デフォルトの名無しさん:2008/07/17(木) 19:51:30
>>52に補足で
lsを囲んでるのはシングルクォート「'」じゃなくて、バッククォート「`」だよ
見づらくてすみません
55デフォルトの名無しさん:2008/07/17(木) 23:17:52
$nullpo = "・ω・'" ;
if ( $nullpo =~ /\'/ ) {
print "\(’$`\)";
}
56デフォルトの名無しさん:2008/07/18(金) 01:29:43
> ありがと。これで納期に間に合いそうです。

いくらもらってるの?
57デフォルトの名無しさん:2008/07/18(金) 01:38:05
perl -MEncode -le "print encode('cp932', qq(>>55 \x{30AC}\x{30C3}))"
58デフォルトの名無しさん:2008/07/18(金) 15:18:50
2次元配列で、List::Utilで最大値を求めたい場合は
$max = List::Util::max(@$foo[0]);
ではだめなのですか?
59デフォルトの名無しさん:2008/07/18(金) 15:26:50
template-toolkitで複数の関数を定義した外部ファイルを読み込み
実行したいのですがスマートなやり方はありませんでしょうか。
以下のような感じです。
---main.tt2---
[%
INCLUDE sub_func.tt2;
hoge(111);
fuga(222);
%]

---sub_func.tt2---
[%
MACRO hoge(n) BLOCK; 'hoge = ' _ n; END;
MACRO fuga(n) BLOCK; 'fuga = ' _ n; END; %]
期待する結果:hoge=111fuga=222
実際は何も表示されません。恐らくスコープ関係かなと考えます。
60デフォルトの名無しさん:2008/07/18(金) 15:51:28
>>58
max map {max @$_} @foo
61デフォルトの名無しさん:2008/07/18(金) 16:02:18
thx
でけますた
62デフォルトの名無しさん:2008/07/18(金) 16:15:44
>>59
localizeしたくないときはINCLUDEじゃなくてPROCESS
6359:2008/07/18(金) 16:31:06
>>62
ありがとうございます。お教えいただいた方法で希望の動作が出来ました。
64デフォルトの名無しさん:2008/07/18(金) 21:38:14
標準的なPerlにて、C言語のような符号なしchar型を使いたいのですが、
明示的に宣言する方法はあるでしょうか。

具体的には

$hensuu = 0;
$hensuu--;
print $hensuu;

出力結果 : 255

という処理を行いたいです。
現在は$hensuuの内容を判断し、0〜255の範囲に丸めています。
65デフォルトの名無しさん:2008/07/18(金) 21:57:57
%256
66デフォルトの名無しさん:2008/07/18(金) 22:09:47
& 255
6764:2008/07/18(金) 22:19:17
>>65,66
ありがとうございます。明示的な型宣言は無理で、利用する際に下位1バイトだけを
持ってくるしかないんですね。勉強になりました。以下実行速度です。

$ time { ./65.pl; }
255
real 0m0.133s
user 0m0.030s
sys 0m0.077s

$ time { ./66.pl; }
255
real 0m0.144s
user 0m0.046s
sys 0m0.062s

後学のために、ついでに質問させていただきますが、
$hensuuを大きな配列($hensuu[0xFFFFFF]など)として利用する場合、
メモリ消費を節約しようと考えたら、pack/unpackなどを使い自分でデータを管理した方が早いでしょうか。
是非をお答えいただけたら幸いです。
68デフォルトの名無しさん:2008/07/18(金) 22:51:05
> 明示的な型宣言は無理
あんたがPerl(データに型は無いが、演算子には厳格な型がある)を使うのは無理、とも言う

> メモリ消費を節約しようと考えたら、pack/unpackなど
pack以前/unpack以降のメモリ消費量を考えていない、とも言う

もっtieないお化けが出ちゃうぞ
69デフォルトの名無しさん:2008/07/18(金) 23:06:40
出来ないなら出来ないって、なぜ素直に言えんの?
決して恥ずかしいことじゃ無いんだよ。
70デフォルトの名無しさん:2008/07/18(金) 23:09:28
> あんたがPerl(データに型は無いが、演算子には厳格な型がある)を使うのは無理、とも言う

型のオブジェクト作れば厳格にできるじゃん。
71デフォルトの名無しさん:2008/07/19(土) 00:24:35
>>68は教える側に立ってるつもりなのかw
72デフォルトの名無しさん:2008/07/19(土) 00:35:10
>>68は分かってる振りをしたくて必死なんだからあんまりいじめちゃよくない。
73デフォルトの名無しさん:2008/07/19(土) 01:15:19
>>68は後輩を育てられないタイプ
74デフォルトの名無しさん:2008/07/19(土) 01:28:41
>>67
> メモリ消費を節約しようと考えたら、pack/unpackなどを使い自分でデータを管理した方が早いでしょうか。

http://search.cpan.org/search?query=Tie%3A%3AArray%3A%3APackedC&mode=all

Tie::Array::Packedが最高速なのかな
75デフォルトの名無しさん:2008/07/19(土) 09:53:36
メモリ領域を食いつぶすほど大きな数値matrixを扱うときは素直にcで書いてるよ。
それほど大きくはないけど速度がほしいときはInline::C。
76デフォルトの名無しさん:2008/07/19(土) 17:31:21
Cはlargeモデルで書いてもセグメントの境界をまたげないので無理
77デフォルトの名無しさん:2008/07/19(土) 20:59:43
> Cはlargeモデルで書いてもセグメントの境界をまたげないので無理

それいつの時代の話?w
78デフォルトの名無しさん:2008/07/19(土) 21:00:07
最近の OS でもコールゲートでセグメント切り替えとかやってんの?
79デフォルトの名無しさん:2008/07/20(日) 12:54:43

ギチギチ・・・・。゚ ゚        < ̄ω ̄・> ←>>78
                / ̄ ̄||uu.|| ̄ ̄\ コナー
               /  __||UU||__  \
           ._   |    |        |    |
             | |===|    |===========|    |llO
      ∧_∧ | | .  |    |        |    |
     ( ・∀・) | |.   |__|        |__|
     =U==U==|_|
80デフォルトの名無しさん:2008/07/20(日) 22:21:53
>>67
「利用する際に下位1バイトだけを持ってくる」風な機能を投げやりに自動化してみた。
使い方は、お好きな変数を
tie $var, 'CharLike';
するだけ。
以下 CharLike.pm:

package CharLike;

use strict;
use warnings;
use utf8;

use Tie::Scalar;
our @ISA = qw( Tie::StdScalar );

sub FETCH { return ${ $_[0] } % 256; }
1;
81デフォルトの名無しさん:2008/07/20(日) 23:29:28
ファイル自体をutf-8で書いても、
use utf8と書いておいたほうがいいのでしょうか?

82デフォルトの名無しさん:2008/07/20(日) 23:51:48
>>81
utfプラグマはファイルをUTFで書いたときに使います
8382:2008/07/20(日) 23:52:15
おっと。
なぜか8を二回とも書き忘れた
84デフォルトの名無しさん:2008/07/21(月) 09:09:49
ま、ようするに、utf8 で書いてあるのかどうか、perl には自動で判断出来ない ってこと。
php だと php.ini ってファイルにデフォルトのエンコーディングを設定したりするよな。
MySQL も my.ini にデフォルトのエンコーディングを設定するところがある。
java は デフォルトで Shift-JIS だよな(Windows の場合)
perl には 「デフォルトのエンコーディング」 ってのは無いんだな。
85デフォルトの名無しさん:2008/07/21(月) 09:24:00
> ま、ようするに

なにを要するとそういう意味不明な答えが出るの?
86デフォルトの名無しさん:2008/07/21(月) 09:32:56
php.iniって、1サーバーに1つしか設定できないから、「俺はSJISだい!」「いや俺はUTF8でい!」「セッションタイムアウトは20分に決まってんだろ!」「バーカPHPのセッション機能なんか使えるかボケ!」っていう複数プロジェクトが同居できないんだよな。
87デフォルトの名無しさん:2008/07/21(月) 09:37:48
いまだにPerlとPHPを比べたがる人がいるのかよw
好きなほう使えよw
88デフォルトの名無しさん:2008/07/21(月) 09:58:34
>>86
ヒント
php --help
89デフォルトの名無しさん:2008/07/21(月) 10:10:50
昔、つっても数年前だが、Perl vs PHPの論争が活発だったころは面白かったな〜
まぁ、結局WebはPHPの一人勝ちか
90デフォルトの名無しさん:2008/07/21(月) 10:14:08
>>4の日本語処理ができるとは具体的にどういうことができるのですか?
91デフォルトの名無しさん:2008/07/21(月) 10:19:47
正規表現とか、substr とかで切った貼ったできるって事。
9288:2008/07/21(月) 10:20:45
>>88 は撤回します。
93デフォルトの名無しさん:2008/07/21(月) 10:38:19
>>91
なるほど、サンクス
94デフォルトの名無しさん:2008/07/21(月) 15:41:19
5.10になって速くなった気がする
95デフォルトの名無しさん:2008/07/21(月) 16:08:23
64bitOSってPerl早くなるの?
96デフォルトの名無しさん:2008/07/21(月) 21:27:48
早くなるよ。CPUのクロックが早くなった分。
97デフォルトの名無しさん:2008/07/22(火) 05:05:39
CGIの正規表現で(月)など()ごと曜日を消したかったので
$date =~ s/\([月火水木金土日]\)//g;
というのでやってみたんですができなかったんですが
どうすればいいでしょうか
98デフォルトの名無しさん:2008/07/22(火) 05:25:37
>>97
正規表現でマルチバイト文字を使うと、誤作動することがあるけど
それなんじゃないかなあ。
$dateには何が入ってるの?
必ず「2008年07月22日 (火)」みたいな文字列が入るって分かるなら、
日付だけ抜き出した方が早いかも
99デフォルトの名無しさん:2008/07/22(火) 05:27:14

入力文字のコードセットが分かってる場合は
曜日文字のコードを直接してもいいかも
100デフォルトの名無しさん:2008/07/22(火) 05:30:58
>>98
>正規表現でマルチバイト文字を使うと
そうなんですかわかりました

>$dateには何が入ってるの?
元は2chのdatなので「2008/07/22(火)」みたいな感じです

>日付だけ抜き出した方が早いかも
よくわからないので手ほどきお願いします

>>99
よくわからないです。初心者ですみません。
101デフォルトの名無しさん:2008/07/22(火) 06:07:53
>>100
んじゃこんなんで
$date =~ s/([0-9]+)\/([0-9]{2})\/([0-9]{2}).*/\1\/\2\/\3/;
102デフォルトの名無しさん:2008/07/22(火) 06:14:56
>>101
おお!できました。ありがとうございました!
103デフォルトの名無しさん:2008/07/22(火) 08:14:50
お、おめでとう('A`)
104デフォルトの名無しさん:2008/07/22(火) 09:51:48
>>97
Windowsなら、おまじないの>>4を使うとできるかもね
105デフォルトの名無しさん:2008/07/22(火) 11:11:20
テキストファイルの内容を別のテキストにコピーするプログラムを
open(makefile "makefile.text");
open(mainfile "ARGV[0]");
print makefile <mainfile>;
close(mainfile);
close(makefile);

と直感的に書いてみたのですが、実際には何も書き込まれていない
makefile.htmlが出来上がりました。
ARGV[0]のところか、print makefile <mainfile>;
の所に問題がある気がするのですがよろしくお願いします。
106デフォルトの名無しさん:2008/07/22(火) 11:42:11
open(makefile ">makefile.txt")
107デフォルトの名無しさん:2008/07/22(火) 12:17:57
> open(mainfile "ARGV[0]");
これ、いったい何がしたいの?他人に説明できる?
いま自分が何をしているのか、自分でわかって無いでしょ?
perl 本を読むとか、ネットで検索するとか、少しは努力をしてから
質問しなさい。
108デフォルトの名無しさん:2008/07/22(火) 12:28:42
コマンドラインからファイルのパスを与えているので
それを開いてくれればと思ったのですが。
109デフォルトの名無しさん:2008/07/22(火) 12:30:16
open FH,・・・
と、
open $fh,・・・
の違いは何ですか?
110デフォルトの名無しさん:2008/07/22(火) 12:31:18
Perlやった事ないけど"で囲ったら文字列として扱われるんじゃないの?
あと書式は$ARGV[0]だった気がするんだけど
111110:2008/07/22(火) 12:32:45
あ、変数展開されるんだ・・何でもなかった全て忘れて欲しい
112デフォルトの名無しさん:2008/07/22(火) 12:41:57
>>111
いいえ!!
助かりました。
うまくいきました。
ありがとうございます。
113デフォルトの名無しさん:2008/07/22(火) 13:11:39
UNIX環境でテキストを配列に読み込むとき、面倒くさくて「@str = `cat hoge.txt`」なんてやっちゃうけど、
コマンドのリダイレクトを多用するのって、やっぱマズいんですかねー。
ロックが必要な時はちゃんとopen/closeするけど、readonlyなログなどは
`cat log | tail -l 3`みたいに、一行で済ませることが多いっす。

これについて詳しく解説してあるサイトないかな。

ちなみに
 ・配布目的ではない。Windows環境では使わない。
 ・最低限の基本コマンド程度しか使わない。
 ・外部から入力される変数をコマンドに丸投げしない。
といった状況ですー。
114デフォルトの名無しさん:2008/07/22(火) 13:17:50
ちゃんと動いていて重くて困ってるわけでもないんなら別にかまわんのじゃない?
そのものずばりではないが、ラクダ本の「24章 Perlの常識」あたりを読むと気が
楽になると思う。
115デフォルトの名無しさん:2008/07/22(火) 13:37:24
>>114
おお、ありがとー。掘り出して読んできます。

これ自体は問題ないとしたら、最近のPerl入門書やらPerl対PHPみたいな論争のお陰で
本来のグルー言語的な使い方のほうがイレギュラーになってのかなあ。
肩身狭く感じるわー。
116デフォルトの名無しさん:2008/07/22(火) 15:38:33
もっと自分を主張せよ!!
117デフォルトの名無しさん:2008/07/22(火) 16:16:52
あるファイルから、他のファイルを読み込んでそのファイル内に記述がある$hogeなどの変数文字列を変数の内容に置き換えるにはどうしたらいいでしょうか?
118デフォルトの名無しさん:2008/07/22(火) 16:23:49
(1) ファイルの中身が信用できるなら or 男なら黙って eval
(2) 君が変数だと思うものをパターンマッチで抽出して、値に置換
(3) Template Toolkitとか使った方がいくない?
119デフォルトの名無しさん:2008/07/22(火) 16:49:00
(2)で解決しました。
s///で置き換えを行っていたのですが、エスケープしてなかったせいで置き換えができていなかったようです。
120デフォルトの名無しさん:2008/07/22(火) 21:07:00
perl -ple 1 in.file > out.file # >>105 には秘密
121デフォルトの名無しさん:2008/07/22(火) 21:25:51
copy なんとか.txt makefile.text
122105:2008/07/22(火) 21:39:52
>>120-121
じつは書いていなかったのですが、
textの中身をHTML化するプログラムを作っていたので
あれで良かったのです。
<pre>タグの間に入れたかったのです。

ありがとうございました。
123120:2008/07/22(火) 22:20:59
>>122 ならこうかな。
perl -nle "1-$.||print'<PRE>'}continue{print}{print'</PRE>'"
124105:2008/07/22(火) 22:33:35
>>123
コマンドライン一発でできるんですね。
<html>
<head>
エンコード宣言(長いので省略)
<title>sth</title>(sthはsomethingの略)
</head>
<body>
<pre>
ファイルの内容
</pre>
</body>
</html>

を出力するのはどうなるでしょうか?
かなり長くなるのでプログラムにしてみたのですが・・
125105:2008/07/22(火) 22:34:49
かなり長くなる=>かなり長くなりそうな
です。
126123:2008/07/22(火) 22:38:18
perl -nle "1-$.||print'<pre>';print}{print'</pre>'" # これでよかった。チラ裏失礼。
127デフォルトの名無しさん:2008/07/22(火) 22:40:34
BEGINとENDのほうが可読性が高いな
128デフォルトの名無しさん:2008/07/22(火) 23:00:04
echo '<pre>' | cat hoge.txt | echo '</pre>' > out.htm

なんつうか、コマンドラインでやるんだったら、わざわざPerlを使うまでもない気がするが
129105:2008/07/22(火) 23:04:27
>>128
そうなんですよ
ですから私も以前shell scriptで作成しました。
UNIXの資産も利用できますし
ですが学習のためにperlで書き直してみました。
htmlのライブラリなど有るのでしょうか。
現在は<title>と</title>のように対応するタグを
一回一回書き込んでいるのですが、
まあ使い捨てのつもりでとっさに書いたので良いのですが。
効率化の方法が有ればよろしくお願いします。
130デフォルトの名無しさん:2008/07/22(火) 23:09:14
>>129

・・・あのさ。学習のためにPerlって言ってる割には
基本的なファイル入出力も直感で書いてるよね、お前。

ちょっと調べれば出てくる入門レベルの質問をしてるって分からないのか?
131デフォルトの名無しさん:2008/07/22(火) 23:39:24
>>129
そゆことなら HTML::Template を調べるのが吉ぽ。
132200000000000 ◆TFmStiahY2 :2008/07/23(水) 00:01:20

133デフォルトの名無しさん:2008/07/23(水) 00:46:24
特定のディレクトリの中身のファイル全てに対して一括処理を行ってます。
readdirって文字数の長すぎるファイルがあると止まったりしませんか?
対応策ご存知でしたらどなたかご教授ください・・・。
134デフォルトの名無しさん:2008/07/23(水) 00:54:02
>>133
バグレポして直してもらうのが筋だと思うが
lsの出力を食ってなんとかするとかそういう
手は考えられるな
135デフォルトの名無しさん:2008/07/23(水) 01:20:29
>>134
バグなんですか・・・。
そちらのヒントを参考に(win機なんで)dir使ってなんとかしてみます。
ありがとうございました。
136デフォルトの名無しさん:2008/07/23(水) 02:09:41
つか、質問の仕方が幼稚。
>文字数の長すぎるファイルがあると止まったりしませんか?
「長すぎる」じゃ誰にもワカランだろ。
もっと具体的に、たとえば「100万文字を越えると止まる」みたいに書かんとダメやろ。
perl よりも前に、コミュニケーション能力を学習しろよ。
137デフォルトの名無しさん:2008/07/23(水) 02:13:53
>>136
100万行を指定したところで、MMX時代マシンとメモリ実装8GBの最新マシンだと結果は歴然。
じゃあファイル名の長さは?属性などの情報は?

言い出したらきりがないのがわからんのかこのすかぽんたんめが。
138デフォルトの名無しさん:2008/07/23(水) 02:32:10
じゃぁおまいは病院に行って医者に「グワイが悪いので治してください」とでも言うのか?
頭が痛いのか、腹が痛いのか、ケツの穴が痛いのか、くしゃみが出るのか、変な汁が出るのか
いったいどうしたんかハッキリ言わんと、名医ブラック・ジャックにも治せんよ?
幼稚園児みたいに「頭が痛いでちゅかぁ〜?ぽんぽんが痛いでちゅかぁ〜?」って聞いてもらわんと
自分からは言えんのかよ?
それとも、「言い出したらきりがないのがわからんのか」と逆切れするつもり?
なぁ、幼稚園児さんよ。
139デフォルトの名無しさん:2008/07/23(水) 04:13:25
「言い出したらキリがない。だから言わない」

(笑)
140デフォルトの名無しさん:2008/07/23(水) 04:43:31
幼稚な質問に対して「質問が悪い」って言ってるやつほど滑稽だよな。
質問者の大半は「何が患部なのか」すらも分かってないのにw

>>138
例えがきもすぎ。気に入らない質問なら黙ってスルーしとけよな、カス。
141デフォルトの名無しさん:2008/07/23(水) 04:47:50
幼稚呼ばわりやコミュニケーション能力うんぬんを持ち出す時点で
ちゃんと説明する気はないんだから、>>136みたいなやつこそスルーしとけ
142デフォルトの名無しさん:2008/07/23(水) 06:42:06
>>135
perlのファイルシステム周りの関数はホントどうしようもない。
未だにA関数つかってるし、どうせMAX_PATH超えて引っかかってるんだろ。
143デフォルトの名無しさん:2008/07/23(水) 06:48:40
もりあがってまいりました。 2008年(夏)
144デフォルトの名無しさん:2008/07/23(水) 07:57:33
> perlのファイルシステム周りの関数はホントどうしようもない。

ナオシテ( 'Д`) >>142
145デフォルトの名無しさん:2008/07/23(水) 08:17:22
>>140
質問だけでなく、気に入らないレスもスルーしとけよな、カス。

あ、他人に許さない色んなことを、自分にだけは許してるタイプの人?w
146デフォルトの名無しさん:2008/07/23(水) 08:20:19
大漁だな
147デフォルトの名無しさん:2008/07/23(水) 08:29:22
釣り宣言で逃げるその時までイジるだけのこと
148デフォルトの名無しさん:2008/07/23(水) 08:54:14
ここもID表示にして欲しいな
149デフォルトの名無しさん:2008/07/23(水) 08:56:22
ここまでカスの自演
150デフォルトの名無しさん:2008/07/23(水) 09:52:19
みんな仲良く
151デフォルトの名無しさん:2008/07/23(水) 10:24:58
エスパーの俺から言わしてもらうとutf8 flaggedなパスに日本語ファイル名をくっつけて開こうとしているだけだな
152デフォルトの名無しさん:2008/07/23(水) 12:18:12
じゅもんせつやく
153デフォルトの名無しさん:2008/07/23(水) 13:24:34
*「 ふっかつの じゅもんが ちがいます。」
154デフォルトの名無しさん:2008/07/23(水) 17:53:59
すいません
WWW::Mechanizeをつかってlivedoorブログに投稿テストを
しようとしているのですが、投稿ページ中のテキストフィールド名が
title,tagまではエラーが出ないのですが本文の部分のテキストフィールド名
でエラーが出てしまいます。(ソースコードを見た所bodyと言う名前だったと思います。)
no such field 'body' at /Library/Perl/5.8.8/WWW/Mechanize.pm line 1371

途中でソースを出力するようにしたのでログインはできている事が確認できました。
そこから先で詰まっているのでよろしくお願いします。
155デフォルトの名無しさん:2008/07/23(水) 19:04:28
perl って、よくエラーが出ますよね?どうしたらいいですか?
156デフォルトの名無しさん:2008/07/23(水) 19:44:48
エラーメッセージを読めばいい。
157154:2008/07/23(水) 20:18:11
ちなみに私は>>155では有りません。
一応自分でググって粘ってできました。
ですがエンコーディングが・・・・EUCに変換して投稿しなければ・・・
盲点だった。
がんばります。
158154:2008/07/23(水) 22:04:54
perlプログラマとしてどうかとは思うのですが、
UNIXのnkfの力を借りてEUCにファイル全体を変換して実行すると
きれいに投稿する事ができました。
ありがとうございました。
159デフォルトの名無しさん:2008/07/23(水) 23:58:10
>perlプログラマとしてどうかとは思うのですが
160154:2008/07/24(木) 00:14:43
>>159
言葉が違う事に投稿した後できづきまして・・
perlプログラマの方は良くないと思うと思いますが。
ですね。
161デフォルトの名無しさん:2008/07/24(木) 00:17:03
>>113-115
このあたりを読めばいい
162デフォルトの名無しさん:2008/07/24(木) 02:10:39
perlの勉強を始めたばかりなのですが
画面のある一部だけを保存するようなPerlを作成したいと思っています

矩形のサイズをあらかじめ決めておきPerlを実行した際に
画面野左上などから 何ピクセル移動したところの矩形の部分ををBMPとして保存するものを作りたいと思っているのですが
PerlでBMPの保存するのに何かいい関数は無いものでしょうか
もし何かいい関数などがありましたら教えてください
163デフォルトの名無しさん:2008/07/24(木) 03:18:53
勉強初めたばかりなら関数リファレンスを流し読みでも良いから全部読むといいよ
何がPerlに向いてて何が向いていないのかがおぼろげにわかる
164デフォルトの名無しさん:2008/07/24(木) 05:07:38
その気になれば、UNIXでもWindowsでも>>162のようなことは可能だけど
質問の具合から見ると全くPerlのことを理解してないんだろうなぁ・・・。

余談だが、世の中にゃPerl-SDLなるものもあるから、Perlで3Dオンラインゲームみたいなのも作れんこともない。
165デフォルトの名無しさん:2008/07/24(木) 07:17:19
>>157
スクリプト内部で utf8 フラグ付の文字列操作をするなら、
入力が UTF-8 でも Encode::decode('utf8', $str) しないといかんです。
出力が UTF-8 でも Encode::encode('utf8', $str) しないといかんです。
外してたら失礼。
166154:2008/07/24(木) 07:44:51
>>165
ありがとうございます。
早速導入しました。
私のUNIX端末はUTF8が基本エンコードなので
入力文字列を出力前にEUC-JPに変換しておいて実行した所
無事に投稿できました。
167デフォルトの名無しさん:2008/07/24(木) 08:09:17
UTF8ベースの鳥ってFedoraだっけ
168デフォルトの名無しさん:2008/07/24(木) 08:12:18
>>162
> もし何かいい関数などがありましたら教えてください

CPAN
169デフォルトの名無しさん:2008/07/24(木) 08:33:50
半角79文字毎に改行しようとして、以下のようなスクリプトを書きました。
これだと、全角文字を分断する可能性があります。
正規表現を使って出来るだけシンプルに全角文字を分断しないようにするには、
どうしたらいいでしょうか?
入力される全角文字は半角英数を含むShiftJIS固定、Perlはv5.8.8です。

#!perl

my $herpussy = <STDIN>;
my $mystick = 79;
$herpussy =~ s/([^\n]{$mystick})/\1\n/g;

print $herpussy;
170デフォルトの名無しさん:2008/07/24(木) 08:36:40
早い話、走査していって、
改行を挿入する場所の直前のバイトが0x82だったら、
$mystick-1の位置に改行を挿入、そうでなければそのまま挿入とやってみたいのです(´・ω・`)
171デフォルトの名無しさん:2008/07/24(木) 08:44:18
すいません
ここよんできます(´・ω・`)
http://www.din.or.jp/~ohzaki/regex.htm
172デフォルトの名無しさん:2008/07/24(木) 09:55:01
>>168
だな。
screenshotで検索すると、それっぽいのが出てくるし。
173154:2008/07/24(木) 10:28:29
プログラム内から直接投稿する形式をとっているのですが。
本文を入力する際
print "本文:";
$body = <STDIN>;
としているのでどうしても一行しか投稿する事ができません。
この問題を解決するにはどのようにすれば良いのでしょうか?
今思い浮かんでいるのは
1,テキストファイルを引数に入れてもらいそれを本文にする。
2,何らかの方法で入力中に文末である事を明示する仕組みを実装。

2に使える関数など有ればよろしくお願いします。
174デフォルトの名無しさん:2008/07/24(木) 10:37:36
>>173
それは自前のロジックで処理すべきもんだろう。
「"q"1文字+改行が入力されたら終了」とかのロジックを入れてwhileとかで回しとけ。
175デフォルトの名無しさん:2008/07/24(木) 10:38:10
@body = <STDIN>;
176154:2008/07/24(木) 10:45:13
>>174
その場合qを本文で入力したい場合どうしたら良いのでしょうか?

vimのキーバインド解説!!
:q
とすると・・・・投稿されたー!?という自体が起こりえる危険を感じます。
ただ、何となく方向性は見えてきました。
ありがとうございます。

>>175
ありがとうございます。参考にします。
177デフォルトの名無しさん:2008/07/24(木) 10:52:56
^Dとか^Zとかでいいじゃん。
178154:2008/07/24(木) 10:58:38
>>177
ありがとうございます。
179デフォルトの名無しさん:2008/07/24(木) 11:24:19
>>176
> その場合qを本文で入力したい場合どうしたら良いのでしょうか?

端末からの入力なのか? 昔から、"."のみの行を終端とするのが多いな。
行頭の".."は"."に変換されると言うようなルールを入れて。
180154:2008/07/24(木) 11:56:01
>>179
端末から直接投稿できるプログラムを作成したく思っていまして。
一行だけならなんとかできたのですが。
数行にわたる文章を変数に代入して操作するのがうまくいかなくて困っていたのです。
181デフォルトの名無しさん:2008/07/24(木) 12:07:30
標準入力から読むのなら、普通に書いて最後に^Dで通るけどな。
182154:2008/07/24(木) 12:16:01
ああ・・・・なんだかこんがらがってきた。
body:
今日は今perlでブログに投稿しようとしています。
数行にわたる文章を投稿したいのですがどうしようか迷っています。
.
と書くと
$mech->submit_form(form_name => 'ArticleForm',
fields => {
title => $title,
tag => $tag,
body => $body,←此処に代入されて

今日は今perlでブログに投稿しようとしています。
数行にわたる文章を投稿したいのですがどうしようか迷っています。

が投稿される様にしたいのです。
そもそもWWW::Mechanizeを使っているのが間違いなのでしょうか?
よろしくお願いします。
183デフォルトの名無しさん:2008/07/24(木) 12:49:10
勝手に一人で迷ってろ!
184154:2008/07/24(木) 12:54:59
>>183
わかりました。
自分で迷います。
さんざんスレ汚しすいませんでした。
185デフォルトの名無しさん:2008/07/24(木) 13:52:13
質問です。perlで掲示板(別に掲示板でなくてもショッピングカートや商品リスト生成
といったものでもいいですが)をオブジェクト指向でつくるメリットてなんでしょうか?

メリット
その1 クラスをモジュール化することによる改良しやすいプログラムになること
その2 メインプログラムはモジュールつかって書くので変数のバッティングを気にしなくてもいい。

ということでしょうか?しかし、
その1については別にOPPのモジュールにしなくても単なるサブルーチンモジュールでやっても
改良はやりやすいだろうし。
その2についても、変数が1000とかのオーダーでないかぎりしっかりと仕様をおって変数定義
していれば間違わないとおもうし

あえて掲示板でOPPを使うメリットとはなんでしょうか?
186デフォルトの名無しさん:2008/07/24(木) 14:02:46
o-phenylphenol?
187デフォルトの名無しさん:2008/07/24(木) 14:04:09
デメリットが特に無いから。
188デフォルトの名無しさん:2008/07/24(木) 14:05:30
OPPってなんだ?
189デフォルトの名無しさん:2008/07/24(木) 14:37:56
オッパッピーだろ
190デフォルトの名無しさん:2008/07/24(木) 14:40:32
> しっかりと仕様をおって変数定義していれば間違わないとおもうし

こりゃ無理そうだな。
191デフォルトの名無しさん:2008/07/24(木) 14:50:13
@textに
テスト文です。
複数行にわたっています。
を代入して,$make_textに

テスト文です。<br>複数行にわたっています。<br>

を代入できるように変換したいのです。
どのようにすれば実装できるかお願いします。
192デフォルトの名無しさん:2008/07/24(木) 14:51:14
すいません、OPPじゃなくOOPのことです。

>>190
まぁ、カプセル化したほうが安全ではありますが。。。


193デフォルトの名無しさん:2008/07/24(木) 14:58:28
>>191
my $make_text = join '<br>', @test, '';
194デフォルトの名無しさん:2008/07/24(木) 15:06:04
>>185
> 質問です。perlで掲示板(別に掲示板でなくてもショッピングカートや商品リスト生成
> といったものでもいいですが)をオブジェクト指向でつくるメリットてなんでしょうか?

OOPについてこられないほど頭が悪いバグ生産器を排除できること。
195デフォルトの名無しさん:2008/07/24(木) 15:11:14
Catalyst使って楽をしようと思うと自動的にoopになっちゃうけどね
196デフォルトの名無しさん:2008/07/24(木) 15:40:09
>>176
それは単なる一例だから。何もqに限らなくていいじゃん。
他の人が言ってるけど、割り切ってEOF(UNIXなら^D、Windowsなら^Z+改行)でもいいし。
197デフォルトの名無しさん:2008/07/24(木) 17:03:03
>>185
(ある種の)if文を書かなくてよくなることがOOP最大のメリット。(俺主観)
if (商品->{種別} == A) { 処理1A(商品) } elsif (商品->{種別} == B) { 処理1B(商品) }
...
if (商品->{種別} == A) { 処理2A(商品) } elsif (商品->{種別} == B) { 処理2B(商品) }
みたいなコードがあちこちにあった場合、商品の種別が変更される毎に、悪夢のような修正が待っている。
そもそも0から書く場合でも、いちいちif文をずらずら並べるのはものすごく面倒くさい。
ところがOOPで書くと、そもそもif文自体が不要になる。
商品->処理1;
...
商品->処理2;
こうなると、商品の種別に変更があっても、呼び出し側を修正する必要性を大きく減らすことができる。(※正しく設計すれば)
なにより、面倒くさくないのが良い。
198デフォルトの名無しさん:2008/07/24(木) 17:25:05 BE:665847959-2BP(1)
(正しく設計されていれば)関数型よりも再利用がしやすくなる。
いわゆるデザインパターンが利用できる。(しやすくなる)
関数(メソッド)間の変数の取り回しが楽になる。

って感じかなぁ
199デフォルトの名無しさん:2008/07/24(木) 17:32:01
OOPのメリットじゃなくて、比較的簡単なモノを作る際にOOPにするメリットの話だろ?
200デフォルトの名無しさん:2008/07/24(木) 18:20:57
>>194
たしかに、開発者のレベルの足切りにつかえそうですねw 自分は継承までは
使いこなせないです。いや、継承をしてメリットがでるようなプログラムは
まだであったことがないといったほうがいいのか。

>>197
メインプログラムでif分を減らせるってことですよね?そして変更は
モジュール部分で行なえるし、そのモジュールを使うほかの各種メインプログラム
自体はいじらずにすむ。ということですよね。

たしかにOOPでつくるとメインプログラムがメモ帳というか箇条書きチックになって
みやすいし面白いですね。その分、モジュールの設計が鬼のように大変ですけど。

>>198
これは、開発してきたOOPモジュールを部分的に再利用したりってことですかね。
継承とかではなくて。 あとはひな形みたいなものをつくっておけばコピペで
基本的なモジュールも専用につくれますしね。

>>199
いや、ヒアック的簡単なものという限定ではなくてもおっけいです。
ただ、掲示板は例は基本的なテクニックが網羅されているっていう点で
あげたわけです。


201デフォルトの名無しさん:2008/07/24(木) 18:28:50
ちなみに、私が掲示板をOOPでつくるとしたら、各クラスは

HTMLモジュール=HTMLのヘッダーやフッターやその他を組み立てる部分

ファイル、データ関係モジュール=データの読み込みや書き込み、
フォーム処理、そしてそれらデータをひな形HTMLに合成したHTMLのパーツを生成する部分
当然、ここがOOPプログラムの中枢になるモジュールで、変数の扱いで無名ハッシュ、リファレンス
とつかった多次元配列などのテクニックを使う。またデータを扱う部分なので当然、データの
整合チェックを行ないエラーカウントやエラーメッセージパーツを生成する部分でもある。

アカウントモジュール=ユーザーアカウントの認証、セッション発行や、不正アクセス
行為のアカウントロックなど行ない、エラーカウント、メッセージを生成


その他モジュール=上記以外で必要になるパーツを用意するクラス

これらのモジュールをつかって、メインプログラムでは必要となるモジュールを
動作させる。という感じなのですが。


202デフォルトの名無しさん:2008/07/24(木) 18:32:47
そうやって綺麗に分けてあると
アカウントや出力スタイルを共有する
別のプログラムを作りたくなったときに便利だな。
203デフォルトの名無しさん:2008/07/24(木) 18:50:37
酷過ぎてワロタ
204デフォルトの名無しさん:2008/07/24(木) 19:06:27
>>182
$body . $_ while <>;
205デフォルトの名無しさん:2008/07/24(木) 19:28:28
>>169
$herpussy =~ s/((?>.{78}))(.)/ $2 =~ /[\x81-\x9f\xe0-\xfc]/ ? $1 . "\n" : $1 . $2 . "\n" /eg;
# 未テスト注意
206デフォルトの名無しさん:2008/07/24(木) 19:46:06
>>203
感想かくのは自由だが、質問スレなのにどこが具体的にひどいのか指摘しないのも
みていて痛すぎるよ。人を笑えないって。
207205:2008/07/24(木) 19:48:18
>>205
$herpussy =~ s/((?>.{78}))(.)/
my ($pre, $post) = ($1, $2);
($2 =~ m{[\x81-\x9f\xe0-\xfc]})
? (pos($herpussy) -1) && $pre . "\n" . $post
: $pre . $post . "\n";
/eg;

# あんまりだったのでセルフサービス
208デフォルトの名無しさん:2008/07/24(木) 20:48:54
>>201
それは機能単位でシステムを分割してるから、OOPよりも構造化プログラミング寄りだと思うよ。
どうちがうのかと聞かれたら、俺はOOPは構造化よりもデータ指向プログラミング寄りだと答える。
209デフォルトの名無しさん:2008/07/24(木) 21:08:39
>>208
レスありがとうございます。おっしゃっている意味はなんとなくわかります。
上の例でいうならOOPが問題になる部分はファイルやデータをあつかうモジュール
部分のクラスの書き方だとおもいます。 実際問題として掲示板のデータを考えると、
コンストラクタで生成したインスタンスに掲示板の投稿者や内容、日付といった
データをセットするわけですが、その構成方法のみを考えると、OOPのメリットは
なく、あるとすればアクセサ経由のカプセル化とほかのクラスとの連携を考えた上
での構成(構造化っていうんですかね)くらいかなぁとおもうんです。

>>202
ヘッダーやフッターや基本のミッダー表示だけなら、なんの面倒もなく
かけるし、ミッダー部分の処理だけあらためにクラスをつくればいいだけ
ですので、転用はしやすいですよね。


210デフォルトの名無しさん:2008/07/24(木) 21:20:13
ええっと、OOPについての質問はもう一つあるんです。

よく解説書の説明で車などを例により、オブジェクトとして車をいくつも
生成できるでしょ!便利でしょ! みたいな説明がありますよね。あとは
ゲームでいうと敵機をいくつでもコピーして画面にだせるでしょ!みたいな
説明もあります。

この考え方をperlによる掲示板プログラムに適用すると果たしてモジュールは
どういう構成にすればいいのか? という点です。

正直いって、自分はまったくわかりません。車に相当するものを投稿データと
するならば、投稿データオブジェクトクラス なんかをつくったとしましょう。

それをメインプログラムの方で、必要な投稿数だけ(たとえば10件表示した
としましょう)ひとって出力するとすれば、メインプログラム内で 
投稿データオブジェクトクラスを10回ループして、一つ一つの投稿のデータ
はループの中でメインプログラムのスコープで配列にし、それを10回くり
返すことになり、結局、投稿データクラスで生成したオブジェクトを10回分
生成、破棄を繰り返すことになり、はたしてそれはメリットなのか?とおもう
わけです。

投稿データの変数をインスタンスとしてセットしたならそのオブジェクトの
空間(スコープ)で、データを保持したいですよね。そうすると、投稿データの
クラスのプログラムとしては、必要なデータ分をファイル分からとりだして、
その個数分だけインスタンスを用意して読み込んだ値をセットすることに
なります。

あと、もう一つ、初心者として恥ずかしい疑問があるのですが、それはまた別に書きたいと
おもいます。
211デフォルトの名無しさん:2008/07/24(木) 21:36:33
オレオレ用語生成器は、優秀なバグ生成器でもある。
212デフォルトの名無しさん:2008/07/24(木) 21:41:52
>>210
オブジェクト指向でうれしいのは多態性かな。

例えば、投稿のパターンが複数ある場合。
ある投稿は画像だけ、ある投稿はテキストだけ、ある投稿はHTMLで、ある投稿はDESで暗号化されてるとする。
でもカプセル化して、各オブジェクトのhogehogeメソッドを呼び出すことによって、必要な形(ここではHTML)に変換して出力するようにしておけば、
メインプログラムにおいて、投稿されたデータが何であるかを意識する必要がなく、
ただループの中でhogehogeメソッドを呼び出すだけ。
みたいな。

(結局データ読み込み部でそれを判別して、それぞれのオブジェクト作らないといけないけど。)
213デフォルトの名無しさん:2008/07/24(木) 21:50:39
>>210
さっぱり意味不明。コード書いてどっかのアップローダに上げて添削してもらえ。
214デフォルトの名無しさん:2008/07/24(木) 22:38:56
>>210
投稿データをクラスにする方向だとメリットはほとんどないと思う。
それよりは「掲示板システム」自体をクラス化するほうがメリットが出てくるだろう。
215デフォルトの名無しさん:2008/07/24(木) 23:39:43
たとえば、
・メモ帳
・予定表
・WEBメール
これを1つのクラスから派生させるといいかな。
全体的に統一感が出る。
認証も一箇所で済むよね。
216デフォルトの名無しさん:2008/07/24(木) 23:50:10
java とかさ、メイン側の if 文が減って、コードがずいぶん見やすいなぁ
・・・と思ったら、下位の関数側で
if (obj instanceOf なんとか) {
 ・・・
} else if (obj instanceOf かんとか) {
 ・・・
} else if (obj instanceOf うんこっこ) {
 ・・・
} else if (obj instanceOf しっこっこ) {
 ・・・
こんなのが延々と続いてる、ってのをよく見かける。
単にメイン側の if 文を 下位関数に移動させただけ。
結局、仕様変更時の手間は変わらない。
再利用不能!
217154:2008/07/25(金) 00:08:01
無事完成しました。
皆さんにはとてもお世話になりました。
知らなかったテクニックなども沢山ご教授いただきありがとうございました。
Perlプログラマに幸あれ!!!
218デフォルトの名無しさん:2008/07/25(金) 01:41:04
perl検定ってないの?
219デフォルトの名無しさん:2008/07/25(金) 01:49:00
>>218
ググったらあったよ\(^o^)/
http://minna.cert.yahoo.co.jp/bsmii/179971
220デフォルトの名無しさん:2008/07/25(金) 02:08:52
  ↑
もし仮にコレが国家試験だとしても、履歴書に書くのだけはやめような。
221デフォルトの名無しさん:2008/07/25(金) 02:26:36
まともに答えたのに不合格言われた/(^o^)\
222デフォルトの名無しさん:2008/07/25(金) 02:27:09
「Yahoo!Japan みんなの検定」
       ↑
これはいったいなんだ?
223デフォルトの名無しさん:2008/07/25(金) 02:29:42
Yahoo利用者たちが独自に「検定」と呼ばれるクイズを出題し、みんながそれに答えるシステムのようだな。
>>219のような出題もあるので、効力も信憑性も皆無だ。
224デフォルトの名無しさん:2008/07/25(金) 02:50:02
>>219
こ・れ・は・酷・い。(言葉通りの意味で)
225デフォルトの名無しさん:2008/07/25(金) 03:27:42
print "\a";
print "\a";
print "\a";
print "\a";
print "\a";
print "\a";
print "\a";
print "\a";
print "\a";
print "\a";
print "\a";

↑これを実行しても音が出ないんだが?
226デフォルトの名無しさん:2008/07/25(金) 03:36:51
それで?
227デフォルトの名無しさん:2008/07/25(金) 04:50:58
>>219
これはひどい
いや、ほんとにひどい
228デフォルトの名無しさん:2008/07/25(金) 05:53:32
今参考書読んでたら

「JPerlでないPerlでは、
文字クラス内の
日本語文字コードは
2文字すなわち文字2個に分解されるので、
同じ日本語文字コードとはマッチしません」

と書いてあるのだが、これ本当なの?

自分は無料で借りれるレンタルサーバーでCGIを
動かしているのだが、これってJPerlなのかな?
すごい困るんだけど。
229デフォルトの名無しさん:2008/07/25(金) 06:25:08
質問

Perlの正規表現、一度学んだら
別の言語でもそのまま使えるの?
230デフォルトの名無しさん:2008/07/25(金) 06:48:21
The Perl fundation
https://donate.perl-foundation.org/index.pl?node=Fund%20Drive%20Status&lastnode_id=305

ってところのページを見たんだが、著作権の表示が
2005年で止まってるね。なんで?死んだの?
231デフォルトの名無しさん:2008/07/25(金) 07:50:59
>>228
もっと新しい本買え
232Perl中級者になりたい:2008/07/25(金) 10:17:47
質問というか、、

URLを入力するとリンク切れをチェックしてくれるツールをPerlで作ってみました。
http://w7.oroti.com/~webhacks/

ソースコードを公開してますので、
コーディングについてアドバイスしていただけると嬉しいです。。
233デフォルトの名無しさん:2008/07/25(金) 11:07:45
>>232
とりあえず至急に改善すべき点が1つ。クロスサイトスクリプティング脆弱性を何とかするように。
26, 31-34行あたり。他にもあるかもしれんが、まだ見てない。
234233:2008/07/25(金) 11:09:20
あと、改善されるまではそのCGI引っ込めておけ。
235デフォルトの名無しさん:2008/07/25(金) 11:33:39
URLの正規表現は>>3あたり
せめてHTML出力は切り分けよう・・・
236デフォルトの名無しさん:2008/07/25(金) 11:54:11
修正できてねえじゃん

775 名前:デフォルトの名無しさん メェル:sage 投稿日:2008/07/23(水) 17:06:30
>>773
http://w7.oroti.com/~webhacks/cgi-bin/linkhacks.cgi?url=%3cscript%3ealert%28%22aho%22%29%3b%3c%2fscript%3e

気をつけろよ。

780 名前:Perl中級者になりたい 投稿日:2008/07/23(水) 18:22:40
>>775
ahoの嵐・・・orz
受け取ったデータのチェックが必要ですね。。頑張って修正します。
237デフォルトの名無しさん:2008/07/25(金) 12:06:46
>>232
WebProg行けって言われたのになんでここに来るんだw
http://pc11.2ch.net/test/read.cgi/tech/1037383722/773-


CGI.pmのHTML吐く関数郡使うかTT使え

あと同じ処理はまとめろ
例:
1.リクエストする関数
2.チェック済か判断する関数
3.外部リンクか判断する関数
4.1-3をまとめる関数
238デフォルトの名無しさん:2008/07/25(金) 12:25:12
WebProgの方、perlで検索したら死ぬほどスレあってワロタw
Webの方ではあらかたPHPに移行したと思ってたんだが。
# >>232ってもしかしてコピペ?
239デフォルトの名無しさん:2008/07/25(金) 12:48:33
238がちょっと残念なのは分かった
240デフォルトの名無しさん:2008/07/25(金) 15:41:56
>>233
よこれすですが、

その行の部分の虚弱性ってのは、利用しているモジュールが変数のサニタイズを
していない可能性があるし、外部入力の文字(urlなど)がはいるところなので
ヤバい文字列をチェック削除置換しておけ!

っていう意味にとっていいですか?
241デフォルトの名無しさん:2008/07/25(金) 15:42:12
Perlのメーリングリストに参加したいと思うのですが、
Googleで検索してみると沢山有るようでどれがベストな選択か
迷っています。
おすすめなMLをお教え願います。
242デフォルトの名無しさん:2008/07/25(金) 15:57:47
comp.lang.perl.miscでいいんじゃないの?
newsgroupだけど。
243デフォルトの名無しさん:2008/07/25(金) 17:38:07
あるbmpの中に緑色の16FF6Dがあるか確認するスクリプトを書きたいと思っているのですが
パターンマッチの仕方がわからない状態になっています
ファイルをバイナリモードで開いて 16FF6Dがあるかパターンマチングをする
参考になるコードを教えていただけないでしょうか
244デフォルトの名無しさん:2008/07/25(金) 17:45:33
小学校のとき、先生に知能に障害がある子のうちに遊びに行かされた
彼は脇目もふらずにドラクエ3をやっていて、正直、「こいつでもドラクエとかわかるんだなあ」と思った
三十分ほど彼のプレイを見ていて、とても悲しい事に気が付いた
彼がそのゲームでやっているのは、アリアハンの周りでスライムとカラスを倒す、ただそれだけだった。
パーティにただ一人の勇者のLvは50を越えていた。彼は永遠、素手でスライムを殺し続けた
とても楽しそうだった
先に進めてやろうと思い1コンに手を伸ばしたら凄い剣幕で怒鳴られた。
なんて怒鳴られたか聞き取れなかったけれど、とにかく怒鳴られた
それを見て彼の母親が「ごめんなさいね、○○ちゃんはファミコン大好きのよ」と僕に謝った
彼はドラクエ以外のソフトは持っていなかった

僕はそれ以来、ゲームをやらなくなった。以前のようにゲームにのめり込めなくなってしまったのだ。
コントローラーを握るとやるせなくなった。友達の家に行ってもみんながやるのを見ているだけだった
その間、僕はゲームに興じる友達の背中だけを見るように努めた
本当にむなしかった
その内に、僕はファミコンを憎むようにさえなった。今までの人生の中で、あんなに何かを憎んだことはない
それは真夜中に僕を目覚めさせた
ゲームなんかこの世からなくなってくれと本当に願った
僕はソフトを彼に全部あげて、本体は捨ててしまおうと思ったが、兄に怒られそれすらできなかった。
一人暮らしをしている今でもゲームは嫌いだし、もちろん家にも置いていない。

時々、彼と、永遠に世界を救えなかったであろう彼の勇者の事を思い出すと、とても悲しくなる
245デフォルトの名無しさん:2008/07/25(金) 17:46:04
とても悲しくなる
まで呼んだ
246デフォルトの名無しさん:2008/07/25(金) 18:07:58
悲しい。ただただ悲しい。
247デフォルトの名無しさん:2008/07/25(金) 18:29:40
ゲームもドラクエもしないから面白みがわからん
248デフォルトの名無しさん:2008/07/25(金) 18:32:12
ドラクエが彼の人生のみならず家族の人生までも救ったことに
気がつかない人は多い。
ちゃんころだからしょうがないか。
249デフォルトの名無しさん:2008/07/25(金) 19:51:21
つ〜か、上の例の知能障害がドラクエやっている例と健常者がドラクエをやっている
ことの差ってのは、基本的レベルまでおとしこめば、差はないとおもう。

プログラムやっている人ならそれくらいわかるだろ。結局はゲームという枠組みの
中でさるのように(受け身にしかなれないわけだが)なってシコシコやっている姿
は障害でも健常でもかわらないこった。

唯一違うことは、物作りだ。244はゲームのむなしさに気がついたのだろうか。

250デフォルトの名無しさん:2008/07/25(金) 20:02:42
正規表現において、繰り返しマッチであるgオプションをつけたときの\Gの意味がよくわかりません。
「パターンマッチングが終了した場所を記憶しておき、そこにマッチ」という説明がされていますが、
なんのことやら。。。

例題を用いて挙動を説明してもらえると嬉しいです。
251デフォルトの名無しさん:2008/07/25(金) 20:05:14
前回のマッチで食い終わった場所
252デフォルトの名無しさん:2008/07/25(金) 20:06:43
>>240
渡されたデータを生のまま出力すんな、くらいのつもりだったけど。

MVCで考えると、表示において異常を生じないようにするのは原則
としてViewの責任なので、Viewに相当する部分を指摘すべき箇所と
考えた、というところ。

# あと、個人的には、適切なバリデーションと適切なエスケープを
# していれば、サニタイズという考え方は必要ないと思ってる。
253デフォルトの名無しさん:2008/07/25(金) 20:06:52
前回のマッチ位置にマッチするだけ。
254デフォルトの名無しさん:2008/07/25(金) 21:06:09
>>249
あれから20年たって、まだスライムを倒し続けているのを知ってもそう思えるか?
255250:2008/07/25(金) 21:06:52
あっ、わかりました
256デフォルトの名無しさん:2008/07/25(金) 21:36:39
参考書読んでたら、CGI使うときに、

出力バッファをフラッシュするために、
一番上の行に

$|

を必ず書くように、との記述がありましたが、
そうなの?
257デフォルトの名無しさん:2008/07/25(金) 21:49:30
>>169
正規表現のみは難しいんじゃないかな?
以下サイトに書いてあるよ。

Shift-JISテキストを正しく扱う
http://homepage1.nifty.com/nomenclator/perl/shiftjis.htm#fold
258デフォルトの名無しさん:2008/07/25(金) 22:28:41
どういう理屈で以下はハッシュになるのでしょうか?
%も出てこないのにわけわからん。

@hash{a,b,c} = ();
259デフォルトの名無しさん:2008/07/25(金) 22:37:15
>>256
$| = 1;
の間違いじゃないの? もし本当にそう書いてあったら、そんな参考書捨ててしまえ。
あと、1リクエスト内で時間のかかる処理をやるのでなければバッファリングを解除する理由はないと思うが。
260デフォルトの名無しさん:2008/07/25(金) 22:39:14
>>254
他のゲーム好きは、わざわざ別のソフトを買って
だいたい同じことをやってるわけだからな。
どっちもどっちだ。
261デフォルトの名無しさん:2008/07/25(金) 22:41:45
っ[ハッシュスライス]
262デフォルトの名無しさん:2008/07/25(金) 22:46:52
>>258
初めて見た文法だった。
ハッシュスライスと言うらしい。
ちょっぴり感動した。
263デフォルトの名無しさん:2008/07/25(金) 22:51:15
>>261-262
サンクス。
そういう文法なんだ。
264207:2008/07/25(金) 23:33:40
>>257
>>207 は一応動くように書いたけど。ややこしくて申し訳ない。
265デフォルトの名無しさん:2008/07/25(金) 23:52:56
>>259
もう一度よくみたら、たしかにそうでした。
266デフォルトの名無しさん:2008/07/25(金) 23:55:42
>>259
そんで、

「出力のバッファをフラッシュしないと、
デッドロック問題が起こるから、そうしろ」

って書いてありました。
267デフォルトの名無しさん:2008/07/25(金) 23:55:56
>>254
260の意見と同じく、ほかのゲームにしろやってることは根本的にかわらない。
だから障害児のやっていることと健常者がゲームに夢中になっていることは
本質的に大差ないんだよ。画面みてパッドをシコシコやっているだけ。

当人にとってはそれが面白い行為なので、ゲームの束縛から脱却できた人もしくは
はなっからそういう行為は無駄だとラッキーにも経験的に知って自らは創作する
側や演奏する側、送り手側にたつことができた人からみれば、あわれにおもう。

俺個人も大事な時期なのにシューティングにのめり込んでいたけど、今はまったくやらな
くなった。こないだ久々に昔のゲームがどんなものなのかニコニコでみてみたけど、
よくこんな行為をあきもせず延々とやっていたなぁと、驚愕するだけだった。


268デフォルトの名無しさん:2008/07/25(金) 23:56:57
質問

他人が書いたCGIゲームを改造するんですが、
local使ってるかな?と思って

「local」

でソースコードを検索かけたところ、

#!/usr/local/bin/perl

とかまでもがひっかかってしまいます。

#!/usr/local/bin/perl

とかは、検索にひっかかってほしくないんです。

localを変数として使っている局面だけ知りたいので、
こういう場合はどうすればいいですか?
269デフォルトの名無しさん:2008/07/25(金) 23:58:33
>>268
"local"ではなくて、"local "で検索してみたら?
270デフォルトの名無しさん:2008/07/26(土) 00:09:52
1行目は検索しないとか
271デフォルトの名無しさん:2008/07/26(土) 00:43:50
>>270
そんなことできるの?

Windowsに普通についてる「検索」機能でやってます。
272デフォルトの名無しさん:2008/07/26(土) 00:46:21
perl 関係ないじゃん
273デフォルトの名無しさん:2008/07/26(土) 01:20:27
質問

CGIゲームなんだけど、
「いきなりサーバーにアップロードする前に
ローカルでテストしてください」

とか書いてあるんだけど、
OSがwindowsでactiveperlをインストールして
Windows用のアパッチを入れてあるんだけど、
ファイルロック用で、symlinkっていう関数があるんだけど、
これってWindowsでは動かない、って参考書に書いてあるんだけど、
それだともしかして、symlinkがソースコード中にあったら、
Windows環境では、ローカルでのテストは、できない、ってことなの?
274デフォルトの名無しさん:2008/07/26(土) 01:36:54
symlinkはWindowsで言うところのショートカットを作るコマンドだからね。
はっきり言って、そんなもん使うならflockした方がいいと思うよ。


って、ここまで書いて、ここがム板だということに気付いた
275デフォルトの名無しさん:2008/07/26(土) 03:35:51
質問

ハンドルって
ファイルハンドルと
ディレクトリハンドルの
二つしかない?
276デフォルトの名無しさん:2008/07/26(土) 03:50:31
>>259

参考書を読むと、

「ApacheなどのWWWサーバでは、
CGIで標準出力に対してバッファリングを
行うとデッドロック問題を引き起こす可能性が
あります。必ずCGIスクリプトの先頭部に
次の行を加えておきましょう」

と書いてあるんですよね。

「必ず」
とかって書かれてるので、
「本当にそうなのかなぁ?」
って、一応は疑ってみたんですよね。
277デフォルトの名無しさん:2008/07/26(土) 04:12:40
質問

参考書を読むと、

「Windowsでは、イメージファイルの読み取り時などに、
改行コードを変換するよう、binmode関数を使う必要があります。」

って書いてあるけど、「Windowsでは」って書いてあるってことは、
ひょっとして、UNIXでは、binmodeなんて使わなくてもいいんでないの?

で、自分はWindowsでテストして、レンタルサーバーにアップロードして
CGIを動かすんだけど、binmodeは使わないとだめなの?

それって、テスト時のみ必要ってことなの?
278デフォルトの名無しさん:2008/07/26(土) 04:22:25
質問

「#を使った場合、そこから後ろはコメントと
みなされます」

って書いてあるのだが、ヒアドキュメントを使った
場合のみ、そのルールが例外になるんだよね?

ヒアドキュメントだと、#があっても
コメント扱いされず、そのまま出力されるっていう。
279デフォルトの名無しさん:2008/07/26(土) 04:24:00
その質問文を書いてる間にチェックできることをいちいち聞くな
280デフォルトの名無しさん:2008/07/26(土) 04:26:22
>>278
それ以前に#じゃなくて#だ
281デフォルトの名無しさん:2008/07/26(土) 04:33:21
「ヒアドキュメントを使った場合のみ」

例外になるのか、って聞いてるんだー
282デフォルトの名無しさん:2008/07/26(土) 04:34:18
>>278
じゃ簡単なクイズをやろう。

print "うんこ#ちんこ\n"

さて、どう表示されるでしょう?
283デフォルトの名無しさん:2008/07/26(土) 04:37:37
>>277
UNIX には テキストファイル、バイナリファイルの区別が無いんだよ。
binmode は Windows でのみ効果がある。UNIX との違いを吸収するためのおまじない。
UNIX で使っても無視されるから、そのまま放っておいて構わない。
284デフォルトの名無しさん:2008/07/26(土) 04:38:51
>>276
その前に、「デッドロック」 の意味がわかってるのかな?
285デフォルトの名無しさん:2008/07/26(土) 04:40:51
>>275
それは、どこまでをハンドルと認めるかによって違うから
非常に答えづらい質問だ。おそらくみんな無視するだろうね。
286デフォルトの名無しさん:2008/07/26(土) 04:43:09
>>282

print "うんこ         #ちんこ\n"

こうなるはずだな。

あーでも、printを閉じるダブルクオーテーションがないよ。
だから、エラーになるのでは?
287デフォルトの名無しさん:2008/07/26(土) 04:44:07
>>282
うちの環境では

うんこ#ちんこ

と表示された!ふしぎ!
288デフォルトの名無しさん:2008/07/26(土) 04:45:36
>>285
いや、ハンドル、って名前がついてればそれでいいから。
289デフォルトの名無しさん:2008/07/26(土) 04:46:33
夏が来た〜〜〜!
290デフォルトの名無しさん:2008/07/26(土) 04:50:34
質問

複数行のコメントで、

=pod
=cut

って説明と、

=comment
=cut

って説明と、二通りあるんだけど、
どっちが正しいの?

それとも、両方とも正しいの?
291デフォルトの名無しさん:2008/07/26(土) 04:51:27
あと

__END__

この次の行からは、
なんでも好きなことを勝手に書いてもいいの?
292デフォルトの名無しさん:2008/07/26(土) 05:18:04
1回ぐらいマニュアル読めよ。
293デフォルトの名無しさん:2008/07/26(土) 05:36:05
試したら一瞬で解決する質問ばっかだな
294デフォルトの名無しさん:2008/07/26(土) 06:41:02
来週海に行こうと思うんですがどの辺がいいでしょうか?
295デフォルトの名無しさん:2008/07/26(土) 07:24:36
バミューダかな
296デフォルトの名無しさん:2008/07/26(土) 08:41:26
>>267
perlのスレで何意味不明なネタを延々と続けてんだ。いい加減止めろ。
297デフォルトの名無しさん:2008/07/26(土) 08:59:37
>>276
は? 原理的にありえないような気がしつつ、ぐぐってみたけど、それらしい情報が引っかからんな。
誰かそれらしい話知ってる? あるいはデッドロックが生じる原理知ってる人。
ttps://issues.apache.org/bugzilla/show_bug.cgi?id=22030
こいつは標準エラー出力だし、結局fixされたバグだから関係ないよなあ……。
298デフォルトの名無しさん:2008/07/26(土) 09:18:06
HTMLの<pre>タグ内で<を表示させたい場合lt;などと変換しなければ成りません。
また逆にlt;を表示したい場合<に変換しなければ成りません。

このような処理を行うにはどのようにすれば良いのでしょうか?
文章中で<だったものはlt;にlt;と書かれていた物は<に変換という
方法がわかりません。
よろしくお願いします。
299デフォルトの名無しさん:2008/07/26(土) 09:24:09
>>298
CGI.pmの関数、escapeHTMLとunescapeHTMLの使用を検討することをお薦めします。
300デフォルトの名無しさん:2008/07/26(土) 09:58:00
>>293
試したら一瞬で結果は出るが、なぜそうなるのか、理由が知りたいって事なんじゃないのか?
301デフォルトの名無しさん:2008/07/26(土) 10:42:29
>>300
上のほうのレスを見ると分かるとおり、そういう意図で質問するやつなら
ちゃんとその旨を伝えるべきだと思うよ。やってるやつはやってるし。

これこれこういうことをやってみて、こういう結果になったが
仕様として規定されているのか、またその理由は?

という質問なら、ちゃんとレスが付いてる。
302デフォルトの名無しさん:2008/07/26(土) 11:54:26
ここはCGIの質問も受け付けるようになったのか。知らなかった。
303デフォルトの名無しさん:2008/07/26(土) 12:29:01
参考書によるととか言ってる奴は、書名と著者名かけよ。
304デフォルトの名無しさん:2008/07/26(土) 16:01:11
そういえば、オブジェクト指向をテーマした解説サイトで
>の文字がほかの文字に化けていて、なんという文法なんだってしばらく
分からずじまいだった。でオブジェクト指向やリファレンスやらの
表記になれてきたとき、そのサイトを読み直して文字化けだったと
気がついたw orz

いいサイトなんだけど、そのおかげで初学者には超えられない壁になっていた。

305デフォルトの名無しさん:2008/07/26(土) 16:31:29
print $words_arr[0];
print $words_arr[1];
みたいに、
配列や変数を複数連続してprintすると、
HTMLのソース内で変数の中身が
hoge
hoge
みたいに改行されて表示されます。
これをブラウザで見ると、中身と中身の間に
hoge hoge
みたいに半角スペースが入ってしまいます。
中身と中身の間にスペースを入れずに表示させたいのですが、
何か方法はありませんか?
306デフォルトの名無しさん:2008/07/26(土) 16:35:01
>>305
print join( '', @words_arr );
でうまくいくと思いますよ。
307デフォルトの名無しさん:2008/07/26(土) 16:41:53
>>306
いや、ちょっとま違えた。
各項目に改行コードが入っているなら
print join( '', map({ chomp($_); $_; } @words_arr) );
かな。
308デフォルトの名無しさん:2008/07/26(土) 16:53:31
chomp @words_arr;
{
local $,;
print @words_arr;
}
309デフォルトの名無しさん:2008/07/26(土) 17:17:00
>>306-308
レスありがとうございます。。
どれも試してみたのですが、だめっぽいです。
ブラウザで表示させて、ソースを見ると単語が改行されて表示されてます。

色々試してみたのですが、どうもブラウザによっても違うみたいで、
IEやfirefox2だと、ソースで改行されててもスペースは入らないのですが、
firefox3だとソースで改行されてるとスペースが入るみたいです。
310デフォルトの名無しさん:2008/07/26(土) 17:21:33
>>308
参考になります。
311デフォルトの名無しさん:2008/07/26(土) 17:25:13
>>309
もしかして各項目に改行が二つ以上入っていますか?
正規表現で改行を全て取り除くという技もありますが。
print join( '', map({ $_ =~ s/\n//g; $_; } @words_arr) );
312デフォルトの名無しさん:2008/07/26(土) 17:35:06
これはどうみてもHTMLの話
313デフォルトの名無しさん:2008/07/26(土) 17:41:27
もっとソース出せばわかるんじゃない?
314デフォルトの名無しさん:2008/07/26(土) 17:59:22
>>311-313
みなさんありがとうございます。
HTMLの問題でもあるっぽいんですが、
HTMLソースで改行さえされなければ何とかなりそうです。

open IN, "<mydata.dat";
my @words_arr;
foreach (<IN>) {
push( @words_arr, $_ );
}
chomp @words_arr;
print "Content-type: text/html\n\n";
for ( my $i = 0 ; $i < 3 ; $i++ ) {
print $words_arr[ int( rand(30) ) ];
}

ソースはこんな感じです。。
315デフォルトの名無しさん:2008/07/26(土) 18:32:59
>>314
open IN, "./mydata.dat" or die $!;
chomp(my @words_arr = <IN>);
print "Content-type: text/html\n\n";
print $words_arr[int(rand 30)] . " " for 1..3;

俺が質問を理解できてないのかもしれないけど
「mydata.dat」の中身は適当な文字列で
こんな感じでやってみたけど、IE6でもFirefox3でも変わらなかったよ
316デフォルトの名無しさん:2008/07/26(土) 18:35:34
どうしちゃったんだ、このスレ。
質問も回答もまるでWebProg板。
317デフォルトの名無しさん:2008/07/26(土) 19:21:13
>>290
は自分で調べてわかったからもう、ええわ。
http://perl-mongers.org/2008/06/pod.html
318デフォルトの名無しさん:2008/07/26(土) 19:22:26
質問

なんでsystem関数だけ、
失敗したとき1を返すの?

普通は、成功したら1
失敗したら0
を返すものだと思ったましたが、
なんでsystem関数だけ、
失敗したときに1を返すの?

変態なの?
319デフォルトの名無しさん:2008/07/26(土) 19:32:19
うん
320デフォルトの名無しさん:2008/07/26(土) 19:35:29
最近分かったことなんだが、『perl』って『ペル』じゃなく『パール』って読むそうだ。
外国語って難しいな。
321デフォルトの名無しさん:2008/07/26(土) 19:36:23
>>318
UNIX系のシステムコールでは「真(成功)が0、偽(失敗)が非0」。
UNIX系のシェルもそうなっている。
なぜそう設計したかというと、成功したときはその要因を詳しく調べる必要がないけれど、
失敗したときは「どのように失敗したか」という要因を戻り値として詳しく伝えたいから。
322デフォルトの名無しさん:2008/07/26(土) 19:40:50
ぺるっちゃった
323デフォルトの名無しさん:2008/07/26(土) 22:21:23
IDEの話なんだけどさ、
いろんなIDE40個くらい試してみて
体験レポートとかブログとかに
まとめてる人とかっていないの?

そういうマニアみたいな人
324デフォルトの名無しさん:2008/07/26(土) 23:31:56
>>315
おお、そういう風に書くとカッコいいですね!
色々勉強になります。

あと試させてもらったのですが、
やっぱり自分の環境だとスペース入るみたいです。
板違いな質問っぽくなってきたので、また出直します。
ありがとうございました!
325デフォルトの名無しさん:2008/07/26(土) 23:34:35
質問

型グロブとレファレンスについて。

型グロブとはPerl4の時代に使われた
古い仕組みで、主に変数の別名をつけるなどの
目的で使われた。

現在のPerl5では、型グロブなど使う池沼はいなくて
ほぼ全部レファレンスで置き換えられている。

これであってる?
326デフォルトの名無しさん:2008/07/26(土) 23:39:57
>>325
ちょっと間違えた。

Perl4の時代の型グロブの主な使い方は、

(1)
サブルーチンなどで、配列やハッシュのもつ値ではなく、
配列やハッシュ自体を指し示す「参照」を受け渡す

(2)
ファイルハンドルを渡したり、格納する

こう書いてました。
327デフォルトの名無しさん:2008/07/26(土) 23:48:14
質問

NSAは日本語情報を実はうまく取得できていないのでは?

なぜなら、ラリー・ウオールはNSAに所属しているときに、

「大量の文字列処理」
を行う必要性に迫られてPerlを作ったと
書いているが、Perlは日本語はあまりうまく処理できないので、
当然NSA内部でも日本語の情報はうまく扱えて
いなかったのではないか、と推測される。
328デフォルトの名無しさん:2008/07/26(土) 23:55:06
だからぁ、何に書いてあったのか、書名なりホームページなりを書けよ。
329デフォルトの名無しさん:2008/07/26(土) 23:57:16
>>327
日本サーフィン連盟が大量の文字列処理をする必要あるのか?
大波小波を掻き分けてりゃ十分だろ?
330デフォルトの名無しさん:2008/07/27(日) 00:15:07
>>327
勉強したいなら本ばっか読んでないで
プログラム書けよ
受験勉強じゃねーんだからw
331デフォルトの名無しさん:2008/07/27(日) 00:32:09
俺はプログラミングには興味ねー
332デフォルトの名無しさん:2008/07/27(日) 00:34:54
>>330
> 勉強したいなら本ばっか読んでないで
> プログラム書けよ
> 受験勉強じゃねーんだからw

おぞましくも病的な
http://kazz7.air-nifty.com/tekito/2008/07/learning_perl.html
を思い出した。
333デフォルトの名無しさん:2008/07/27(日) 00:36:22
perlってNSAが開発したの?
なんかものすごいバッグドアがありそうな言語だな。
334デフォルトの名無しさん:2008/07/27(日) 00:43:53
>>333
NSAが開発したんでなくて、
ラリーがNSAに在籍してるときに

「大量の文字列処理」

を要求されて、それで仕方なく作ったのがPerl
335デフォルトの名無しさん:2008/07/27(日) 00:44:31
そこで質問

Rubyの開発者は日本人なので、
日本語処理は得意なの?
336デフォルトの名無しさん:2008/07/27(日) 01:10:15
なんかプログラミング言語って英語が多いみたいだけど、
誰か日本語のプログラミング言語を開発してくれないかな。
337デフォルトの名無しさん:2008/07/27(日) 01:17:33
338デフォルトの名無しさん:2008/07/27(日) 01:22:41
339デフォルトの名無しさん:2008/07/27(日) 01:27:04
340デフォルトの名無しさん:2008/07/27(日) 01:35:14
341デフォルトの名無しさん:2008/07/27(日) 01:49:21
……夏か。夏なのか。
342デフォルトの名無しさん:2008/07/27(日) 01:58:34
もうそろそろ飽きだよ
343デフォルトの名無しさん:2008/07/27(日) 02:05:54
質問

なぜ、本などに書いてあることをここに丸々書き写して
いちいち確認を求めるの?
344デフォルトの名無しさん:2008/07/27(日) 02:13:26
>>343
ま、まさかキミ、「本に書いてある事はすべて正しい」・・・とか思ってない?
345デフォルトの名無しさん:2008/07/27(日) 02:14:53
>>343 は活字信奉者?
346デフォルトの名無しさん:2008/07/27(日) 02:21:01
>>343
実は漏れは別の分野で
「本を書く側」
の人間なんだが、ウソやでたらめを
いままでも散々書きまくってきたため、
自分もデタラメを書いてるのだから
他人もそうに違いないと思って
本に書いてあることはいちいち
確認してから信用するようにしているのだよ
347デフォルトの名無しさん:2008/07/27(日) 02:22:45
ところで別の質問

参考書を読むと

「$value = 5;

よみやすくするため、スカラー変数と、=と、 値の間には
それぞれ空白文字をいれます。」

と書いてあるのだが、それくらい自動でできないの?
コンピューターでしょ?
348デフォルトの名無しさん:2008/07/27(日) 02:34:01
>>344-346
なぜマニュアル読んだり、Perlの実装で確かめないの?を遠回りに聞いてるのだと思うぞ。
はっきり言って、2chの情報を鵜呑みにするとか、2chで確認するなんて頭がイカレてる。
349デフォルトの名無しさん:2008/07/27(日) 02:38:06
NSAって国家安全保障局 National Security Agency のことじゃないのか?


350デフォルトの名無しさん:2008/07/27(日) 03:00:02
print "あなたの名前を入力してください";

$a = <stdin>;
chomp $a;

print "こんにちわ、 $aさん\n";


↑このスクリプトで、$aの直前に、全角スペースを
入れているのだが、そうすると、出力するときに
文字化けになる。

なんでだろう?
351デフォルトの名無しさん:2008/07/27(日) 03:05:17
>>4
352デフォルトの名無しさん:2008/07/27(日) 03:08:49
>>347
むかしむかし、ビジュアルベーシックのIDEが、そういう事をやってたが評判が悪かった。
コーディングスタイルに介入されると無性に腹が立つ。
「できるか、できないか」、では無く、「余計なおせっかいしてほしくない」 だ。
353デフォルトの名無しさん:2008/07/27(日) 03:09:28
Can't use string ("名前") as an ARRAY ref while "strict refs" in use at - line 4, <STDIN> line 1.
use strict したらこんなエラーがでた
配列リファレンスとして見られてるんじゃない?
354デフォルトの名無しさん:2008/07/27(日) 03:23:49
ひょっとして、全角スペースが2バイト文字で、
1バイト目と2バイト目とで構成されていて、
そんで、そのどっちかが、アスキーコードで
メタ文字と同じになっていて、それでおかしく
なってるのかな?
355デフォルトの名無しさん:2008/07/27(日) 03:34:36
全角スペースの第2バイトが@と同じコードで配列として変数展開
356デフォルトの名無しさん:2008/07/27(日) 03:49:33
だからuse encodingしろっていってるじゃないですか
357デフォルトの名無しさん:2008/07/27(日) 03:57:02
でも、いまWindows上でActivePerlでテストしていて、
これって最終的にはUNIXのレンタルサーバーにアップロード
して使うので、そのときはuse encodingしないでも
動くのではないですか?
358デフォルトの名無しさん:2008/07/27(日) 04:09:06
「Perlクエスト」

「おお、勇者よ、聞いてくれ、
実は悪い魔王が$を奪っていったのじゃ。
このままではスカラー変数を使うことができない。

そこで勇者よ、魔王の城に行って
$を奪い返してきてくれないか」
359デフォルトの名無しさん:2008/07/27(日) 04:14:08
質問

システムコールってあるじゃん。

そんで、システムコールって当然
OSごとに違うじゃん。

そしたら、perlのソースコード中に、
OSを判別するコードを埋め込んでおいて、
もしWindwsだったら、このシステムコール。
もしUNIXだったら、こっちのシステムコール、
とかって、分岐しないとだめなの?
360デフォルトの名無しさん:2008/07/27(日) 04:28:00
だからぁ、1回でもいいからさぁ、マニュアル読めよ。
361デフォルトの名無しさん:2008/07/27(日) 04:32:54
マニュアルなんか持ってないよ
362デフォルトの名無しさん:2008/07/27(日) 04:34:26
質問

部分文字列の取り出しは、
パターンマッチ関連の演算子でやる方法と、
substr関数でやる方法と、
2種類あるわけですが、これの使い分けは、

何文字目なのか、
わかっている場合は、substr関数で決め打ち、
わかっていない場合は、
パターンマッチ演算子でやる、

こういう使い分けであってますか?
363デフォルトの名無しさん:2008/07/27(日) 04:44:28
>>357
use encoding は全くお勧めしませんが、それはさておき、
「UNIXのレンタルサーバーにアップロードして使う」と SJIS 系における全角スペースの第二オクテットが ISO 8859 系の "@" と重複することに起因する不具合が解消するとお考えなのは何故でしょう?
問題の特性からして実行環境の種別とは直行していますから、ご提示の不具合に関する限り何ら影響しないはずではないかと愚考致します。
貴殿の仰るようにアップロードすれば正常動作するのであれば、それは素敵ですが、どうやら世界の計算機はまだ、その水準で空気を読むまでには進化していない模様です。
僭越ながら一般論を申し上げますと、ご自分でプログラムを書いて試される事は、夢見がちな持論を脊髄反射で衆人環視の元に投げ込み続けるに優る、最も手軽で効果的な学習方法です。
ついでと申しましては何ですが、失礼ながら公開のサーバで自作プログラムを走らせるのはまだ時期尚早とお見受け致します。
なにぶんこの点、公共の福祉に関する問題もございますので、今回の開発計画、あるいは今生の人生設計を慎重に再検討頂けますれば存外の幸いと存じます。
願わくはこれからも貴殿の Perl Life に幸多からん事をお祈り申し上げます。
364デフォルトの名無しさん:2008/07/27(日) 05:01:33
「Perlクエスト2」

「勇者は宝箱を開けた!
なんとprintを見つけた!」
365デフォルトの名無しさん:2008/07/27(日) 05:33:26
366デフォルトの名無しさん:2008/07/27(日) 05:44:40
>>363
いま使ってるのは、activeperlなのね。
でもUNIXにアップロードしたら、そこで動いているのは
activeperlじゃなくて、ちゃんとした本物のPerlなのね。

だから直るんじゃないかなーって。
367デフォルトの名無しさん:2008/07/27(日) 06:08:39
質問

#!の読み方で、
「シーバング」
って書いてあるのですが、
バングはわかるとして、なんで
#がシーになるのか、
教えてもらえますか?
368デフォルトの名無しさん:2008/07/27(日) 06:29:42
喪前らヴァカじゃねーの?(藁
Perlは手間をかければPHPと同じ実行スピードに近づけることは可能だけど、
そんな時間があったら初めからPHPを使ったほうが
仕事が早く終わるってことだろ。

今時Perlでデザインテンプレート使ったりデータベース突っついている
ヤツは死ねばいいんだよ(藁
369デフォルトの名無しさん:2008/07/27(日) 09:55:27
別に手間なんてかからないだろ。
無能はかかるのかもしれないけど、そういう世界は俺にはよくわからない。
370デフォルトの名無しさん:2008/07/27(日) 10:15:09
慣れてくるとJavaでもPHP並の速度でコード書けるようになってくるんだけどな。
そのぐらいのレベルになると逆にPHPの理不尽な挙動で時間食う事もままある。
368のような人は終始PHPを使った方がいいのは同意。日本のIT業界を底から頑張って支えてくれw
371デフォルトの名無しさん:2008/07/27(日) 10:52:25
>>366
サーバにftpでアップロードしてるんじゃないの?
そのときシフトJISをEUCか何かに自動変換するよう設定してるんじゃないの?
372デフォルトの名無しさん:2008/07/27(日) 10:58:49
>>370
慣れてくるとPerlでもPHP並の速度でコード書けるようになってくるんだけどな。

・・・って言ってほしかったよ。嘘でもいいから。ここはPerlスレなんだから。
まぁそんなヤツは絶対にいないと思うけど。
そんな事に慣れるヒマがあったらPHPのコード書くよね。

でもjavaは、Eclipse とか NetBeans 無しじゃ書けないだろ?
Windowsのメモ帳だけじゃ書け無いだろ?
受注先にいつもいつも開発環境が整ってるとは限らんのよ?
373デフォルトの名無しさん:2008/07/27(日) 11:34:13
自分で書くのではなく、他者にどう書くのか指示する奴ってなんなの?!
374デフォルトの名無しさん:2008/07/27(日) 11:53:46
>>373
日本語が変すぎて、誰の書いた何に対して思うところがあるのかわからん。
375デフォルトの名無しさん:2008/07/27(日) 12:05:25
自分ではプログラムを書かないSEがプログラマーにコード規約を押しつけるのは普通
376デフォルトの名無しさん:2008/07/27(日) 12:37:40
うむ、職業病だな。

377デフォルトの名無しさん:2008/07/27(日) 14:27:00
PHPなんて、HTMLにコードが書かれていて手のうちばればて、そんなものを
一般向けに利用している会社は信用しない

っておもうのはあさはか?
378デフォルトの名無しさん:2008/07/27(日) 14:46:34
>>366
ActivePerlもちゃんと本物のPerlだ。ただ少しばかりActiveStateのパッチが当たってるだけ。
379デフォルトの名無しさん:2008/07/27(日) 22:51:45
>>377
PHPはブラウザからはソース見れないよ。
javascriptじゃないんだから。
380デフォルトの名無しさん:2008/07/27(日) 23:53:14
>>377
ASP
JSP
似たのはいっぱいあるよ。
381デフォルトの名無しさん:2008/07/28(月) 00:14:17
>>377
納品先にってことだったら、Perlも丸見えだし
382デフォルトの名無しさん:2008/07/28(月) 01:08:20
java だって簡単に逆コンパイルしてソースが復元できるんだから
java を神のごとく信奉してる企業こそ浅はか以外の何者でも無い。
383デフォルトの名無しさん:2008/07/28(月) 01:40:38
なんだよ…「神のごとく信奉」って… ただの道具だろうが
384デフォルトの名無しさん:2008/07/28(月) 03:47:22
簡単に逆コンパイルしてソースが復元できない言語
って、たとえば何がある?
385デフォルトの名無しさん:2008/07/28(月) 03:47:54
バイナリだけ納品または配布して
ソースは秘匿するってモデルの場合の話ね。
386デフォルトの名無しさん:2008/07/28(月) 03:55:20
>>384
C++
387デフォルトの名無しさん:2008/07/28(月) 04:02:24
>>386
それでみんなC++使うんだ。
JAVAはほんとにそんなにカンタンに
ソースが見れてしまうの?
388デフォルトの名無しさん:2008/07/28(月) 04:39:34
perlappでソース隠せ
389デフォルトの名無しさん:2008/07/28(月) 05:55:48
>>388
なにそれ
390デフォルトの名無しさん:2008/07/28(月) 05:56:46
参考書に

「JPerlでないPerlでは、
文字クラス内の
日本語文字コードは
2文字すなわち文字2個に分解されるので、
同じ日本語文字コードとはマッチしません」

とかいてあるのだが、
これって本当は、
「シフトJISでは」
って意味なのかな?
だとしたら、EUCで書けば、
この問題は解決するの?
391デフォルトの名無しさん:2008/07/28(月) 06:26:48
参考書を読むと

$a = (5, 6, 7)[1];

これで、$aにリストの1番目の要素、すなわち6が入ると
書いてあるのですが、こんな書き方、普通するの?
392デフォルトの名無しさん:2008/07/28(月) 06:31:17
393デフォルトの名無しさん:2008/07/28(月) 06:58:11
シフトJISで書いたら、問題が発生する確率が60%
EUCで書いたら、問題が発生する確率が4%

こんな感じ?よってEUCで書くべし、っていう。
394デフォルトの名無しさん:2008/07/28(月) 07:05:16
>>392
読んだけど、なんだかよくわからんな。
素直にJPerl使ったほうがいいの?

でも、JPerlだと、自分のパソコンでテストするときは
うまく動くけど、それをレンタルサーバーにアップロードしたら
そこで動いているのはJPerlでなくて、普通のPerlだし、
そしたらまたエラーになるの?
395デフォルトの名無しさん:2008/07/28(月) 07:13:55
「JPerlをインストールする前に、
Perl for win32をインストールしておく
必要があります」

って書いてあるのだが、Perl for win32とはなにか?

自分の使ってるPerlとはなにか違うのか?
396デフォルトの名無しさん:2008/07/28(月) 07:15:52
(1)
なぜかPerlがいっぱいある
 ●Jperl、Perl for win32、activeperl

(2)
なぜか文字コードがいっぱいある
 ●EUC, シフトJIS、 ISO−2022−jp、ユニコード、

(3)
なぜかOSがいっぱいある
UNIX, Windows、 Mac,、、
397デフォルトの名無しさん:2008/07/28(月) 07:35:17
参考書読んでたら、

「JAVAとWindowsNTではUnicodeが標準の文字コードとなった」

と書いてあるが、本当なの?
398デフォルトの名無しさん:2008/07/28(月) 08:45:19
探してみたら、JPerlを使えるレンタルサーバーというのも、
いくつかあるみたいですね。なので

ローカルではWindowsでJPerlでテストする

完成したら、レンタルサーバーにアップして、UNIXでJPerlで動作させる

というのがいいかな、と思ったんですが、
自分が改造してるCGIはjcode.plを使ってるんですよね。

たしかJPerlってjcode.plが使えないじゃないですか。

とすると、CGIのソースの、jcode.plを使う部分も、
すべて変更しなければならないのでしょうか?

やっぱり、use encodingとかってやったほうがいい?
399デフォルトの名無しさん:2008/07/28(月) 09:34:39
「ここは8進数の国
住民はみな、手の指が8本しかない」
400デフォルトの名無しさん:2008/07/28(月) 09:54:47
質問

コンテキストっていうのは、
スカラーコンテキストと、
リストコンテキストとの、
二つしかないの?
401デフォルトの名無しさん:2008/07/28(月) 10:13:29
ヴォイドコンテクストがある。
perlfuncのwantarrayの項を参照。
402デフォルトの名無しさん:2008/07/28(月) 10:18:15
perlのマニュアルってWEBで見れるの?
403デフォルトの名無しさん:2008/07/28(月) 10:45:15
>391
一応は。
以下、$numには0〜6までの数字が入っているとする。(localtime関数で返ってくるやつね)

 $string = ( 'Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat' )[ $num ] ;

まあ、他にやり方なんぞたくさんあるだろうが。
404デフォルトの名無しさん:2008/07/28(月) 11:48:14
無効コンテキストなんていかがでしたか。
405デフォルトの名無しさん:2008/07/28(月) 14:35:15
voidを無効って訳すのはどうなの?
406デフォルトの名無しさん:2008/07/28(月) 20:57:52
perlメモですきなところって、排他処理の説明のところ。
407デフォルトの名無しさん:2008/07/28(月) 22:57:31
教えて下しア

ファイルで

出席番号 名前 身長・体重・BMI
1,田中昭三,163,65,24
2,鈴木一浪,180,59,13


見たいなファイルがあるのですが
これを容易にアクセスできるように、ハッシュのように扱いたいのです
たとえば

data[1] か data[田中昭三] みたいにすると身長・体重・BMIが引き出せるような。
Cだと構造体やら使えばいいのですが、どうにもわからず
助けて下しア
408デフォルトの名無しさん:2008/07/28(月) 22:58:16
,鈴木一浪wwww
409デフォルトの名無しさん:2008/07/28(月) 22:59:42
すんまそ、
身長・体重・BMIは空の場合もあるっす
410デフォルトの名無しさん:2008/07/28(月) 23:14:46
>>407

初心者です。
僕にはこれしか思い浮かびません。
どなたか訂正お願いします。

#!C:/perl/bin/perl

print"Content-type:text/html\n\n";

open(IN,"shusseki_log.cgi");
while(<IN>){
my($num,$name,$b,$m,$w) = split(/,/,$_);
$bmw{$num} = qq($b,$m,$w);
}
close(IN);

print $bmw{1};

exit;
411デフォルトの名無しさん:2008/07/28(月) 23:27:22
>>410
ぉぉぉ
ありがとうございます。ちょっと試してみます。

やりたいことは
出席番号→氏名の取得 と
出席番号→身長 体重 BMI(この三つは可変) を引いてくる処理なのです

出席番号をキーに、これらが引けるのは、構造体ぐらいしか思いつかなくて
412デフォルトの名無しさん:2008/07/28(月) 23:39:49
>>411

氏名も引けるようにしたものです。

たとえば
$name{1} は出席番号1番の人の氏名
$bmi{2} は出席番号2番の人のBMIです
shusseki_log.cgi に該当ファイルを入れています。

#!C:/perl/bin/perl

print"Content-type:text/html\n\n";

open(IN,"shusseki_log.cgi");
while(<IN>){
my($num,$name,$b,$m,$i) = split(/,/,$_);
$bmi{$num} = qq($b,$m,$i);
$name{$num} = $name;
}
close(IN);

print "$name{2},$bmi{1}";

exit;
413デフォルトの名無しさん:2008/07/29(火) 00:07:32
>>411
>>412

すいません、BMIって肥満度のことだったんですね。
(B=身長 M=体重 I=?? ってことかと思ってました。
 ちなみに、BMIとBMWも間違えてました)
書き直しです。


#!C:/perl/bin/perl

print"Content-type:text/html\n\n";

open(IN,"shusseki_log.cgi");
while(<IN>){
my($num,$name,$tall,$height,$bmi) = split(/,/,$_);
$name{$num} = $name;
$bmi{$num} = $bmi;
}
close(IN);

print "$name{2},$bmi{1}";

exit;
414デフォルトの名無しさん:2008/07/29(火) 00:08:15
じゃあ便乗して

use Text::CSV::Simple;

my $csv_parser = Text::CSV::Simple->new({binary => 1});
$csv_parser->field_map(qw/bango name sintyo taizyu bmi/);

my @list = $csv_parser->read_file("list.csv");

#出席番号1の氏名
print $list[0]{name};
415デフォルトの名無しさん:2008/07/29(火) 00:21:19
なんで出席番号1が [0] なん?出席番号で引けてないじゃん。
416デフォルトの名無しさん:2008/07/29(火) 01:16:14
# このレスの内容をそのまま、UTF8 形式のソースファイルに保存して下さい。
# 入出力ともシフトJIS形式のファイルまたはDOS窓を想定しています。


↑これ意味がわからん。
ソースコードはUTF8で保存するの?
それとも、シフトJISで保存するの?
417デフォルトの名無しさん:2008/07/29(火) 01:17:57
質問

perlってcase文はデフォルトではないよね。
でも、なんか変なモジュールを使うと使えるんだよね。

で、そのモジュールを使うには、
CPANからそのモジュールをダウンロードしてきて、
解凍して、自分のパソコンとサーバーにアップロードして、
それからでないと使えないんだよね。
418デフォルトの名無しさん:2008/07/29(火) 01:23:48
ひょっとして、ソースコードをEUCで書くと、
DOS窓で出力するときには、必ず文字化けするの?
419デフォルトの名無しさん:2008/07/29(火) 01:34:17
テンプレにしたがって、コードを打ってみたんだが、動作がおかしい。

use utf8;
use open IO => ":encoding(cp932)";
binmode STDIN => ":encoding(cp932)";
binmode STDOUT => ":encoding(cp932)";
binmode STDERR => ":encoding(cp932)";
use Encode;


print "あなたの名前を入力してください\n";

$a=<stdin>;

chomp $a;

print "ようこそ $aさん\n";


↑これで、実行すると、
あなたの名前を入力してください
と表示される。ここはOK。
次に、suzuki、と入力して、エンターキーを押す。
これもできる。でもその次のステップで、
ようこそ、だけ、表示されて、名前が出てこない。
なんでだ?
ソースコードはutf-8で保存してます。

入出力はDOS窓です。
420デフォルトの名無しさん:2008/07/29(火) 01:35:39
そ と、$a の間に、全角スペースが入ってるパターンね。

通常だと、全角スペースの2バイト目が、
メタ文字として認識されてエラーになるっていう。


それを防ぐためにuse encodingなんちゃらという
おまじないを入れてみたんだが、それでも動かないって言う。
421デフォルトの名無しさん:2008/07/29(火) 01:38:47
use strict;
422デフォルトの名無しさん:2008/07/29(火) 01:51:02
やたー 漏れのはじめてのプログラムだよー
一回ごとに違った結果がでるよー
しかもソートされてるよー

$a=rand;
push (@a,$a);

$a=rand;
push (@a,$a);

$a=rand;
push (@a,$a);

$a=rand;
push (@a,$a);

$a=rand;
push (@a,$a);

$a=rand;
push (@a,$a);

$a=rand;
push (@a,$a);

@a=sort {$a <=> $b}@a;
@a=join ("\n",@a);

print @a,"\n";
423デフォルトの名無しさん:2008/07/29(火) 02:02:02
>>422
これ、何回かやってみて気づいたんだけど、
生成される乱数の末尾が全部5なんだ。
これって普通なの?
424デフォルトの名無しさん:2008/07/29(火) 02:04:55
>>423

僕の環境でも、末尾が5になりました。

$a= rand(300000);
のように、最大値を設定しないと、末尾は5になるんでしょうかね。
(それ以上細かい数字は扱えない、という意味で?)

425デフォルトの名無しさん:2008/07/29(火) 02:08:01
>>422

遅れましたが、初プログラムおめでとうございます。
Perlにはじめて手をつけてから、どれぐらいかかりましたか?

426デフォルトの名無しさん:2008/07/29(火) 02:13:04
>>425
1年くらいかな?
427デフォルトの名無しさん:2008/07/29(火) 02:20:09
>>426

1年ですか!
それだけの時間をかけたなら、感慨もひとしおでしょう。
今日をPerl記念日として、末代まで祝い倒してください。

僕は「掲示板の改造」から入ったので、
どれが初プログラムか、という境界がありませんでした。

(雑談ですいません)
428デフォルトの名無しさん:2008/07/29(火) 02:49:09
>>420
んなわけねーだろ。UTF-8で保存してたら全角スペースは 0xE3, 0x80, 0x80 だし、use utf8 が付いてるからこれで1文字と解釈される。
> use utf8;
<略>
> ソースコードはutf-8で保存してます。
Cygwin Perl (v5.10.0) で試してみたが、たしかに文字列の中の変数展開がおかしい。
(改行大杉なので前書き省略。UTF-8で保存)
$a = "ようこそ";
$b = "ニート";
$c = "さん";
print "0. ", "ようこそニートさん\n";
print "1. ", "$aニートさん\n";
print "2. ", "$a$bさん\n";
print "3. ", "$aニート$c\n";
print "4. ", "$a$b$c\n";
print "5. ", "ようこそ$bさん\n";
print "6. ", "ようこそ$b$c\n";
print "7. ", "ようこそニート$c\n";
(結果)
0. ようこそニートさん
1.
2. ようこそ
3. さん
4. ようこそニートさん
5. ようこそ
6. ようこそニートさん
7. ようこそニートさん
429デフォルトの名無しさん:2008/07/29(火) 02:54:46
ひでー流れだな
スルー検定実施中かよ
430デフォルトの名無しさん:2008/07/29(火) 02:59:18
print "1. ", $a,"ニートさん\n";
431デフォルトの名無しさん:2008/07/29(火) 03:46:27
いくつかのオブジェクトを持ち回る時、
それらをまとめてハッシュにしたオブジェクトを使うのはありですか?

$obj1, $obj2, $obj3があったとき、
my $obj_boss = BossClass->new($obj1, $obj2, $obj3);するような。

perlというよりオブジェクト指向のこねくり方の様な気がしますが、
教えてエロい人!
432デフォルトの名無しさん:2008/07/29(火) 08:11:14
use utf8 状態では、ソースコード中の UTF-8 な通常の文字が全て識別子として利用できます。
つまり >>428 の 1 の例では "${aニートさん}\n" とパースされます。
ダブルクォート展開したい場合は "${unko}にーと" などと書き、どこまでが変数名なのか明示する必要があります。
433デフォルトの名無しさん:2008/07/29(火) 10:23:01
>>415
じゃあ、やっぱり地道に

use Data::Dumper;

open(IN,"list.csv") or die $!;
while(<IN>){
my($num,$name,$height,$weight,$bmi) = split(/,/,$_);
$list{$num} = {name=>$name, height=>$height, weight=>$weight, bmi=>$bmi};
}
close(IN);

print "$list{1}{name}, $list{2}{bmi}\n";
print Data::Dumper->Dump( [ \%list ] , [ '*list' ] );
434デフォルトの名無しさん:2008/07/29(火) 10:39:50
>>415
入力順ソートしとく必要はあるが
ファイルが表題込みなら出席番号と一致するな
435デフォルトの名無しさん:2008/07/29(火) 11:59:10
JPerlってシフトJIS専用なの?
436デフォルトの名無しさん:2008/07/29(火) 12:01:17
>>428
utf-8で保存したつもりが、
ちゃんと保存できてなかったってこと?
437デフォルトの名無しさん:2008/07/29(火) 12:04:10
$a="あ";

print "い $a\n";

↑これだと文字化けしちゃうんですよね。
い、の直後、$aの前に、全角スペースが
入っているんですけど、これの解決法が、

(1)JPerlを使う
(2)use encodingを使う

の2つですか?
438デフォルトの名無しさん:2008/07/29(火) 12:06:40
use utf8;
use open IO => ":encoding(cp932)";
binmode STDIN => ":encoding(cp932)";
binmode STDOUT => ":encoding(cp932)";
binmode STDERR => ":encoding(cp932)"; # ※1
use Encode;


$a="あ";

print "い $a\n";

↑この書き方にして、なおかつ
ファイルを保存するときに、utf-8で
保存したら、問題なく、こちらが
意図した通りに表示されました。
439デフォルトの名無しさん:2008/07/29(火) 12:40:09
こうするとか^^;

$a="あ";
$sp="\x81\x40";

print "い$sp$a\n";
440デフォルトの名無しさん:2008/07/29(火) 13:07:20
別にこれでもよかった。。orz

$a="あ";
$sp=" ";

print "い$sp$a\n";
441デフォルトの名無しさん:2008/07/29(火) 13:53:01
ソースコードの文字コードと、
WEBに出力する文字コードと、
この2つは、必ず、同じもので、
一致させてないとだめなの?

たとえば、ソースはEUCで書いて、
それをCGIでWEB出力するときの
コードも、EUCでそろえるみたいな。


それとも、その2つは、ばらばらでもいいの?
たとえば、ソースはutf-8で書いて、
WEBのブラウザへの出力はEUCとか。
442デフォルトの名無しさん:2008/07/29(火) 14:02:09
いいよ。
443デフォルトの名無しさん:2008/07/29(火) 14:07:55
でもさ、ブラウザに出力するときに、
「EUCで出せ!」
って命令したとしても、その原文はutf-8で
かかれているわけだからさ、おかしくならない?

つまり漏れのいいたいのは、utf-8で書いた文が
EUCで出力されてしまうのではないか?ってこと。
444デフォルトの名無しさん:2008/07/29(火) 14:50:53
あ、そう。
445デフォルトの名無しさん:2008/07/29(火) 15:35:57
構成文字列が全部スペースかどうかのチェックって
正規表現でどうやるの?
ここらへんがまだわかんなくて
446デフォルトの名無しさん:2008/07/29(火) 16:01:24
hogehoge =~ /^\s.$/;

かな?
447デフォルトの名無しさん:2008/07/29(火) 16:59:16
回答者も、書く前に自分で試してみようよ
448デフォルトの名無しさん:2008/07/29(火) 17:37:33
失敬、失敬。
ピリオドを一回以上マッチだと勘違いしてた。
行頭から行末まで、空白記号一回以上マッチということで、

$hogehoge =~ /^\s+$/;

としてみた。
用意したテストパターンに対して

"ふぎゃ ほげ" --> 不一致
" " --> 一致
" a " --> 不一致
" \n hogehoge" --> 不一致
" \n " --> 一致

という結果になった。
449デフォルトの名無しさん:2008/07/29(火) 18:01:56
Infoをパーズするライブラリってありますか?
cpanでInfoで検索してもhogehoge::Infoみたいなのばっかでした
infoやmanは歴史があるから、絶対誰か作ってるとは思うのですが
450デフォルトの名無しさん:2008/07/29(火) 18:11:52
>>449
texinfoで探せば一発でそれっぽいの出たよ

Texinfo::Menus

試したことはない。
451デフォルトの名無しさん:2008/07/29(火) 18:28:18
>>449
歴史がある = PerlでParsingするのは時間がかかり過ぎてナンセンスだったので、
パターンマッチなどでインチキをしていた。
452デフォルトの名無しさん:2008/07/29(火) 18:31:39
makeinfoはtexinfoをdocbook、html、xmlに変換できるぞな
453デフォルトの名無しさん:2008/07/29(火) 20:59:49
ソースコードを例えばutf-8で書いたとして、

print "おはようございます";

とかって書いて、それをHTMLに出力するときに、

文字コードをEUCで指定しても、問題ないのですか?

自動でEUCのコードに変換?されて出力されるのですか?

文字化けとかしないのですか?
454デフォルトの名無しさん:2008/07/29(火) 21:02:28
だから何で自力で確認できる質問するんだよ
レス書いてる間にチェックできるだろ・・・そんくらい
455デフォルトの名無しさん:2008/07/29(火) 21:05:18
>>443
プログラムをEUCで書いたとする。その中に直にHTML部分を書いて、
それをプリントしてブラウザーに出力すればそのHTMLページはEUCの文字コードになる。

プログラムをEUCで書いて、その中に直にHTML部分を書いて、出力で
JISやほかの文字コードにしたいときは出力の前に文字コードを希望のものに変換し
ないといけない。プリント分の前にjcode.plなどでjisに変換すればHTMLページは
JISになる。

次にもしHTML部分を外部ひな形ファイルにして、プログラムで読みこみページ
合成してから出力する際は、もちろん、外部のHTMLファイルがどの文字コードで
保存されているかも重要。外部ファイルがJISで保存されていてプログラムはEUCで
ってなっときはもちろんプログラムで文字コード変換なり整合性をとってやらない
と出力時にちゃんぽんの文字コードのHTMLになってしまう。たとえば一部分は
EUCできちっと表示されるけどほかは文字化け、それをJISにするとEUC部分が文字化け
してほかがきれいに表示されるといったことがおきる。

また、文字コード変換で一部文字列で多重変換での文字化けという問題も発生するので
非常にやっかい。俺もこれでどつぼにはまったことが何度もあるw

456デフォルトの名無しさん:2008/07/29(火) 21:08:06
>>453
詳しくは455に書いたけど、もう一度かいておくと、

ソースがUTFでprint "おはようございます"; と書いた場合は、あくまでUTFで出力
されるのでブラウザーでは文字エンコーディングをUTFにしないと文字化けする。

ソースがUTFで出力がEUCにしたければ、
print "おはようございます"; と各前に
おはようございます の部分をEUCに変換しておかないといけない。その変換には
jcode.plが有名。

457デフォルトの名無しさん:2008/07/29(火) 21:09:46
いまさらjcodeはない
458デフォルトの名無しさん:2008/07/29(火) 21:10:16
>>445ですが
>>446-
ありがとうございました。

実は…全角スペースの方が必要でして
全角だと上手くいかなかったのです

もう一度、ご指南お願いします
459デフォルトの名無しさん:2008/07/29(火) 21:13:53
>>458
\sの意味くらい調べてみようね^^
460デフォルトの名無しさん:2008/07/29(火) 21:16:20
utf8フラグ立ってたら\sで全角スペースもマッチするだろ。

どいつもこいつもアホばっかり。>>4読めよ
461デフォルトの名無しさん:2008/07/29(火) 21:18:49
ええっと、体重等のデータベースの変数をハッシュに切り出す話が上にあるけど、
俺もこの方法はよく使うけど(リファレンスを使ったりもするけど)、いつも疑問に
思っていたことがある。

メモリの問題。
行管理のテキストデータファイルとして、仮にそのデータファイルが何メガバイト
くらいまでハッシュに切り出しても大丈夫なのか?ってところ。
仮に1行が100個のデータがあるとしてそれが1万行なら100万個の変数の数に
なるよね。

テキストファイル管理のデータベースのSQLよりも遅くなる限界はどれくらいかって話
も気になっている。ここら辺、どういう風に計算すればいいだろうか。
462デフォルトの名無しさん:2008/07/29(火) 21:19:49
仰る通りです。すみません
Shift_JISだけの条件なので
文字コードでやってみます

アホですんません
463デフォルトの名無しさん:2008/07/29(火) 21:21:09
/^( )+$/
464デフォルトの名無しさん:2008/07/29(火) 21:22:41
\(^0^)/ ---+$
465デフォルトの名無しさん:2008/07/29(火) 21:26:19
/(^o^)/ ---+$
466デフォルトの名無しさん:2008/07/29(火) 21:41:12
>>455-456

すごいよくわかりました。
(1)ソースコードの文字コード
(2)HTMLに出力するときの文字コード
(3)外部ファイルとかから読み込むときの文字コード

おおまかに言って、この3種類の文字コードを
常に意識しないとだめだということですね。

ちゃんぽんにするとめちゃくちゃになるので、
なんらかの文字コードに統一しなくてはならないと。

そのためのツールとしてjcode.pl等があると。
467デフォルトの名無しさん:2008/07/29(火) 21:44:02
で、実際問題として、自分は他人が書いた
CGIゲームを改造しているわけですが、そのCGIは、
ソースコードはEUCでかかれていて、
HTMLに出力するときは、EUCが指定されています。

それで、日本の文字化け問題を回避するために、
use encodingで、ソースコードだけはutf-8で書くように
するのですが、オリジナルのCGIのソースでは、
HTMLの出力は全部、EUCでブラウザに出すように
指定がされています。その個所は40箇所以上です。

なので、ソースコードをutf-8で書くようにした場合、
EUCで出力するように指定されている現在のソースコードを、
全部utf-8で出力するように、40箇所全部書き換えるか、あるいは
jcode.pl等で、utfをEUCに変換してから出力するように
ソースを書き換えなければいけないということでしょうか?
468デフォルトの名無しさん:2008/07/29(火) 21:44:33
それで現在のソースはEUCでかかれているわけですが、
文字化け対策はどうやっているのでしょうか?
469デフォルトの名無しさん:2008/07/29(火) 21:48:32
CGIの話ならwebprog行けと>>1に書いてあるはずだが
470デフォルトの名無しさん:2008/07/29(火) 21:50:44
>>461
そげなもん、CPUやメモリ搭載量、ハードディスクの転送速度などの諸条件で違ってくるだろ。
あと、Apacheのモジュールとしてメモリに常駐させるのか、CGIとしてリクエスト毎に毎回毎回
ロードするのかで極端に違う。
自分でテストコード書いてターゲットマシン上で走らせろ。それくらいできんでどうする?
1個のデータが仮に100バイトだとしても、100万個だと、たったの100メガバイトだろ。
あんたのCPUの空きメモリがどれくらいあるのか、それ見ればおおよそ見当はつかないか?
471デフォルトの名無しさん:2008/07/29(火) 22:08:47
普段ID付の板に居るやつはコテハンすらつけないのか。
質問者らしきレスをチョイスしてまで、後から来た人間が教えようとは思わない。

>>467のレスを読む限り、全部EUCで書けばいいじゃんとしか言えんが
472デフォルトの名無しさん:2008/07/29(火) 22:17:46
>>467
use utf8 しているのであれば、ほぼ常に出力前に変換しないと、たぶん思ったような表示になりません。
# 例外は us-ascii の範囲を超えない文字のみ扱う場合です。

面倒かもしれませんが、聞く前に一度くらいは試してみましょう。
答える人も、調べたり検証したりしている場合があります。
聞く人が何も試さないうちから正しい答えを欲しがるのは、あまりお行儀がよくありません。

そして >>469 と重なりますが、CGI の話ならば次からは webprog 板へどうぞ。
473デフォルトの名無しさん:2008/07/29(火) 22:58:37
>>462
use utf8;
use open ':encoding(shiftjis)';
use open ':std';

しておけば期待した動作になる気がします。アホがんがれ。
474デフォルトの名無しさん:2008/07/29(火) 23:07:32
しかし、このスレはいい人ばかりだ
職場で、少しでも聞こうものなら
ネチネチネチネチ嫌味と文句言われてさ

おまいらの方が大好きだ
475デフォルトの名無しさん:2008/07/29(火) 23:09:20
>>470
いや、そりゃサーバーの性能でも違うってのはわかるが、
メモリにデータを常駐させるっていう初心者より一歩深い技は
使うのでもなく、普通にテキストデータからいちいち読みこんで
処理する場合を考えたい。レンサバとかだと事実上スキッド?とか
つかえないとおもうし。

だから、そういう基本的な部分で考えるなら、単にデータ総容量が10Mバイト
くらいなら、ハッシュで100万個データを展開していてもサーバー的には
問題ないかなぁとか、単純に考えてもいいのかなぁって。

ハッシュでデータを全部変数に展開しておければ、相当に自由度が高い
処理ができるわけで。



476デフォルトの名無しさん:2008/07/29(火) 23:11:36
utf-8で出力するように
40箇所書き換えたほうが楽そうだな

だって、utf-8だったら、日本語のパターンマッチの
問題やら、2バイト文字の2バイト目がメタ文字とかぶってしまうとか、
そういう問題が発生しないんでしょ?
477デフォルトの名無しさん:2008/07/29(火) 23:14:52
内部コードをutf8にして、IOフィルタかませばいいだろうが。

jcodeとかいつの時代の遺産なんだよ。
478デフォルトの名無しさん:2008/07/29(火) 23:16:45
>>466 467
もう一つ重要なことがあって、できれば、文字変換は極力さけたいってこと。
ソースをEUC、データもEUC, HTMLパーツの外部ファイルもEUCとかに
統一しておけば、文字変換は不要だから。(制御部分での文字コードに起因する
バグはまた別だけど)

話は少しそれるが、改造をしているってことなら、いっそHTMLの出力部分を
モジュールにしたらどう?

おそらくUTF8にこだわるのは文字コードバグを考えたくないからなんだろうけど、
個人的にはまだUTFは無視しているのアドバイスはあまりできない。ぐぐれば
UTFでもよい情報のページはあったので(数ヶ月前の時点でさえ)、調べてみると
いいとおもうよ。

479デフォルトの名無しさん:2008/07/29(火) 23:17:47
>>432
な、何だと!?

use utf8;
binmode STDOUT => ":encoding(cp932)";
$aニートさん = "ようこそ";
print "$aニートさん\n";
---
ようこそ

ををを、知らなかった。こんなJavaみたいなことができるなんて……。
480デフォルトの名無しさん:2008/07/29(火) 23:19:12
JcodeはUTF対応してなかったかも。まぁ、UTFを使う時点でUTF以前の作法とは
ちがってくるよね。

>>477
まだまだjcode.plつかってますが何か?
481デフォルトの名無しさん:2008/07/29(火) 23:21:49
>>479
やっぱりUTF8だと、EUCやSJISでの作法と違ってくるなぁ。便利になってはいるんだろうけど。
個人的にあと数年しないとUTFに移行できないかも。
482デフォルトの名無しさん:2008/07/29(火) 23:22:03
今jcode.pl勧めてるやつって何なの? 10年くらい脳が止まってるの?
何で素直に組み込みの機能(Encode.pmとかencoding指定とか)使わないの?
483デフォルトの名無しさん:2008/07/29(火) 23:28:04
>>482
いやさ、最新のアパッチ環境と最新のperlで使えるとは限らんだろ。
すくなくとも俺は、jcode.plで問題ないので、あえてなれた方をつかっている。

ちなみに、このサイトはなかなかためになることが書いてあるのでおすすめの一つ。
perlメモとならんでDLすておくといいやね。

Perl 5.8.x における日本語コード変換のメモ
http://hikoboshi.org/perl/doc/encode.html
484デフォルトの名無しさん:2008/07/29(火) 23:28:52
フラグ付きutf8を頑なに拒否しているヤツがjcode.pl使うんじゃないか?
485デフォルトの名無しさん:2008/07/29(火) 23:34:12
>>483
お前が使うのは勝手だが人に勧めるようなもんじゃないだろ。
486デフォルトの名無しさん:2008/07/29(火) 23:38:49
メンテナンスされているものの、思想自体が10年以上前のPerlで
古いのなんのって話題は不毛な争いだと思うんだが・・・

日本の宇宙開発だって数年前までPC88に支えられてたんだしさw
487デフォルトの名無しさん:2008/07/30(水) 00:13:39
>>482
この話の流れで jcode.pl って言ってるヤツは、
EUC コードで書かれたCGIゲームを改造しようとしてる>>273なんだけども、
コイツが他人に jcode.pl を薦めてるんじゃなくて、
どこかの古〜い解説サイトか古〜い解説本を読んで
じぶんなりに jcode.pl を使う、という結論を出しちゃったみたいだね。
で、まわりのみんなが必死で utf8 にしろと言ってるが、聞く耳持たないみたい。

そもそも、EUC のままでいいじゃないか?せっかく動いてるんだから。
無理して utf8 に書き換える必要は無いよ。
どうしても EUC じゃ困る。シフトJISで動かしたい、って時だけ
use utf8 すればいいんだよ。
488デフォルトの名無しさん:2008/07/30(水) 00:16:34
jcode.plの時代って、「テキストを一行以上同時に読み込んだらぶっ殺す」な時代だよな……
489デフォルトの名無しさん:2008/07/30(水) 00:26:11
Perlのリリースは20年以上前か
490デフォルトの名無しさん:2008/07/30(水) 00:33:26
>>487
意味不明、kwsk
491デフォルトの名無しさん:2008/07/30(水) 01:07:43
>>482
今読んでる本

平成10年8月25日 初版 第1刷発行
492デフォルトの名無しさん:2008/07/30(水) 01:12:03
>>487

このスレにも
「utfにしろよ派」と
「utfなんかに移行できないよ派」
と、2つの派閥があって、困ってるんですよ。

どっちかに統一しろやウンコっていう。

もっと3年くらい経験積んだら自分で
判断できるけど、まだ入門書読んでる段階ですから。
493デフォルトの名無しさん:2008/07/30(水) 01:14:38
>>487

>そもそも、EUC のままでいいじゃないか?せっかく動いてるんだから。
>無理して utf8 に書き換える必要は無いよ。

という話ですが、全角スペースのあとに
文字列おくと、勝手に@だと判断して
「そんな配列ねーよ」ってエラーを出してきて困ると
いうのと、正規表現でパターンマッチで、
マッチしないはずの文字にマッチしたりとか、
マッチするはずの文字にマッチしたりとか、
困った問題が起こるので、それを回避するための
措置として、例えばJPerlを使うとか、あるいは
utfにするとかを検討している段階なのです。
494デフォルトの名無しさん:2008/07/30(水) 01:18:13
print " a\n";

例えばこれ↑ですが、aの前に全角スペースが入ってます。
EUCでこれを保存して実行すると、文字化けになります。
これを回避するのに、いまのところ、JPerlを使うか、あるいは
utf-8にするか、しか、回避方法がないのです。
495デフォルトの名無しさん:2008/07/30(水) 01:23:36
>>494
それ、まだやってるの?もうとっくに解決したんじゃなかったのか?
496デフォルトの名無しさん:2008/07/30(水) 01:31:00
ちゃんとレス全部読んだのか??
俺は読んでないけど。
497デフォルトの名無しさん:2008/07/30(水) 01:36:16
よくわからないんなら何も考えずにutf8で書いてuse utf8しておけばいい
498デフォルトの名無しさん:2008/07/30(水) 01:41:34
>>494
これだけたくさん、大勢の人がキミのためにレスつけてくれてるのに
読んでないだろ?

いいか、話をまとめるとだな、
全角の空白は
2020 (JISコード)
A1A1 (EUCコード)
8140 (Shift-JIS コード) ←問題あり
このうち、Shift-JIS の後半の 40 が ASCIIコードの @ とかぶる。
print " a\n"; は、
print "\x81@a\n"; と書くのと同じ。
@a が配列と解釈されてしまう。それでエラーが出てるんだ。
(perl のコードの最初に use warnings; 付けてるか?)

で、これを解決するには
・perl のコードを Shift-JIS で書かない。これ常識。EUC 使え。
・utf8 で書いて >>4 を参考に改造しろ。
これのどっちかだ。
499デフォルトの名無しさん:2008/07/30(水) 01:51:41
>>498
しかしEUCで実行すると

。。a

になってしまうんですよ。
これって文字化けですよね。
500デフォルトの名無しさん:2008/07/30(水) 01:52:41
さっきから文字化け文字化けってなんとかの一つ覚えみたいに一体何なんだよ。
全くperl関係ないだろうが。
501デフォルトの名無しさん:2008/07/30(水) 01:53:27
>>492
最早、歴史的事情以外にUTF-8に移行しない理由なんか無い。
>>493
JPerlなんか使うな。
>>494
それは「EUCだから文字化けしてる」のではなくて、単に端末の文字コードと合ってないだけだ。
端末とプロセスの文字コードが一致してきゃ化けて当たり前。

とにかく、全部UTF-8で書け。入出力は必要に応じてIOフィルタ等で変換しろ。それ以外の余計なことはするな。
502デフォルトの名無しさん:2008/07/30(水) 01:53:38
>>499
自己レス

出力をDOSプロンプトでなくて
ブラウザにして、
ブラウザの文字コードをEUCにしたら
文字化けしないでちゃんと表示されました。
503デフォルトの名無しさん:2008/07/30(水) 01:55:51
なんか、この話題ループしてるな。
EUCの人、" a"は変数展開してるから、変数展開しない形に書き直しなさい。
ローカルコード含んだ文字列を変数展開部で使用するのは、重大なマナー違反だ。
改造以前にバグフィックスの問題だ。
504デフォルトの名無しさん:2008/07/30(水) 01:56:09
ひょっとして、DOSプロンプトに出力するときって
全部強制的にシフトJISになってるの?

だとすると、EUCでコード書いて、それをDOSプロンプトに
出力すると文字化けになるの?

だとしたら、EUCで書くときは、出力先を
ブラウザにして、ブラウザの文字コードをEUCにするけど。
505デフォルトの名無しさん:2008/07/30(水) 01:56:43
>>504
これまでの説明読んでるのか?
506デフォルトの名無しさん:2008/07/30(水) 01:59:52
この馬鹿は日本語理解できないの?それとも回答者からかってるの?
507デフォルトの名無しさん:2008/07/30(水) 02:04:27
ここ1週間、絶句するような質問ばっかだ・・・
508デフォルトの名無しさん:2008/07/30(水) 02:09:10
微妙な釣りと煽りが多いな
コード・データ・説明が揃ってるのにもかかわらず
さらに質問してくる意味が判らん
509デフォルトの名無しさん:2008/07/30(水) 02:23:51
次の質問

$w = 'おはようございます';
$w =~ tr/あ-お/か-こ/;
print $w,"\n";

↑これをやったら、

Invalid range "?αソソセォ-?αソソセ、" in transliteration operator at f.pl line 2.

といわれました。
自分の予想では、おがこに、いがきに、変換される
はずだったのですが。
コードはEUCで書きました。
510デフォルトの名無しさん:2008/07/30(水) 02:25:56
>>509
言いたいことは山ほどあるが
せめてコテハンをつけてくれ
話の流れすらわからん
511デフォルトの名無しさん:2008/07/30(水) 02:26:20
>>508
目の見えない人に、象の説明をするのと同じです。
512デフォルトの名無しさん:2008/07/30(水) 02:26:52
>>510
ではコテハン募集です
513デフォルトの名無しさん:2008/07/30(水) 02:44:10
>>512
「クリックうんこ」
514デフォルトの名無しさん:2008/07/30(水) 06:26:54
>>512
ソソセォ-
515デフォルトの名無しさん:2008/07/30(水) 11:20:00
use strict;

my $a;

$a=<stdin>;

print $a;


↑これを、出力先をブラウザにしたら、
$a=<stdin>;
この行の処理の、キーボードからの入力を受け付ける、
この部分が実行できません。

出力先をDOSプロンプトにしたら、できますが、
文字コードがシフトJISになります。
それだと文字化けするので、文字コードをEUCにしたいわけですが、
EUCにするためにはブラウザに出力する必要があります。

どうしたらいいですか?

文字化けを防ぐ
なおかつ
キーボードからの入力も受け付ける
516デフォルトの名無しさん:2008/07/30(水) 12:24:39
「IE+壺」で2chの過去スレを保存するPerlスクリプトを作成しようとしています。

閲覧だけなら
system("C:/Program Files/Internet Explorer/iexplore.exe", http://pc11.2ch.net/test/read.cgi/win/1152544955/);
で見られますが、保存するにはどうすれば良いでしょうか?

※初めにフリーソフトの巡集を使ったのですが、過去ログ倉庫に入っているスレは保存できなかったので、
Perlでどうにかならないか、と思いました。
http://www.vector.co.jp/soft/win95/net/se314781.html
517デフォルトの名無しさん:2008/07/30(水) 12:32:13
この人は、この人に勝てる
みたいな対応表をハッシュとかで格納したいのですが、どういうやりかたありますか?

1番 ○○ 2,3.4
2番 ▲▲ 3,4
3番 □□ 4
4番 田中   (無し。全員に負ける)

みたいなのです
518デフォルトの名無しさん:2008/07/30(水) 13:28:56
>>515
encode

つか >>4 を読め。ちゃんと書いてあるだろ?
519デフォルトの名無しさん:2008/07/30(水) 13:48:10
>>516
Perl云々以前に仕様くらい目を通せ
http://info.2ch.net/wiki/index.php?monazilla%2Fdevelop
520デフォルトの名無しさん:2008/07/30(水) 13:49:22
>>517

%表 = {
     1番 => { 2番 => true, 3番=> true, 4番=>true },
     2番 => { 1番 => false, 3番=> true, 4番=>true },
     3番 => { 2番 => false, 1番=> false, 4番=>true },
     4番 => { 2番 => false, 3番=> false, 1番=>false },
};

man perldsc に記載されている "HASHES OF HASHES"を参考にしてみてはいかが?
521デフォルトの名無しさん:2008/07/30(水) 14:51:57
>>520
ありがとうございます。見てみます
番号と名前も対応させたいのですが、何も重い浮かばず
522デフォルトの名無しさん:2008/07/30(水) 15:16:37
>>521
> 番号と名前も対応させたいのですが、何も重い浮かばず

っ[ハッシュ]
523デフォルトの名無しさん:2008/07/30(水) 15:26:26
番号から名前を引きたいのか、 %番号表 = { 番号1 => "名前1", 番号2 => "名前2",,, };
名前から番号を引きたいのか、%名簿 = { 名前1=> "番号1", 名前2 => "番号2",,, };
はたまた、{ name=>"名前", id=>"番号" } みたいな感じにするのか。

やりたいことに合わせていろいろ試してみろよ
524デフォルトの名無しさん:2008/07/30(水) 18:06:22
ハッシュとリファレンスって、初心者の頃はまったく理解できなかった。
ハッシュは知らず知らずつかっていたんだけど、リファレンスは。

理解できるようになったのは、メモリのアドレス(のようなもの)で
Cでいうとポインタに相当する
という説明を読んだときだった。
525デフォルトの名無しさん:2008/07/30(水) 19:50:52
>>509
これ、誰かわかる?
526デフォルトの名無しさん:2008/07/30(水) 19:51:35
>>524
Javaはポインター無いよ。
だから、たぶんPerlも、ポインター無しでも
コード組めるはずだよ
527デフォルトの名無しさん:2008/07/30(水) 19:52:13
>>525
>>4よめよ糞が。
528デフォルトの名無しさん:2008/07/30(水) 19:52:58
>>526
529デフォルトの名無しさん:2008/07/30(水) 20:04:38
>>526
?
530デフォルトの名無しさん:2008/07/30(水) 22:43:19
ポインタに相当するなら、文字列の先頭から10バイト目を指してみやがれ!
531デフォルトの名無しさん:2008/07/30(水) 22:47:14
??? ??? ? ???? ??? ??? ?, ?? ???? ? ????? ???!!
532デフォルトの名無しさん:2008/07/30(水) 22:53:54
>>530
断る!
533デフォルトの名無しさん:2008/07/30(水) 23:00:34
なにげに523の書き込みって、そんじょそこらのハッシュの説明よりいいんではないか?
数ページから数十ページさくところをさくっと3行におさまっている。


534デフォルトの名無しさん:2008/07/31(木) 00:04:14

  _  ∩  知ってるが!
( ゚∀゚)彡 おまえの態度が!
 ⊂彡   気に入らない!
535デフォルトの名無しさん:2008/07/31(木) 00:39:46
>>521-523 こんなんどう?

insert into Person (Id,Name) values ('1', '○○');
insert into Person (Id,Name) values ('2', '▲▲');
insert into Person (Id,Name) values ('3', '□□');
insert into Person (Id,Name) values ('4', '田中');

番号から引きたい時、
select Name from Person where Id='2';

名前から引きたい時、
select Id from Person where Name='田中';
536デフォルトの名無しさん:2008/07/31(木) 01:10:09
>>533
やり方書いてあるだけじゃないか。
その意味書いたら数ページ分くらい必要だろ。
537デフォルトの名無しさん:2008/07/31(木) 01:51:33
>>536
まぁ、たしかに。だけど、すごくいい例が3行まとまっているよね。
4と5行目にリファレンスをつかったデータの例をのせるといいよね。

で、その合計5行の解説に5ページくらいあればいいんじゃないか。
ごちゃごちゃ書いていても頭がオーバーフローするだけだしなぁ。
538デフォルトの名無しさん:2008/07/31(木) 04:18:09
>>528
レファレンスなんて使わないでも
まともなプログラムを組めるはずという意味
539デフォルトの名無しさん:2008/07/31(木) 04:22:30
>>518
すごい。
言われたとおりにやったら、できたよ。
540デフォルトの名無しさん:2008/07/31(木) 04:23:06
>>527
すごい。
言われたとおりにやったら、できたよ。
541デフォルトの名無しさん:2008/07/31(木) 04:24:33
CGIの勉強はあとまわしにして、
先に3ヶ月くらい、DOSプロンプトでの
やり方だけ学んだ方がいいのかな?

CGIは難しいらしくて、ここの住民でも
答えられないことが多いみたいだし。
542デフォルトの名無しさん:2008/07/31(木) 04:38:13
Perl言語 プログラミングレッスン [入門編] 結城浩

を入手した。
今から読むからな。
543デフォルトの名無しさん:2008/07/31(木) 04:45:12
ブードゥープログラミングの真髄を見た。
544デフォルトの名無しさん:2008/07/31(木) 06:54:19
>>540
あーでも、
これと同じことを、もしEUCでやろうとしたら、
実現は不可能ってことなの?
545デフォルトの名無しさん:2008/07/31(木) 06:54:58
質問

redoって普通使うの?
546デフォルトの名無しさん:2008/07/31(木) 07:04:35
print "\a";

↑これで音がでないんだが、なにか間違ってる?
547デフォルトの名無しさん:2008/07/31(木) 07:45:12
>>541
「CGIの質問はWebProgに行け」ってんでスルーしてるだけだろ…

スキルのある住人は、最近のこのスレのぐだぐだっぷりを見て
ROMに徹してるだろうしな。

548デフォルトの名無しさん:2008/07/31(木) 07:52:25
>>546
print "\x07";
549デフォルトの名無しさん:2008/07/31(木) 08:04:17
すごい。
言われたとおりにやったら、できたよ。
550デフォルトの名無しさん:2008/07/31(木) 08:28:04
>>548
だめだ
うちの環境では鳴らない。
なんで?
551デフォルトの名無しさん:2008/07/31(木) 08:45:19
>524
むしろ、「Cのポインタのようなもの」という説明のせいで、全く理解できなかった。

Cにおけるポインタは、初心者の躓きやすい壁とは言われてるけど
自分はそんなことなかったから大丈夫だと思ってたんだが。
552550:2008/07/31(木) 09:10:21
すみません、スピーカーのスイッチ切ってました
553デフォルトの名無しさん:2008/07/31(木) 09:55:07
使ってるのはヘッドフォンだよ
554デフォルトの名無しさん:2008/07/31(木) 09:56:03
use warnings;
use strict;

use utf8;
use open IO => ":encoding(cp932)";
binmode STDIN => ":encoding(cp932)";
binmode STDOUT => ":encoding(cp932)";
binmode STDERR => ":encoding(cp932)";
use Encode;


my $a=1;

until ($a>10){
print "藁\n";
$a=$a+1;
}

↑オレ様のプログラムの第二段が完成!
今回はループを使ってみました。
555デフォルトの名無しさん:2008/07/31(木) 09:59:12
音がでないのは、まじで理由がわからんよ。
DOSプロンプトへの出力だとだめなの?
556デフォルトの名無しさん:2008/07/31(木) 10:08:40
まとめ OSがWindowsの場合

(1)
ActivePerlをダウンロードする。
バージョンは5.8.
(5.1が最適とかいう意見があっても
トラップなので聞いてはいけない)

(2)
エディタは「Perlをはじめよう」を使う

(3)
文字コードはutf-8で

(4)
ソースコードの頭に>>4をコピペする

(5)
入出力はDOSプロンプトを使う

(6)
ソースコードはutf-8で保存する

(7)
CGIの勉強はあとまわしにする

(8)
EUC派とUTF派が派閥争いをしている
557デフォルトの名無しさん:2008/07/31(木) 11:14:24
my %a = ();
$a{$ika}->{hoge} = $hoge;
$a{$ika}->{hogehoge} = qq(@hogehoge);

みたいな使い方が出来てるんだけど
大丈夫かな…
558デフォルトの名無しさん:2008/07/31(木) 12:17:41
大丈夫

何もないところをあたかもリファレンスがあるかのようにデリファレンスすると、
そこにリファレンスができて、さらに指している実体までできる。
559デフォルトの名無しさん:2008/07/31(木) 12:30:35
>>558
つまり
$a{$ika}->{hoge} は宣言もされていないから、存在もしてないけど
無理やり値いれてしまったから、値が入ってるってことですよね

%a( ika => {hoge => $hoge} )
みたいな状況ですか?

頭が整理されていないまま組んでるので
どういう状況になってしまっているのか教えて下しあ
560デフォルトの名無しさん:2008/07/31(木) 12:46:06
>>555
550で解決したんじゃなかったのか?

DOSプロンプトへの出力でも、ウチではちゃんとビープ音が鳴るぜ。(\a,\x07ともに)
もともとの音量が小さすぎるのか、あるいはサウンドカード(ドライバ)の設定とかで、
ビープ音だけ出ないようになってるとか。
ウチでは逆で、サウンドドライバの設定でwaveとかの音をどんなに無効に設定しても、
ビープ音だけは切ることが出来なかったマシン(マザーボード?)があった。

これ以上はスレ違いになっちまうけど、PCのマニュアルとかドライバソフトの設定とかHelpをみてみたら?
561デフォルトの名無しさん:2008/07/31(木) 13:00:45
>>559
> つまり
> $a{$ika}->{hoge} は宣言もされていないから、存在もしてないけど
> 無理やり値いれてしまったから、値が入ってるってことですよね

ちがう。アクセスされたので自動で存在しはじめたってことだ。

「宣言とか何それ。食べられるの?」とPerlちゃんは言っている。

562デフォルトの名無しさん:2008/07/31(木) 15:15:25
夏休み臭がする
563デフォルトの名無しさん:2008/07/31(木) 15:35:56
>>562は毎日が夏休みの人
564デフォルトの名無しさん:2008/07/31(木) 16:27:46
うん、毎日楽しいお^^
565デフォルトの名無しさん:2008/07/31(木) 16:31:37
>>557 動作するけど、警告は出るよ。未定義値をリファレンスとみなしてデリファレンスした上、存在しないところに代入してるからね。普通そんな書き方しません。

$a{$ika} = {
hoge => $hoge,
hogehoge => qq(@hogehoge),
};
とか。
%a = (
$ika => {
 hoge => $hoge,
 hogehoge => qq(@hogehoge),
},
);
とか書きます。

$a{$ika}をいきなりハッシュとして扱いたい場合、
まず最初に
$a{$ika} = {};
と記述して生成しておくと(これは宣言ではありません)次から

$a{$ika}->{hoge} = $hoge;
$a{$ika}->{hogehoge} = qq(@hogehoge);
こうゆうふうに書いたり、

%{ $a{$ika} } = (
hoge => $hoge,
hogehoge => qq(@hogehoge),
);
こゆうふうに書いたりできます。

>アクセスされたので自動で存在しはじめたってことだ
違いますよ。「アクセスできなかった」からしょうがなく警告つきでく生成されただけです。
566デフォルトの名無しさん:2008/07/31(木) 16:54:32
>>565
警告というのが具体的に何をさすのかわからないのだけれど、

Use of uninitialized value $ika in hash element

なら、未定義値をハッシュの添字にしてることについての警告
なので、$a{$ika} = {} でも$ikaが未定義ならやっぱり出ますよ。

% perl -w -e '$a{$ika} = {}'
Name "main::a" used only once: possible typo at -e line 1.
Name "main::ika" used only once: possible typo at -e line 1.
Use of uninitialized value $ika in hash element at -e line 1.

それに>>557のコード断片は$ikaや$hogeや@hogehogeには適当な
値が入ってると思うべきだろ。値が入っていれば警告は出ません。

% perl -w -e '$ika = 10; $a{$ika}->{hoge} = 1'
Name "main::a" used only once: possible typo at -e line 1.

存在しないところへの代入の警告ってあったっけ??
567デフォルトの名無しさん:2008/07/31(木) 17:14:03
突っ込みを入れようかと思ったが先にやられた…
>>557
余裕。変数群がきちんと定義されていれば普通に使う。
同じ事をスライスで書いたりもする。気にすんな。
@{$a{$ika}}{qw(hoge hogehoge)} = ( $hoge, qq(@hogehoge) ) ;

ただ、視認性に優れた書き方と言うのもあって、その点では
一考の余地はあると考えた方が良い。
>>566
>存在しないところへの代入の警告ってあったっけ??
「存在しない変数とかへの代入」って意味であれば use strict 。
「undefをkeyにしたhashへの値の代入」って意味であれば、私は知らない。
と言うか、これは警告出す意味が無い。
erl -MData::Dumper -Mstrict -Mwarnings -e 'my %a = ( undef => undef ) ; $a{undef} = q{foo} ;print Dumper \%a'
568デフォルトの名無しさん:2008/07/31(木) 17:18:30
% perl -MData::Dumper -Mstrict -Mwarnings -e 'my %a ; $a{undef} = q{foo} ;print Dumper \%a'
(コピペ忘れ。567のワンライナは丁寧に書いただけ)
569565:2008/07/31(木) 17:20:10
perl -w
use strict;

my %a;
my $ika = "aaa";
my $hoge = "aaa";
my @hogehoge = ( "aaa", "bbb");

$a{$ika}->{hoge} = $hoge;
$a{$ika}->{hogehoge} = qq(@hogehoge);

何の警告も出なかった。
正直すまんかった
570567:2008/07/31(木) 17:23:16
567,568のワンライナ部分の説明はウソ。スレ汚しすまん。
erl -MData::Dumper -Mstrict -Mwarnings -e 'my %a ;my $b ; $a{$b} = q{foo} ;print Dumper \%a'
きちんと警告が出る。
推敲する様に>俺
571デフォルトの名無しさん:2008/07/31(木) 17:38:11
なんかすごく怖くなってきた。
572デフォルトの名無しさん:2008/07/31(木) 17:44:25
むしろこのスレらしくなってきた
573デフォルトの名無しさん:2008/07/31(木) 17:54:02
しょせんこの世はウソだらけさ。
574デフォルトの名無しさん:2008/07/31(木) 21:27:27
>>560
550はニセモノ
575デフォルトの名無しさん:2008/07/31(木) 21:28:40
>>556の続き

まとめその2

(9)
jcode.pl派と、jcode.pm派と、Encode派が
それぞれ派閥争いをしている。
576デフォルトの名無しさん:2008/07/31(木) 21:32:16
Perlって、なぜかcase文ないんだよね。
それで、case使いたいときは、わざわざ
CPANからモジュールをダウンロードしてきて、
解凍して展開してインストールして、さらに
CPAN::CASE
とかって奇妙な呪文唱えないと使えないんだよね。

この理解であってる?
577デフォルトの名無しさん:2008/07/31(木) 21:33:43
テンプレに use warnings; も追加してほしい。
動かん、うまくいかん、って言ってるヤツが少しは減ると思う。
578デフォルトの名無しさん:2008/07/31(木) 21:37:49
(1)
requierとuseってどう違うの?

(2)
(1)の質問って、この前もしたっけ?

(3)
requireは、Cのincludeと同じ?
自分で作った別ファイルのソースが
ソースの頭の部分に挿入されるの?
579デフォルトの名無しさん:2008/07/31(木) 21:38:28
さーて今日は、どんなプログラムを書こうかなー
予定では、ワロス草のプログラムを書くつもりです。
580デフォルトの名無しさん:2008/07/31(木) 21:46:49
なにその ワロス草、むちゃくちゃ興味あるんだが。
581デフォルトの名無しさん:2008/07/31(木) 21:48:07
>>576
Perl5.10なら使えるよ。
あと、use Switch するとか。
582デフォルトの名無しさん:2008/07/31(木) 22:25:49
>>575
Unicode::Japanese 派も入れといて。
ActivePerlだと、これがベストな気がする。
583デフォルトの名無しさん:2008/07/31(木) 23:17:38
8月、9月、10月の3ヶ月間は、
CGIは無視して、コンソールレベルの
プログラムだけ勉強するつもりです
584デフォルトの名無しさん:2008/07/31(木) 23:18:10
>>581
5.1なら使えるけど、
5.8なら無理って意味?

5.1以上なら、使えるって意味?
585デフォルトの名無しさん:2008/07/31(木) 23:25:04
>>584
5.8ならuse Switchで
5.10なら言語仕様でサポート
5.8より下は使えない
586デフォルトの名無しさん:2008/07/31(木) 23:25:58
>>578
http://perldoc.jp/docs/perl/5.6.1/perlfaq8.pod

What's the difference between require and use?
の項を読んで下さい。

あまりに典型的な FAQ なので「>>2 嫁」で済ませてしかるべきなんだけど、なんだかかわいそうな子なので少しやさしくしてあげる。
587デフォルトの名無しさん:2008/07/31(木) 23:27:36
マックでperlやってる俺は、ブラウザとアパッチとエディタとHTMLソフトと
フォトショップでサイト構築しているんだけど、コンソールとかはほとんど
つかわね〜。ぬるいユーザーっす。
だけどマックソフト開発のXCODEがperlもつかえるので、資産は無駄に
ならないとおもってます。
588デフォルトの名無しさん:2008/07/31(木) 23:33:25
>>587
OSXは”堅牢な”UNIXファミリーの一派だよ
ターミナルを使えると、世界が広がりんぐ
589デフォルトの名無しさん:2008/08/01(金) 00:00:47
>>588
ターミナル(コンソール)は、FTPソフトをつかわずにCGIファイルのパーミッションを
変更することくらいにしか普段つかわないんだけど、なんかきっかけになるような
使い方ってないもんですかね。やっぱりmanとか打ち込んで説明をあさることから
始めるべきか。

あとは自鯖のSSLを設定するときにコンソールでいろいろと呪文(にしかみえねぇ〜)
を唱えたくらいかなぁ。


590デフォルトの名無しさん:2008/08/01(金) 00:00:49
独自のOSを作ろうとして失敗し、仕方なくUNIXファミリーの仲間入りしたんやろ?
591デフォルトの名無しさん:2008/08/01(金) 00:01:34
>>584
5.1≠5.10
Perlの最新は5.10で、2つ目の数字は「十」だ。
592デフォルトの名無しさん:2008/08/01(金) 00:05:36
>>589
perlは元々awkやシェルスクリプトのように手軽に使える
コンピュータを自動化させるために開発されたもんだから、AppleScriptのような使い勝手でいいんじゃない?
ファイル名の連番リネームとか、エロ画像の自動回収とか、
いちいち専用ソフトを入れなくても、基本コマンド+Perlでかなり遊べる。

>>590
いや、流行モノ好きのジョブズがアップルに持ち込んだんじゃね。
nextstep辺りの話を読もう。
593デフォルトの名無しさん:2008/08/01(金) 00:07:45
>>589
大量のファイルに対してちょっとひねった一括処理をやるとき便利。
find と xargs を覚えると世界が変わる。
594デフォルトの名無しさん:2008/08/01(金) 01:08:21
>>589
Perlスクリプトを、CGIじゃなくて、直接実行することはないの?
595デフォルトの名無しさん:2008/08/01(金) 02:11:39
>>592
そういう使い方ができるんだ。アップルスクリプトでバッチ処理みたいな
ことできるといいなぁって思うことは多いけど、ファイル名の処理とかで
壁にぶつかってあきらめるちゃうんだよね。

エロ画像の自動収集じゃなくエロトレントファイルの地引網ができればって
思うけど。俺にはハードルたかそう。

>>593
チェックしてみるね。そこを第一歩にできるといいかな。
ってチェックしたけど xargsは応用的段階だね(爆)

>>594
perlでつくるのはwebページ生成システムなんで、コンソールを
使うときはそうだエラーコードをみるときにも使うね。わすれてた。
でも、自分の作っているのは必ず出力がHTMLなのでHTMLコード自体
をみても意味がないから、結局、サファリのブラウザでチェックしている。
でみてくれ調整の時だけwindowでもチェック。


596デフォルトの名無しさん:2008/08/01(金) 07:12:41
>>591
何言ってるの?
最新版は5.8でしょ?
597デフォルトの名無しさん:2008/08/01(金) 07:13:12
質問

JPerlって、現状、メンテナンスしてる人がいないの?
598デフォルトの名無しさん:2008/08/01(金) 10:07:28
JPerl厨うぜえwww
599デフォルトの名無しさん:2008/08/01(金) 10:18:25
夏休みすぎる

>>594
直接というのが何を指すのか分かりませんが、
ここがネットワークプログラミングのスレじゃないのは明白です。

>>596
5.10.0.1003
5.8に見えましたか。そうでしたか。

>>597
よっぽど変な人が現れない限りは。
600デフォルトの名無しさん:2008/08/01(金) 10:27:33
> >>594
> 直接というのが何を指すのか分かりませんが、
> ここがネットワークプログラミングのスレじゃないのは明白です。

書かなかったことにしといてください。
俺の頭が夏休みでした
601デフォルトの名無しさん:2008/08/01(金) 17:46:02
英数文字で構成された文字列内から""で囲まれた部分を検索し、
下記のような16進数表記にした「文字列」に置換したい場合、
どのようにしたらいいでしょうか?

【文字列A】
this is test of "Hello,World!"

  ↓変換

【文字列A'】
this is test of 0x48,0x65,0x6C,0x6C,0x6F,0x2C,0x77,0x6F,0x72,0x6C,0x64,0x21

ご多忙の中、誠に失礼いたしますが、ご教授お願いします。
602デフォルトの名無しさん:2008/08/01(金) 18:01:28
sub transform {
    my ($str) = @_;
    $str =~ s/"([^"]*)"/join(",",map{sprintf"0x%X",$_}unpack"C*",$1)/eg;
    $str;
}
print transform 'this is test of "Hello, World!"'
603デフォルトの名無しさん:2008/08/01(金) 18:05:50
>>602
迅速かつ的確なご回答をありがとうございます。
参考になりました。
604デフォルトの名無しさん:2008/08/01(金) 19:36:40
>>602
sprintf"0x%X",$_じゃなくてsprintf"0x%02X",$_の方が親切じゃね
605デフォルトの名無しさん:2008/08/01(金) 23:11:47
>>602
サブルーチンの呼び出しって、&つけなくていいの?

それとも、これがウワサに聞いた、あの
「無名サブルーチン」ってやつなのかな。
606デフォルトの名無しさん:2008/08/01(金) 23:12:19
Perlの最新版って5.8だよね?
607デフォルトの名無しさん:2008/08/01(金) 23:21:12
結局caseは5.8で使えるの?
608デフォルトの名無しさん:2008/08/01(金) 23:43:07
>>602
こういうのすぽぽぽ〜んって、で余裕で頭ん中からでてくるの?
それともやっぱり初心者の頃は思いもつかなかったけど、経験を積んだ結果
すぽぽぽ〜んってなるの?
609デフォルトの名無しさん:2008/08/01(金) 23:56:03
>>608
とりあえず、すぽぽぽぽーんって出てきたものをマニュアルで確認しながら組み合わせてやるの。
必ずしもperlの全てを覚えておく必要なんてないよ。
610デフォルトの名無しさん:2008/08/02(土) 00:01:43
use warnings;
use strict;

my $a=1;

&aaa;

sub aaa {
if ($a<10){

print $a;
$a=$a+1;
&aaa;
}
}

オレ様のプログラムの第三段が完成!
今回は再帰を使ってみました。

再帰のアルゴリズム考えるの楽しいね!
611デフォルトの名無しさん:2008/08/02(土) 00:08:21
use warnings;
use strict;

$|=1;

my $a=1;

&aaa;

sub aaa {
if ($a<10){

print $a;
$a=$a+1;

sleep (1);

&aaa;

}
}

print "\n";


↑今度は、数字がゆっくり出るようにしてみたよ!
でも使用中はCPU使用率が100%になるのが困る
どうにかならないかな?
612デフォルトの名無しさん:2008/08/02(土) 00:45:20
>>606
だから5.10だってば。(釣りなのかな……)

http://www.perl.org/
> Current Release: 5.10.0

http://www.cpan.org/src/README.html
> The first releases in each branch
>      Released
> 5.10 December 2007
> 5.8  July 2002
> 5.6  March 2000
> 5.5  July 1998
> 5.4  May 1997
613デフォルトの名無しさん:2008/08/02(土) 00:45:22
最近perl的イケメンを目指してuse strictを使い始めたのですが、どなたか力をお貸し下さいorz

↓メインスクリプト(main.pl)
------------------------------
#!perl
use strict;
require("x.ini");
print "X = $x\n";
------------------------------
↓設定ファイル(x.ini)
----------------------
our $x = "XXX";
(・・・その他グローバル変数いっぱい)
----------------------

上のソースは調べてる最中に見つけたソースを一部お借りしていますが、
要は大量のグローバル変数を別ファイルで定義して
それを読み込んで使う・・という事をやりたがっています。
が、上記は以下の様なエラーが出てしまい、途方にくれています。

Global symbol "$x" requires explicit package name at main.pl line 4.

BEGIN等も試してみたのですが、インポートエラーの様な物が発生してどうにも上手く行きません。。
「use strictを使用しながら大量のグローバル変数を別ファイルに定義し、参照させる」という事を綺麗に行う方法はありますでしょうか?
614デフォルトの名無しさん:2008/08/02(土) 01:23:22
>>613
変態!!
615デフォルトの名無しさん:2008/08/02(土) 02:14:02
「Perlベストプラクティス」では&付き呼び出しは御法度とあるけど、
ラッパサブルーチンでも控えた方が作法として良いですか?

sub wrapper {
    my ($foo, $bar, $baz) = @_;
    # any process...
    &wrapped; # wrapped($foo, $bar, $baz)と等価
}
616デフォルトの名無しさん:2008/08/02(土) 02:22:45
>>612
意味がわからん。
5.1と、5.8では、
5.8のほうが数字がでかいのだが。

数学板の連中にきいたほうがいいのかな?
617デフォルトの名無しさん:2008/08/02(土) 02:23:59
ourって何?
618デフォルトの名無しさん:2008/08/02(土) 02:32:00
今ようやくわかった。
5.1じゃなくて、5.10なのな。

じゃあ、自分が使ってるActivePerlのバージョンは、いくつ?
619デフォルトの名無しさん:2008/08/02(土) 02:35:00
今、試してみたら、自分のPerlのバージョンは5.8だった。
てことは、古いバージョンだよね?

これって最新版にできるのかな?
620デフォルトの名無しさん:2008/08/02(土) 02:37:36
今調べてみたら、ActivePerlの5.10はダウンロードできるみたいだ。
これって、いったん5.8をアンインストールしてから
5.10を入れなおす、というふうにしないとまずいの?
621デフォルトの名無しさん:2008/08/02(土) 03:28:31
質問

5.10をサポートしたPerlの入門本は、何冊出てるの?
622デフォルトの名無しさん:2008/08/02(土) 03:48:25
アメリカでPerl6の本がもう出てるんだが、
どういうことだ?

http://www.amazon.com/Beginning-Perl-Novice-Professional/dp/1590598334/
623デフォルトの名無しさん:2008/08/02(土) 04:06:11
>>613
シンボルテーブル上の完全修飾名を与えてやれば呼び出せる。
例: $main::x
624623:2008/08/02(土) 04:10:16
イケメン目標で use strict ということなら、グローバル変数(main パッケージ直下のパッケージ変数)の使用は避けましょう。
ユーザ定義のグローバル変数は、その利便性にもかかわらず、コードの可読性を奪い、またデバッグを困難にします。
できるだけ避けましょう、というのが現在の同意事項です。
625デフォルトの名無しさん:2008/08/02(土) 04:10:26
今日の発見

open (AAA, '>pyscxtaf.txt') or die "$!";

↑このコードを実行すると、pyscxtaf.txtという名前のファイルを
作成できる!
626デフォルトの名無しさん:2008/08/02(土) 04:15:28
>>615
作法としてどうかなんて知ったこっちゃありませんが、
目的のために必要なら使えばいいでしょう。
作法を守って達成を諦めるぶんには好きにやってください。
627デフォルトの名無しさん:2008/08/02(土) 04:16:27
>>625
どこかよそのチラシの裏じゃダメなの……?(泣
628デフォルトの名無しさん:2008/08/02(土) 04:36:18
俺も夏休み欲しい。土曜すらやすめんのに
629デフォルトの名無しさん:2008/08/02(土) 04:40:04
>>628
有給使えばいいじゃん
630デフォルトの名無しさん:2008/08/02(土) 04:47:46
質問

スペースキーを押したら次の画面が出るように
したいんだけど、

<stdin>;
print "a\n";

↑これだと、スペースを押して、エンターで確定しないと
ならないんだよね。

スペースだけで、できないかな?
631デフォルトの名無しさん:2008/08/02(土) 05:02:25
質問

redoとかlastとかnextとか、

ループの制御構造を、強制的に
なんかする関数って、
スパゲッティになりやすいから、絶対に
使うな、って昔BASICの教科書で読んだんだけど、
それであってる?
632デフォルトの名無しさん:2008/08/02(土) 05:07:05
>>627
チンポを突き出すとしゃぶってくれるおまえのような奴がいるうちは
いなくならんよ。
633デフォルトの名無しさん:2008/08/02(土) 05:26:08
use warnings;
use strict;

use utf8;
use open IO => ":encoding(cp932)";
binmode STDIN => ":encoding(cp932)";
binmode STDOUT => ":encoding(cp932)";
binmode STDERR => ":encoding(cp932)";
use Encode;

$|=1;

my $a=1;
my $b;

until ($a>10){
$b=int(rand(10)) +1;
print "藁" x $b;
print "\n";
sleep (1);

$a=$a+1;
}


↑ランダムな感じで藁を出力するプログラムできたよー
634デフォルトの名無しさん:2008/08/02(土) 05:50:10
ActivePerlって、最初からいろんなモジュールが大抵入っていて、
わざわざCPANからダウンロードしてこなくてもいいように
なってるって聞いたのですが、そうなんですか?
635デフォルトの名無しさん:2008/08/02(土) 06:08:28
今日参考書読んでたら、ユニコードは、

「が」を表現するのに、
「か」+「”」で、3バイト+3バイトで、
最大、1文字6バイト、って書いてあって、
これってまじですか?
636デフォルトの名無しさん:2008/08/02(土) 06:33:21
「脳を鍛える大人の数当てゲーム」、できたよー

use warnings;
use strict;
use utf8;
use open IO => ":encoding(cp932)";
binmode STDIN => ":encoding(cp932)";
binmode STDOUT => ":encoding(cp932)";
binmode STDERR => ":encoding(cp932)";
use Encode;
$|=1;
#----------------------------------
my $a;
$a=int(rand(10)) +1;
my $b;
print "\n";
print "脳を鍛える大人の数当てゲームです。\n";
print "1から10までの数字をランダムで生成しますので、\n";
print "キーボードから、自分の予想した数字をあてずっぽうで\n";
print "入力してエンターを押してください。";
print "それでは、スタート!\n\n";
while(1){
$b=<stdin>;
chomp $b;
if ($a==$b){
print "正解です\!\n";
last;
}
else {
print "ちがいますよ\n";
}
}
637デフォルトの名無しさん:2008/08/02(土) 08:58:02
質問

forとforeachが同じもの、って書いてあるんだけど、
そうなの?
638デフォルトの名無しさん:2008/08/02(土) 09:10:50
どこに書いてある?
639デフォルトの名無しさん:2008/08/02(土) 09:19:33
>>616
バージョン表記の”.”は小数点じゃなく区切りだよ。 5-10みたいなもん
640デフォルトの名無しさん:2008/08/02(土) 11:46:33
そろそろ夏休み質問は全部スルーすべきだと思うんですけどいかがでしょうか
641デフォルトの名無しさん:2008/08/02(土) 12:13:59
スレを見ないという選択肢もあるよ
642デフォルトの名無しさん:2008/08/02(土) 13:08:27
>>607
use Switchすれば使える
643デフォルトの名無しさん:2008/08/02(土) 13:23:27
use strictでハッシュのハッシュをやろうとして

hoge{ero}[sukebe}

このリファレンスを関数に渡そうとして、使おうとしたら

hoge{ero}->{sukebe} = tinko

なんかstrict ref だかなんだか出てきてエラーとか言ってくる
助けてくれ
644デフォルトの名無しさん:2008/08/02(土) 13:52:51
645デフォルトの名無しさん:2008/08/02(土) 13:59:59
>>618
おまいは>>519の説明を何だと……。orz
あと、自分の使ってるPerlのバージョンを調べたかったら、コマンドラインで、
perl -v
と叩け。
646645:2008/08/02(土) 14:01:09
×>>519
>>591
orz
647デフォルトの名無しさん:2008/08/02(土) 15:32:38
>>630
心の底から FAQ です。
http://perldoc.jp/docs/perl/5.10.0/perlfaq8.pod
How do I read just one key without waiting for a return key?

>>631
あってるので使わないでください。

>>634
入れてみりゃ分かります。

>>635
限りなくスレ違いなのでそれっぽいスレで聞いてください。
でも仕様を調べれば分かることですから、できればそうしてください。

>>637
書いてみりゃ分かります。
648デフォルトの名無しさん:2008/08/02(土) 15:34:46
>>643
実行したコードとエラーメッセージは正しく書きましょう。
649デフォルトの名無しさん:2008/08/02(土) 15:46:13
回答きててよかた

>>623-624
ありがとうございます
やはり使用してる箇所全てに完全修飾名で書くしかなさそうですか・・・
グローバルを大量に書くのは一般的に余りよろしくないのですが、保守性を考えるとどうしても一元管理になってしまいます・・

一応設定ファイルのグローバル変数は全部定数なので、readonlyにしつつコーディング基準書で命名規則を用意するため
デバッグで困るという事は無さそうです
プログラムでの大域変数は原則禁止で、使用する場合は規則を用意して運用で対応しています

保守性・可読性・拡張性の確保が最上位、use strictで品質向上がその次に上位の課題なのですが、
完全修飾名を書くのが保守性・拡張性の低下になりそうで悩みます・・・
パッケージ用意して名称が永遠に不変な様に運用で固めようかな
650デフォルトの名無しさん:2008/08/02(土) 15:50:02
>>649
変数一個に全部ぶちこめばいいだろ。
651デフォルトの名無しさん:2008/08/02(土) 15:55:59
>>649
っ[Config::*]
652623:2008/08/02(土) 16:28:15
>>649
それでいいならいいんですけどね。

strict.pm は保守性維持のために厳格さを強制するプラグマです。
従って use strict することにより生じるセマンティクス上のエラーを回避するためにコードの保守性が下がったのでは本末転倒と言えます。

strict は既存の strict でないコードに取り付けることによってコードの質を向上させる用途には大抵は向きません。
strict クリーンなコードを目指すのであれば再設計の上、全てを再実装するのが良いでしょう。
その際には >>651 のような Config::* なモジュールを活用するのもよいでしょうし、
キーと値のペアを書いたファイルを用意し、必要に応じて各スコープ内のレキシカルハッシュにロードするルーチンを手作りしても大した手間ではないでしょう。
オブジェクトにしてアクセサ経由で値を参照させる手もあります。

より現実的な解として、use warnings または -w スイッチの導入があります。
近年の行儀の良い Perl はおおよそ以下のような出だしで始まります。

#!/usr/bin/perl

use strict;
use warnings;
653649:2008/08/02(土) 17:19:33
色々と有難うございます

>>652
仰るとおり、既に作成された物に対してuse strictを付けても 余り効果的では無いみたいですね
0から書き直すのが一番なので現在それをやってるんですが、どうも一部処理は再設計が必要な様です

>use strict;
>use warnings;

↑これは全部に入れようとしています
最近は紙を書くだけの方に移行してますが一応本職なので、やはり作成するコードは綺麗にしたいですよね


昔作った3万ステップぐらいのcgiゲームを大きく拡張するので、これを機に書き直しているのですが、
strict クリーンな行儀の良いコードを目指して書き直すのは大変な様です・・

やりたいのはシステム共通の定数を別ファイルで管理したいだけなので
方法はオブジェクトでも何でも良いんですが、ここまで悩むとは・・・
でも手法は統一しないと後で悲惨な事になるので、最初に固めるしかないという。。固めないと動けないからオワタ

>>650
変数一個に全部?

>>651
>[Config::*]
ちょっとまだそれが何を意味するのか理解できていないので、ネットとかで調べてみます
654623:2008/08/02(土) 17:48:29
>>653
既存のコード内の変数名をいじらずに実現するなら、Exporter を使えば可能です。
定義側で @EXPORT (及び @EXPORT_OK) を設定しておけば、利用側のスクリプトでは定義モジュールを use MyConstants するだけで実現します。
use するので、MyConstants.pm (仮名) はモジュールになっていなければなりません。

もちろんこれは個人的にまったくおすすめしたくない方法です。
利用側の改変を最小に抑えようとすれば、こういった方法もあるということでした。
655デフォルトの名無しさん:2008/08/02(土) 18:05:54
>>649
>グローバルを大量に書くのは一般的に余りよろしくないのですが、保守性を考えるとどうしても一元管理になってしまいます・・
おいおいどういう保守性だ。
保守性じゃなくて、書く瞬間に何も考えないで済むだけじゃないのか。
片付けられないゴミを散らかしながら歩いているようなものだぞ。

>>653
>変数一個に全部?
650じゃないけど、↓こんな感じとか。ourじゃなくてmyでもいいが。

our $global_config = {
 hoge => ...,
 geho => ...,
 ...
};

もっとちゃんとするなら「システム共通の定数」を表す
1つのまとまったオブジェクトにするのがいいかな。
ただ、不慣れなものをあれこれ導入するよりは手の届く手段を選んだ方が無難だけど。
656649:2008/08/02(土) 19:12:57
>>654
@EXPORTは私も考えたのですが、変数一つ一つを代入式に入れないといけないので
623さんと同様、だめかなぁという結論になりました。

>>655
すみません記述が曖昧でした。グローバルというのはグローバル定数の事です。
グローバル変数の場合はご指摘に同意します。

>650じゃないけど、↓こんな感じとか。ourじゃなくてmyでもいいが。
>our $global_config = {  hoge => ...,  geho => ...,  ... };

ありがとうございます。意味が分かりました。
ハッシュによる擬似的な構造体を現在使用しているので、それも一つの方法として検討していました。
(ゲームの為一部処理は100個近い変数を同時に処理することがあるので、正規化してハッシュ等で纏めて管理しないと辛いです。。)

仰る通りこういう場合は「システム共通の定数」を纏めた何かを作るのが普通と考えているので、
これはパッケージなりハッシュなり構造体なりで纏める予定です。
問題は呼び出し方です・・・今知っている手法を整理すると、ハッシュか構造体に纏めて@EXPORTで送るのが一番綺麗なのかな
657デフォルトの名無しさん:2008/08/02(土) 20:03:06
ActivePerlをいれなおして、5.10にしたよ。
これってcaseは使えるの?
658デフォルトの名無しさん:2008/08/02(土) 20:11:07
659デフォルトの名無しさん:2008/08/02(土) 20:19:00
今日の質問

コンソールレベルで、
www.yahoo.comに、Perlから
pingを打つ、ってできるの?

CGIレベルでないと、だめ?
660デフォルトの名無しさん:2008/08/02(土) 20:20:32
今日の質問2

Perlでmidiって使えるの?
661デフォルトの名無しさん:2008/08/02(土) 20:42:03
>>660
つ CPAN
662デフォルトの名無しさん:2008/08/02(土) 21:18:34
質問

http://www.abcde.com/aaa.txt

の文字列を、Perlのコンソールレベルで、
そのテキストファイルを取得してきて、
Perlから使う、って、できるの?

あるいは、コンソールレベルではできないけど
CGIレベルならできる?

あるいは、相手側のサーバーがソケットを許可
してないとだめとか?
663デフォルトの名無しさん:2008/08/02(土) 22:17:52
5.10対応の、初心者向けの本、教えてくれないかなー

そうしたら、

elsif
elsif
elsif
elsif
elsif
elsif

とかって見なくても済むと思うんだよねー
664デフォルトの名無しさん:2008/08/02(土) 22:43:52
今、WindowsでコンソールレベルでPerlの勉強をしてるんだが、
Windowsのメモ帳で、ファイルを保存する時に、文字コードの選択なんだが、

(1)ANSI
(2)unicode
(3)unicode big endian
(4)utf-8

と4つの選択肢があるんだが、これって何を選べばいいの?
それとも、特に気にしなくていいの?

ANSIってシフトJISのことかな?
665デフォルトの名無しさん:2008/08/02(土) 23:18:24
本で勉強してるんだが,本立て欲しいな。
本が、パタン、と閉じてしまう。
666デフォルトの名無しさん:2008/08/02(土) 23:29:15
>>664
悪いこと言わんからサクラエディタでも入れておけ
667デフォルトの名無しさん:2008/08/02(土) 23:37:56
print (0..999999),"\n";

↑これを実行するとおもしろいよ。
途中で中止するには、ctrl+c
668デフォルトの名無しさん:2008/08/02(土) 23:43:01
定番は perl -e 'fork while 1' だろ。
669デフォルトの名無しさん:2008/08/02(土) 23:47:55
↑子プロセスを大量に作りまくってメモリを圧迫、悪い場合はシステムが不安定になる。
670デフォルトの名無しさん:2008/08/02(土) 23:53:18
perl歴10年目にして、fork爆弾を踏んでしまった
自分がかわいいと思った(w。
671デフォルトの名無しさん:2008/08/02(土) 23:56:28
よく、デバッグがうまくいかなくてイライラしてる時、
-e"fork while 1" して代わりにPCさんに怒ってもらう
672デフォルトの名無しさん:2008/08/03(日) 00:01:31
コードを書いてるときに、
join
をダブルクリックすると、書き方とかヘルプとかが
出てくるエディタってない?
673デフォルトの名無しさん:2008/08/03(日) 00:02:18
>>672
スレち
674デフォルトの名無しさん:2008/08/03(日) 03:25:17
0001から9999までの、4桁の数字をrandで生成するじゃん。

そんで、おなじ数字があったら、破棄して、サイコロ
ふりなおしたいのよ。
そんで、今生成した4桁の数字は数値リテラルじゃん。
これを一桁ずつ区切って、配列に入れたいのよ。

1234

だったら、

(1,2,3,4)
みたいに。
そしてから、各桁が一致してるかどうか、
判別したら楽じゃん。
そんで、配列にいれるのは、どうやるの?
675デフォルトの名無しさん:2008/08/03(日) 03:26:12
おなじ数字ってのは、たとえば

1134

とかは、だめってこと、1と1が同じだから。
全部の桁が違う数字でないとだめなの。

それと、数字の先頭は0は不可だから。
676デフォルトの名無しさん:2008/08/03(日) 07:39:04
>>674-675はもう飽きたから回答しなくていいや
677デフォルトの名無しさん:2008/08/03(日) 08:14:55
http://namidame.2ch.net/test/read.cgi/news/1217703980/356

↑これってなんで起きるの?
678デフォルトの名無しさん:2008/08/03(日) 12:26:50
HTMLを解析するライブラリはありませんか?
JavaScriptのDOMのように各要素の値を見れればOKです。

679デフォルトの名無しさん:2008/08/03(日) 12:44:11
>>678
定番は HTML::Parser。
HTML::DOM 関係なら230個ほどある。
http://search.cpan.org/search?query=html+dom&mode=all
好きなの使え。
680デフォルトの名無しさん:2008/08/03(日) 12:45:12
plaggerのインスコって滅茶苦茶面倒ですね
cpan Plaggerとかやっても20数個のモジュールが不足してて
それらが自動的にインストールされないから不足分の表示からそれらを個別にcpan $hogehogeするスクリプトを書いてやっても
そのうちのほとんどがインストールに失敗するから(なんかテストフェーズで失敗してる)結局一つ一つをソースを修正(というか強制的にテストを通過させる)
しながらmakeする作業をする事に…結局5つインスコできた時点で心が折れました
色んな記事ではcpanで一発でインスコしてますが、本当にcpanで一発インスコなんてできるんでしょうか?
681デフォルトの名無しさん:2008/08/03(日) 13:11:54
>>679
ありがとうございます。
HTML::Parser試してみます。
682デフォルトの名無しさん:2008/08/03(日) 13:48:29
>>680
大変だな。
おれの環境では、

# portinstall p5-Plagger

とやって放っておけば全部インストールされるけどな。
683デフォルトの名無しさん:2008/08/03(日) 14:06:40
portsって凄いんですね
684デフォルトの名無しさん:2008/08/03(日) 16:47:21
>>649
遅レスだが、>>613のメインスクリプト中の、
順番を変えてやればいいんじゃないの?

require("x.ini");
use strict;

あと、「定数」といいながら、「$x」なんて使うのはよくないね。
うっかりいじられるかもしれないから。

use constant X => "XXX";

のようにすれば、本当にいじられない定数になる。
685デフォルトの名無しさん:2008/08/03(日) 18:05:08
>>684
最新流行は Readonly.pm らしいよ。
また、重箱の隅だけれど、constant でも本当にいじられないわけじゃないです。
同じパッケージでユーザ定義関数とぶつかると、警告表示の上でユーザ定義関数が優先されます。
686デフォルトの名無しさん:2008/08/03(日) 18:23:44
>>684
参照時エラーを発しているのに定義だけ strict の外に逃がしても何も変わらないと思うです。
687デフォルトの名無しさん:2008/08/03(日) 18:31:09
>>613
メインlでour宣言してないな。
strictしてるんだから、宣言なしに変数使っちゃだめじゃん。

あと設定ファイルでour宣言してるのにuse strictしてないな。
その中途半端なコーディングスタイルはとてもイケメンとはいえないな。
688623:2008/08/03(日) 19:09:44
>>656
それが妥当な設計上必要なら何千個でも列挙すればいいと思います。が、
ぼくがそれを避けたいのは export 先パッケージに大量のシンボルが流入すると、それらの管理の徹底が困難になり、そこに起因するつまらないデバッグ作業に貴重な人件費を奪われるリスクが高まるからです。

再設計するなら、以下のような現状を:

プログラム <-> 定義スクリプト

下記のような構造に変更してはどうかという提案をしたい:

設定ファイル
  ・設定項目とその設定値のペアを記載

設定アクセス用モジュール
  ・設定ファイルから設定項目と値を読込み
    # 設定項目が増減してもモジュールには手を入れなくて良い
  ・設定項目と値のペアをハッシュに展開
    ・各設定項目を利用範囲毎に分割展開したり
    ・ツリー構造にして
    ・部分単位で利用できるようにするのも一興
  ・our なハッシュにして EXPORT するもよし
  ・レキシカル変数にして要求に応じて値を返す関数を実装するもよし
  ・お好みでオブジェクトにするもよし

プログラム
  ・import したならその変数を使うもよし
  ・import せずに完全修飾名を使うもよし
  ・値を返させてレキシカルハッシュなりに格納して利用するもよし
    ・気分次第で use Readonly するもよし
689デフォルトの名無しさん:2008/08/03(日) 19:12:20
>>685
これじゃダメ?

*const = \("XXX");
690デフォルトの名無しさん:2008/08/03(日) 19:16:02
>>687
最初からずっと、そういう話じゃないです。
691デフォルトの名無しさん:2008/08/03(日) 19:23:40
>>689
ええけど読みにくないか?w
692デフォルトの名無しさん:2008/08/03(日) 19:40:43
>>690
ん?なんか変か?質問者は少なくともそのレベルだと思うんだけど。。。
>>688
そこまで考えるんだったら、JSONかYAMLにしとけばいいんじゃね?
自前で作るのめんどくさいだろ。
693デフォルトの名無しさん:2008/08/03(日) 21:16:24
YYYY-MM-DDTHH:MM
という形式のデータがあるのですが、簡単に
$year = YYYY;
$month = MM;
$day = DD;
のように代入する方法はありませんか?
694デフォルトの名無しさん:2008/08/03(日) 21:27:10
>>698
($year, $month, $day) = ($1, $2, $3) if $date =~ /^(\d\d\d\d)-(\d\d)-(\d\d)/;
695デフォルトの名無しさん:2008/08/03(日) 21:58:16
>>694
何かバルタン星人がいっぱいいるぞ
696デフォルトの名無しさん:2008/08/03(日) 22:03:11
>>688
Perlの構文をそのまま設定ファイルに使うのはどうか。

sample.conf:
 { hoge => 'hahaha', geho => 'hohoho', foo => [ 'bar', 'baz' ] }

loader:
 sub load_config($)
 { my $fh = shift; eval do { local $/; join '', <$fh> }; }

toplevel:
 my $config = do { open(my $fh, 'sample.conf') or die; load_config($fh); };
 → $config に sample.conf 内のPerl構文でのデータ構造が得られる

まあこのままだとフリーダム過ぎるので、制約を決めておいて、
loadした後に制約チェッカにかけたりするといいのかもしれない。エラー処理も必要。
設定ファイルが悪意を持っていないとみなせるなら、そこそこ使い物になる。
697デフォルトの名無しさん:2008/08/03(日) 22:04:36
そんなまどろっこしいことしなくても、do "file" でいいだろ。
698デフォルトの名無しさん:2008/08/03(日) 22:06:12
>>693
my ($year, $month, $day) = ($data =~ /^(\d\d\d\d)-(\d\d)-(\d\d)/);
699デフォルトの名無しさん:2008/08/03(日) 22:09:04
こうしてAppConfigやConfig::*を作った人たちの熱意は無駄になったのであった。
700694:2008/08/03(日) 22:12:58
>>698
勉強になりますた
701649:2008/08/03(日) 22:22:00
皆様方 色々と助言有難う御座いました。毎回長文なので減らしていきます。。

『use strictを使いながら、グローバル定数は別ファイルで管理する』という、おそらく頻出の課題ですが、
最後のレスの後に総合的に判断した結果、結局exportは使用せずに完全修飾名を書いて参照する方向で決定しました。
理由は以下の二つです

・複数の機能別変数セットがあるため、完全修飾名を書かないと宣言箇所(=管理している場所)が分かりにくい
(全てINI packageで宣言しており、その中に「%SY」、「%DIR」、「%FILE」などのハッシュの種類があるため、
 完全修飾名を書いたほうが『INIファイルで宣言している』事が分かりやすい)

・exportを使うと、変数セットが追加される度にどんどんqw()の中に増えていく為、どうもソース的によろしくない (主に見た目と変更方法が)

デメリットはpackage名の変更・中身の分割がやりにくい点ですが、名称と管轄するデータは恒久的に固定にする、という事で対応しました。
定数の書き方はreadonlyか>>689さんのやり方を考えていますが、readonlyはモジュールを置かないといけない様なので思案中です。
(といっても変数は命名規則があるので、定数を変更する様なバグは無さそうです。システム的な強制は必要無いかも。。)
702696:2008/08/03(日) 22:24:20
>>697
何かあったような気がすると思ったら do "file" だったか。
thx
703649:2008/08/03(日) 22:26:21
あとuse strict、ハッシュの要素名を間違えててもエラーにしてくれませんね・・・use warningsも警告を出してくれない・・・
配列も要素が増減可能だし、連想配列というぐらいだから仕方ないのかな
でも要素名もチェックしてくれないとuse strictを使う意味が大分薄まる・・・orz
構造体ならチェック可能なのかなぁ・・・

>>687
詳しくは知らないのですが、use strictはプログラム中に一回では無くて
定義のみのファイルを含む「使用ファイル」全てに書かないと駄目なのでしょうか?

requireとかは実行時に展開されるから、各ファイルに書かないと不味いのかな
704デフォルトの名無しさん:2008/08/04(月) 00:36:06
>>703
> あとuse strict、ハッシュの要素名を間違えててもエラーにしてくれませんね・・・use warningsも警告を出してくれない・・・

そんなあなたに Hash::Util。
lock_hash() でお望みの機能が手に入ります。

use strict についてはスタイル次第ですが、このプラグマはレキシカルスコープですから、定義のみのファイルを require で展開して、という用法では、その定義のみのファイル内のコードに strict の効果が及びません。
今回、定義ファイルをモジュール形式の Perl コードにする予定なら、定義側も strict 下で書くべきだと思います。
705デフォルトの名無しさん:2008/08/04(月) 03:49:00
今日の発見:map

今日、mapという関数を発見した。
配列Aを読み込んで、なんらかの処理をほどこして、
配列Bにする、という機能らしいのだが、不可解なのは
その名称だ。
mapといえば通常地図のことなのだが、それと配列の操作と、
どのように結びつくのかまったくわからない。ラリー・ウオールは
言語学者というが、脳が腐っているのではないか。
706デフォルトの名無しさん:2008/08/04(月) 04:04:32
写像(map)ですけど
707デフォルトの名無しさん:2008/08/04(月) 04:44:58
5.10に対応してる入門書、
はやく教えてくださいよ
708デフォルトの名無しさん:2008/08/04(月) 05:57:01
http://www.amazon.co.jp/dp/4774108170/

これなんかいまから9年前に出版されたのに
今田にアマゾンのperlのカテゴリで売り上げランキング29位ですよ
Perlの入門本の世界はほんとにどうしようもないですね
709デフォルトの名無しさん:2008/08/04(月) 06:34:55
「CGIのための実践入門Perl」
三島 俊司 (著)
技術評論社 (1998/08)

出版社に問い合わせたら、この本は
すでに絶版らしい。
710デフォルトの名無しさん:2008/08/04(月) 06:36:51
http://www.supee.jp/supi-/

>メモ:
>2008/07/15 に新着バグがありました。
>p.76 から、階乗の英語として「power」を使っていましたが、これはべき乗という意味で、
>階乗は「factorial」というべきというものです。
>お便りをくださった読者の方、ありがとうございました。

なんだよ 英語もできないのかよ
711デフォルトの名無しさん:2008/08/04(月) 07:01:33
今は
http://www.amazon.co.jp/dp/4797336803/
新版Perl言語プログラミングレッスン入門編 (単行本)
結城浩 (著)

これ読んでる。次は

http://www.amazon.co.jp/dp/4774108170/
すぐわかるPerl (Software Technology) (単行本)
深沢 千尋 (著)

これを読む予定。
712デフォルトの名無しさん:2008/08/04(月) 07:31:29
>>705
ネタにマジレスすると、Lispという言語のmapcarという関数からきている。
713デフォルトの名無しさん:2008/08/04(月) 07:31:54
すげーたくさん本読むんだなぁ。てか言語の本なんてそんなに必要かねぇ
714デフォルトの名無しさん:2008/08/04(月) 07:40:20
地図車ですか?ますますわかりません
715デフォルトの名無しさん:2008/08/04(月) 07:44:04
>>714
map → 写像
cha → キャラクター(文字)
716デフォルトの名無しさん:2008/08/04(月) 07:44:58
>>713
自分はたくさん読んで理解するタイプだから。

たくさん読み込むタイプと、
1冊だけ深読みするタイプと
二種類の人種がある。
717デフォルトの名無しさん:2008/08/04(月) 07:47:53
こんなゲーム考えてみたよ。

あるナゾのパターンの、マッチ式が生成される(あるいは事前に埋め込まれる」

ユーザーはキーボードから文字列を適当に入力し、
そのマッチ式がなんなのかを推定してあてる。
718デフォルトの名無しさん:2008/08/04(月) 07:51:25


cats → マッチ!
CATS → マッチしません
It rains cats and dogs. → マッチ!
One car, two cars. → マッチ!
ra ta ca sa ma da ba → マッチ!
ca.s → マッチ!


以上の例を見て、
隠されたマッチ式がなんなのかをあてる
ゲーム
719デフォルトの名無しさん:2008/08/04(月) 08:26:15
>>715
chaじゃないって
720デフォルトの名無しさん:2008/08/04(月) 08:26:46
http://namidame.2ch.net/test/read.cgi/news/1217766193/20,23,24,30

↑これについてカンタンに解説して。
721デフォルトの名無しさん:2008/08/04(月) 08:36:32
post.plを実行する
722デフォルトの名無しさん:2008/08/04(月) 09:36:01
perlスクリプトを踏んだだけで
2ちゃんに自動的に投稿できるってこと?

でもたぶん文面は固定というか
きめうちだと思うけど。
723デフォルトの名無しさん:2008/08/04(月) 10:06:30
WWW::Mechanizeを使ってコマンドラインから
2chスレを検索して投稿できるアプリケーションを作った事が懐かしいな
724デフォルトの名無しさん:2008/08/04(月) 10:06:37
ページ内に書かれた外部サイト(2ch)にPOSTするフォームを
自動的にsubmit()するJavaScriptが含まれるHTML

を生成するPerlスクリプト。
ちなみにQUERYストリングはJavaScriptからでも取れる筈なので、
>>720と同等のものを静的なHTMLでも作成出来る
725デフォルトの名無しさん:2008/08/04(月) 11:22:20
http://mamono.2ch.net/test/read.cgi/newsplus/1217807458/721

↑これって本当なのかな?
もし本当ならIPAバカすぎる
perl関係ないけど。
726デフォルトの名無しさん:2008/08/04(月) 12:01:42
perlを学び終えてからCを学ぶと
理解は容易になるの?
727デフォルトの名無しさん:2008/08/04(月) 12:03:14
perlに限らずどんな言語だろうが経験ありゃ楽になるだろ
728デフォルトの名無しさん:2008/08/04(月) 12:20:38
いやさ、そんな一般論はしてないんだよね。
729デフォルトの名無しさん:2008/08/04(月) 12:21:10
http://pc11.2ch.net/test/read.cgi/prog/1214321141/910

↑この人を雇いたい〜
本人いたら出てきて
730デフォルトの名無しさん:2008/08/04(月) 12:45:39
また新しいゲームのアイデア考えたよ

必ずPerlの予約語の名前をつけなければならない、ってオンラインゲーム。

whileさんとか、forさんとか。

そんで、そいつらでパーティ組んで、ダンジョンにもぐる。

コードを組む問題が出てきて、パーティー構成が
うまく組めてると、問題を解ける。

必要な予約語がいないと、そこで詰むw
731デフォルトの名無しさん:2008/08/04(月) 12:52:56
予約語の多いperlならではだな
あとアルファベットをアイテムとして入手できて,消費することで単語を作れるとか

まあほぼ間違いなく面白くないな
732デフォルトの名無しさん:2008/08/04(月) 17:43:44
簡単に使えるダウンローダモジュールはないでしょうか?
URIを与えて、レスポンスヘッダのContent-Dispositionフィールドを
読んで、セーブファイル名を適切にセットしてくるようなものは?
733デフォルトの名無しさん:2008/08/04(月) 18:11:41
>>732
lwpでresponseのfilename使えばいいと思うが。一緒についてくる
lwp-downloadコマンドが参考になる。
734デフォルトの名無しさん:2008/08/04(月) 23:17:09
http://d.hatena.ne.jp/Hamachiya2/20080804/security

このはまちちゃんの日記おもしろいよ
735デフォルトの名無しさん:2008/08/04(月) 23:25:54
>>725 そのスレで聞いてください。
>>726 あなたが Perl を学び終えたらぜひ知らせてください。その際にはいくつかお聞きしたいことがあります。
>>729 そのスレで求人してください。
>>730 あなたの素晴らしいアイデアは承りました。もしよろしければ、ここはゲームデザインスレではなく、プログラム板内の Perl 質問スレである点ご留意頂き、それを実現するコードのほうを拝見できませんか。
>>734 ご親切にありがとうございます。このスレでも氏を知らない者が2%くらいはいるかもしれませんから、彼らに代わり御礼申し上げます。
736デフォルトの名無しさん:2008/08/05(火) 00:37:45
>>597

CPAN でぐぐれ。
737デフォルトの名無しさん:2008/08/05(火) 00:48:48
>>735
どんなこと聞きたいの?
今答えるよ
738デフォルトの名無しさん:2008/08/05(火) 00:49:45
質問

今、パソコンでローカルで、
Perl5.10で勉強してるんだけど、
勉強がおわたら、レンタルサーバーに
アップロードしてCGIとして動かすんだけど、
ひょっとして、サーバーのほうも5.10でないと
意味がないのかな?
739デフォルトの名無しさん:2008/08/05(火) 00:54:12
>>738
5.10で新しく追加された機能さえ使わなければOK.
740デフォルトの名無しさん:2008/08/05(火) 01:27:29
Perlでmidiって鳴らせるの?
コンソールレベルで。
741デフォルトの名無しさん:2008/08/05(火) 01:52:06
>>719 lisp 触ったことない人には car や cdr が分からんのですよ。
742デフォルトの名無しさん:2008/08/05(火) 04:15:30
配列って初期化するの?

my @a;

みたいに。
743デフォルトの名無しさん:2008/08/05(火) 05:25:59
最近、ちょっとづつ
Perlのことがわかってきてうれしい
744デフォルトの名無しさん:2008/08/05(火) 05:27:42
returnで、2つの引数を戻すってできないの?
かならず一個だけなの?
745デフォルトの名無しさん:2008/08/05(火) 05:53:16
return ("うんこ", "しっこ", "げろ");
746デフォルトの名無しさん:2008/08/05(火) 05:53:49
>>738
そう。
747デフォルトの名無しさん:2008/08/05(火) 05:58:15
perlでは、複雑なデータ-構造をやろとすると、
レファレンスやデレファレンスを駆使しなくてはならない。

と聞いたのですが、そうなのですか?

ちなみに、掲示版は、名前、メールアドレス、投稿日時、投稿内容、レス番と
5つのデータ-がからむため、レファレンスやデレファレンスを駆使して
複雑なデータ-構造を作っているのですか?
748デフォルトの名無しさん:2008/08/05(火) 05:59:18
>>746
じゃああれだね。新型の電話機の普及の問題と同じ。
ネットワークの外部性?

使ってる人が多くならないと、サーバーの側も
対応してくれないっていう。
749デフォルトの名無しさん:2008/08/05(火) 08:56:51
>>742,745,747
ほかの人のコードも読みましょう。
そうやってほかの人がどうやっているのかしらべてみましょう。
あなたの Perl には Perl のじょうずな人たちが作ったモジュールなどがたくさんふくまれています。
ほかにも Web でくばられている掲示板などのスクリプトもたくさんあります。
よりどりみどりです。
750デフォルトの名無しさん:2008/08/05(火) 09:47:44
wantarray って使い方がいまいちよくわからんな。
751デフォルトの名無しさん:2008/08/05(火) 09:48:16
いいこと思いついた。
結城さんのperlの本を英語に翻訳して
アメリカで売ったら、売れるんでない?
752デフォルトの名無しさん:2008/08/05(火) 10:17:31
掲示板スクリプトは素人のスパゲッティーコードが多くてお勧めできない
753デフォルトの名無しさん:2008/08/05(火) 10:30:18
>>750
まんまじゃねえか
754デフォルトの名無しさん:2008/08/05(火) 12:03:21
>>752
ほう・・・
じゃあ、プロのコードを見せてよ。
あなたは、よほどご立派な素晴らしいプロのコードが書けるんですね。
さぁ、さぁ、さぁ、見せてもらおうじゃないですか。ご立派なプロのコードとやらを。
期待してますよ。逃げないでくださいね。
755デフォルトの名無しさん:2008/08/05(火) 12:03:54
たぶん >>752 は逃げるな。
756デフォルトの名無しさん:2008/08/05(火) 12:11:48
プロは基本的に自分のコード見せないし
もし見られたとしても金がかかるだろJK
757デフォルトの名無しさん:2008/08/05(火) 12:25:02
オレもプロだから立派なコードを書いてるんだが、
プロだからタダじゃぁコードは見せられないな。残念だけど。
758デフォルトの名無しさん:2008/08/05(火) 12:37:02
素人だが>>752に同意
759752:2008/08/05(火) 12:42:31
>>754
イタリアンうるさい
760デフォルトの名無しさん:2008/08/05(火) 12:58:14
プロの世界ってデスマーチ頻発してるらしいから、
コードはパスタだらけになってると思ってた。
761デフォルトの名無しさん:2008/08/05(火) 13:35:05
プロのコーダ ≠ 本当のプログラマ
762デフォルトの名無しさん:2008/08/05(火) 13:56:12
>>749
> ほかにも Web でくばられている掲示板などのスクリプトもたくさんあります。

掲示板は素人が真っ先に手をつけるものなので、参考にするのは危険。
763デフォルトの名無しさん:2008/08/05(火) 14:00:46
>>747
リファレンスを使うか使わないかは、データの処理方法とアルゴリズムとか
もろもろの理由から考えてきめればいいんだよ。この質問をしている時点で
リファレンスをつかったデータ構造の表現とかはまだ敷居がたかいかもしれ
ないと思うけども。

シンプルにできることをわざわざ複雑にリファレンスを使う必要もないし。

たった5つのデータの掲示板ならハッシュで一枚のcgiファイルで
終わりだな。(HTMLひな形はパーツとして読み込む形にしても)

$name{投稿番号}
$date{投稿番号}
$message{投稿番号}
$account{投稿番号}
$resnumber{投稿番号}
のハッシュをつくるかな。で、必要なデータ分だけデータファイルから読み込んで
上記ハッシュにセットして、投稿番号でデータを扱う。
あとは外部のひな形HTMLファイルを読み込んで、投稿データを埋め込んで
HTMLファイルを生成、文字コード変換して、画面出力。

まぁ、基本からはじめていろいろと自分なりのニーズがでてくると思うので
それをプログラムでどう表現するかを考えると自ずと答えはみつかてくる
ので上達すると思うよ。たいていはソートアルゴリズムを自然と研究するように
なっていくと思うんだけど。複雑な掲示板になればなるほど。
764デフォルトの名無しさん:2008/08/05(火) 14:15:29
ちなみに、リファレンスとハッシュの説明でとりあえず日本で一番いいページだと
思うサイトを載っけとく。

http://takenaka-akio.cool.ne.jp/doc/perl_kiso/reference.html
(リファレンスのページだけど初心者は最初の章から読むべし)

俺も一時、ネットでいろいろな所を読みあさったり書籍を何冊も買っては
読んでみたけども、上記サイトが一番だった。作者にはオブジェクト指向
の実戦的利用法みたいなサイトをつくってもらいたいと思ったくらいだ。

765デフォルトの名無しさん:2008/08/05(火) 14:44:48
perlのプログラムに「プロだから・・」というレベルを求めるのはどうかと思う。
素人が書き捨てに使うことこそ本来の役目と思う。
なんというか、カップラーメンを食べる作法をあれこれ言うようなもんだ。
766デフォルトの名無しさん:2008/08/05(火) 14:48:54
このスレ流れ早くない?
767デフォルトの名無しさん:2008/08/05(火) 15:09:56
で?プロは尻尾を巻いて逃げたんか?
さすがプロだね。逃げ足は速い。
768デフォルトの名無しさん:2008/08/05(火) 15:15:48
>>765
> perlのプログラムに「プロだから・・」というレベルを求めるのはどうかと思う。

コンピュータ言語に関しては、「プロ」に権威を見出すのは間違いだ。

その方面に詳しい奴ほど、才能がある奴ほど、「プロ」になりたがらねえ。
769デフォルトの名無しさん:2008/08/05(火) 15:56:12
プロじゃなくてもいいから、参考になる良コードを教えてくれ
770デフォルトの名無しさん:2008/08/05(火) 16:11:47
>>769
っ[Plagger]
771デフォルトの名無しさん:2008/08/05(火) 16:12:50
逃げるプロは、いらん。
772デフォルトの名無しさん:2008/08/05(火) 17:09:24
>>768
君の言うプロの定義ってなんだ?
773デフォルトの名無しさん:2008/08/05(火) 17:37:12
プログラマの略だよね。<プロ
774デフォルトの名無しさん:2008/08/05(火) 18:34:35
大学の情報系では、「就職できなかったらプログラマになるさ」とか
言われてる話なら聞いた。
775デフォルトの名無しさん:2008/08/05(火) 18:36:13
>>770
サンクス
見てみる
776デフォルトの名無しさん:2008/08/05(火) 18:56:24
>>769
プロが書いたのを教えてあげる

つ KENT
777デフォルトの名無しさん:2008/08/05(火) 19:06:00
まずプロのプログラマーである時点で当てにならない
理系エンジニアが研究の道具にプログラミングを使うっていうのが正しいプログラミングのプロ
778デフォルトの名無しさん:2008/08/05(火) 21:16:27
>>763
ああなんだ、そうすればいいんだ。
5種類のデータ-があるからといって、
必ずしも5次元配列にしなければならない、
ってことではないんだね。
779デフォルトの名無しさん:2008/08/05(火) 21:35:29
主にコードを書いてご飯食べてるのがプロ。
食べてないのがアマ。

それだけの話。

「玄人」なんて自称しているやつはほぼ全員後者。
780デフォルトの名無しさん:2008/08/05(火) 22:19:26
なぜか暗記パンを思い出した。
781デフォルトの名無しさん:2008/08/05(火) 22:35:35
ちょっっ
するとハッカーの半分ぐらいは出家するwww
782デフォルトの名無しさん:2008/08/05(火) 23:09:23
コードで飯を食うのがプロ。
コードを食うのがハカー。
783デフォルトの名無しさん:2008/08/05(火) 23:16:44
住所録ファイルの更新スクリプトを作ろうと考えています。
更新用の情報「番号,氏名,生年月日」が記入されたcsvファイル1のレコードから「番号」を用い、
同じように「番号,氏名,生年月日」が記入された更新前のcsvファイル2から、「番号」の列全てに検索をかけて、マッチした場合はcsvファイル1の情報をファイル2に上書きさせたいです。

具体的にはこのような感じにしたいです。
csvファイル1(更新用情報)
2,山田太郎,1月1日

csvファイル2(更新前)
1,近藤太郎,3月3日
2,兼松太郎,1月1日
3,近藤直正,3月12日

csvファイル2(更新後)
1,近藤太郎,3月3日
2,山田太郎,1月1日
3,近藤直正,3月12日

自分なりに下記のように作成してみたのですが、上手くできずに詰まってしまっています。どなたか解決法をご教授ください…

open(IN, '<After') or die "file open error: $!";
open(OUT, '<Before') or die "file open error: $!";
while( <IN> ){
@a = split(/,/, $_);
@b = split(/,/, <OUT>);
for($i =0; $i<13; $i++){
if ( $a[0] ne $b[$i] ){
print OUT "$a[$i]\t"
}
}
print "\n";
}
784デフォルトの名無しさん:2008/08/05(火) 23:22:44
>>783
CSVをやめてDB使う
785デフォルトの名無しさん:2008/08/05(火) 23:30:10
>>783
最近の Perl は読込専用で開いたファイルに print() できるようになりましたかそうですか。
786752:2008/08/05(火) 23:31:57
せっかく読むなら上質なものを選んだほうがいいってだけなのに、
なんでそんなに反応するんだ?
787735:2008/08/05(火) 23:34:12
>>737
Perl を学び終えた人に聞きたいことなので、早く学び終えてください。
C の読み書きすらままならない人が Perl を学び終えるなどと口走るのは愉快な冗談にもほどがあるので。
がんばってくださいね。
788デフォルトの名無しさん:2008/08/05(火) 23:38:29
>>783 どうぞ

use strict;
use warnings;

my %data;

for my $file ("更新前.csv", "更新用情報.csv") {
open my $fh, "<", $file or die $!;
while (my $line = readline $fh) {
chomp $line;
my ($id, @data) = split /,/, $line;
$data{$id} = \@data;
}
close $fh;
}
{
local $\ = "\n"; local $, = ",";
open my $fh, ">", "更新後.csv" or die $!;
while (my ($id, $data) = each(%data)) {
print $fh $id, @$data;
}
close $fh;
}
789デフォルトの名無しさん:2008/08/05(火) 23:50:10
>>778
763のハッシュで書いたものは結果的に5種類のハッシュを使っているので5次元だよ。
そのハッシュどうしの並びは固定していないので自由につかえるわけよ。
5x投稿数の行列としてもつかえるよね。

それはさておき、無名ハッシュという考え方が身に付けば、データについて非常に
柔軟に考えることができるようになるよ。適当にハッシュつかって変数にしとくか
って感じでw ある意味、perlの強みをいかんなく発揮すると思う。
790デフォルトの名無しさん:2008/08/06(水) 00:05:53
>>789
Perl の魅力の一端についての、とてもよい説明だと思います。
が、>>747 に挙げられた5項目並列の情報群を「複雑なデータ-構造」と見做して「レファレンスやデレファレンスを駆使しなくてはならない」との受け売りで自縄自縛してしまうあたりの応用力の人にとって、その説明は役に立つのかしら。
791デフォルトの名無しさん:2008/08/06(水) 00:17:42
流れと関係無いんだけど、変数のデータ型とかはきっちり固めたいとか思うのは異常なのかな
perlの特性(魅力?)を無視してるけど、線引きはちゃんとした方がバグも減ると思うんだ

ispのサーバーでcgi動かすにはperlぐらいしかないから、上手く使いこなしたいぜ
792デフォルトの名無しさん:2008/08/06(水) 00:34:39
>>791
個人的にプログラムはperlからはいってしまった(大学では単位取るくらいには
やったけど)ので、型とか意識する場合は、バイナリデータか通常データwか
くらいなんだよなぁ。しかもstrictなんてつかっていないので、変数も好きなとき
に好きなときだけ用意してしまう。そのかわり変数はしっかりと把握している癖
はついたのかもしれないけど。

最初に変数などを定義してバキバキにやることで逆に緊張感がうすれてバギーな
コーディングになってしまうっていうようなことはないのかな?(そんなことは
ないか)
793デフォルトの名無しさん:2008/08/06(水) 01:12:00
>>791
変数に型縛りがないことで、mapなどの汎用関数が簡単に書けるんだよ。
sub my_map
{
my ($func, @list) = @_;
my @mapped = ();
foreach my $x (@list) {
push(@mapped, $func->($x));
}
return @mapped;
}
変数に型縛りがあると、このような処理を書くのが面倒くさい。

うまく関数やオブジェクトにまとめることで、変数の氾濫は避けられると思うよ。
794デフォルトの名無しさん:2008/08/06(水) 01:35:18
COBOL流型縛りは、昔のアホなメインフレーム屋が設計書を書く上でドキュメント分量を水増しして「仕事したふり」をする為のアリバイ作りが目的。金は発生するが、幸せは発生しない。
C流型縛りは、実は「型」ではなくてレジスタ/メモリのサイズ/符号付けでしかない。
perlを「型無し言語」と言う奴は「構造クラス」を理解できてないアホ。こういうアホに限って複合データ構造/動的データ構造を理解できないどころか、その存在すら知らない。
昨今Javaがもてはやされてるのは、昔のメインフレーム屋の亡霊が新たな「仕事したふり」アリバイをめっけたから。
795デフォルトの名無しさん:2008/08/06(水) 01:36:08
>>789
掲示板に5次元配列w そのハッシュはあくまで添え字に過ぎず、それは2次元。
5次元て とんでもない箱だぞ? 4次元でもややこし過ぎて 助けてドラえもん 状態だ。
796デフォルトの名無しさん:2008/08/06(水) 01:45:41
>>794
Perlって変数を様々な方法でいじって見ると面白いよね。
Perlやる前はCとVBだったから一番最初に感動した部分だった。
797デフォルトの名無しさん:2008/08/06(水) 01:48:07
>>795
いま君が使っているディスプレイの点は5次元で表現できるよ。
幅×高さ×赤×緑×青
ドゥユーアンダスタンンンドゥ
798デフォルトの名無しさん:2008/08/06(水) 02:07:38
>>797
自称プロの方ですか?w それ3項目の2次元の典型。
それを5次元というなら、特定座標の赤の全階調毎に緑×青の
組み合わせパターンを保持するって、どういう目的だ?
799デフォルトの名無しさん:2008/08/06(水) 02:21:09
>>798
単なる例えでしょ
800デフォルトの名無しさん:2008/08/06(水) 02:29:59
じゃ「2008/08/06 12:50 」も 年月日時分の5次元?
801デフォルトの名無しさん:2008/08/06(水) 02:38:45
>>798
誤用を、単なる例えで逃げられましても。
百歩譲って、「幅×高さ×赤×緑×青」として その位置には
いったい何が保管されているんだい? ディスプレイだよね?
802デフォルトの名無しさん:2008/08/06(水) 02:41:00
>>794
こういう妄想90%の「説明ぶり」を見るとゾッとする。新語創造癖も併発してるし。
803デフォルトの名無しさん:2008/08/06(水) 02:48:05
>>797
> いま君が使っているディスプレイの点は5次元で表現できるよ。
> 幅×高さ×赤×緑×青
> ドゥユーアンダスタンンンドゥ

何というキチイガ!!
804デフォルトの名無しさん:2008/08/06(水) 02:54:25
>>797
ドゥユーアンダスタンンンドゥ と言ってる本人が一番理解できてませんw
805デフォルトの名無しさん:2008/08/06(水) 03:00:57
>>797の人気に嫉妬
806デフォルトの名無しさん:2008/08/06(水) 03:18:46
4次元の世界とは、たて×よこ×高さ×ななめ
・・・って言ったのは、どこのどいつだったか
つつい忘れてしまった。
807デフォルトの名無しさん:2008/08/06(水) 04:06:41
perl -le 'print $_ for @INC'
とか実行すると、モジュールを探しに行く先(?)が表示されますが、
これはどこで定義されているものなのでしょうか?
また、スクリプト中で指定せずともここにパスを追加する事は出来るのでしょうか?
808デフォルトの名無しさん:2008/08/06(水) 04:17:14
perl --help
809デフォルトの名無しさん:2008/08/06(水) 04:43:15
>>808
-Iの事ですか?であれば確認してあります。
もっと細かく言うと、-Ipath/to/modules みたいな事をしなくても、
上記であげたワンライナーで既に定義済のものと同じ扱いで定義する事が出来るのかを知りたいです。
興味本位で質問していますので、通常こういったケースではこうするというようなアドバイスは不要です。
よろしくお願いします。
810デフォルトの名無しさん:2008/08/06(水) 06:49:42
>>795
そりゃ、
投稿番号、投稿データ
というくくりでみれば、2次元だけど、それは5次元のなかの上記部分で抜き出した
所をみているだけにすぎない!
っていったらだめかな?(投稿番号まで自由にさせれば6次元だぜ)

そもそも投稿データというのは掲示板のみてくれによって、データ同士でくくりがあって
ひとまとめに表示しなくてはいけない場合もあるし(レス番号とか、アカウント別とかね)
、だから単純に2次元という視点じゃ、結局(無名)ハッシュとしての利点をみることが
できず、足んない@配列的な思考しかできなくなると思うよ。実際、俺自身が初心者から
数年、抜けきれなくてくろうしたもん。



811デフォルトの名無しさん:2008/08/06(水) 06:55:35
続き、無名ハッシュとリファレンスの実用的な使い方を理解したときに、
@配列的思考の呪縛から解き放たれた感じがしたんだよね。

だいたい、データをどう頭の中でとらえておくか?っていうのはまさに
無名にしておいて浮遊間をあたえておかないと、損だよね。そこから、
ときには2つを抜き出し2次元にして(ソートして)ほかのデータを
それにそってそろえたり、一部のデータをキーにしてほか関係あるデー
タを抜き出してならべたり、そういう思考ができるの無名ハッシュで
多次元でっていう思考が必要かと思う。(多次元っていうと問題なら、
浮遊間でもいいけど、次元固定しちゃいけないって意味で。)
812デフォルトの名無しさん:2008/08/06(水) 08:04:28
>>798
定義として「n個の変数でn次元を表す」というのと、
具体的にそのすべての「点」の値を(プログラム内で)保持する、とかいうのは
また別の話だろ。
813デフォルトの名無しさん:2008/08/06(水) 09:12:32
pythonやrubyとかだと検索すると、リストで返って来るから分かり
やすいんだけど、perlの場合の挙動が良く理解できてない。htmlから
<td>の要素を全て検索して、表示するってコードはこんな感じが
スタンダードですか?

 23 foreach($content=~/<TD>(.+?)<\/TD>/g){
 24   print;
 25   print "\n";
 26 }
814デフォルトの名無しさん:2008/08/06(水) 10:32:55
>>807,>>809
イマイチなにがしたいのかよくわからないけど、@INCはどこで定義されてるか?
ってことについては、コンパイル時にCoreに組み込まれる。
正確に言うと、configureオプションの-Dprivlib,-Dsitelib,-Dvendorlib,とか-Dinc_version_listらへんかな。

これを後から動的に追加とかしたかったら、-Iオプション使うか、
スクリプトの中で
use lib '/path/to/...'するか、はたまた
our @INC;
push(@INC,'/path/to/...') (かunshift)とかするしかないんじゃないか。

ほかのやり方があるかも知れないけど、オレは知らない。あったら誰か教えて。
815デフォルトの名無しさん:2008/08/06(水) 11:58:40
なんという夏休み
816デフォルトの名無しさん:2008/08/06(水) 12:26:36
掲示板データが6次元とかwテラ異次元w もういやだ 早く夏休み終わってくれw
817デフォルトの名無しさん:2008/08/06(水) 12:29:25
夏休みになると、知能遅滞者が野に放たれるのか……
818デフォルトの名無しさん:2008/08/06(水) 12:42:54
>>809
添付マニュアルのperlrunに書いてあるってことまで特別サービスでa教えてやるから、
あとは自分で読みなさい。
819デフォルトの名無しさん:2008/08/06(水) 12:45:41
>>810
> そりゃ、
> 投稿番号、投稿データ
> というくくりでみれば、2次元だけど、それは5次元のなかの上記部分で抜き出した
> 所をみているだけにすぎない!
> っていったらだめかな?(投稿番号まで自由にさせれば6次元だぜ)

完全にデタラメ。

820デフォルトの名無しさん:2008/08/06(水) 12:58:33
多次元データの掲示板とかどんだけカオスなんだよ
821デフォルトの名無しさん:2008/08/06(水) 13:01:18
とりあえず、多次元というのが良い釣り餌になるのは理解した。
822デフォルトの名無しさん:2008/08/06(水) 13:11:57
>>820
おまえん家のモニタも5次元データで動いてるらしいぞw
823デフォルトの名無しさん:2008/08/06(水) 13:15:58
::::::::::::::::::;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;`ヽ、::::::::::::::::::/
:::::::::::::::::::::::::::::___;;;;;;;;;;;;;;;;;;;;;;;;;;;;;`ヽ、:::::::/
::::::::::::::::::::::::::::::::::::::::::::::::`ー--、_;;;;;;;;;;;;;;;;;;`ヽ′
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::`ー--、__/
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::`ヽ、
:::::::::::`ー―――----、____::::::::::::::::::::::::::`ー-、
:::::::::::{  |:::::::|     `ヽ、__,.-‐〈 ̄ ̄ ̄ ̄`ー`ヽ、
:::::::::::ヽ |:::::::|                ヽ、___,.-‐一'´
:::::::::::`′j:::::::|            -__ゝ
  ヽ、_ノ!:::::::l    ´ヽ、     /
      l:::::::l、     ヽ-、__ゝ
      ヽ:::::::ヽ     `ー--!、
  ―--、  ヽ:::::::ヽ、     ー-<   ,ィノ|_,
::::::::::::::::::::::`ヽL:::::::::::`ヽ、   ,ィノ`ー'´:::::::ノ′
______ヽ、:::::::::::`ヽ-イ′:::::::::::::::/
:::::::::::::::::::::::::::::::::`ー――---、___/
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: ̄ ̄`ー――--、 呼ばれたような……
824デフォルトの名無しさん:2008/08/06(水) 13:18:48
お帰り下さいませ!ご主人様!
825デフォルトの名無しさん:2008/08/06(水) 14:08:34
http://www.nicovideo.jp/watch/sm4187970
perlでこれできないの?
826デフォルトの名無しさん:2008/08/06(水) 14:22:11
cでできてperlにできないことなんてないお
827デフォルトの名無しさん:2008/08/06(水) 14:24:12
でもネットハックは作れないって鼻で笑われたお
828デフォルトの名無しさん:2008/08/06(水) 14:49:40
>>827
作れるだろ,がんばれば
829デフォルトの名無しさん:2008/08/06(水) 15:26:57
>>819
完全にデタラメってどこがでたらめなんだよ? 自分にはデータ配列をつかっていかように
にも組み合わせて、高次元のものとしても やろうと思えば、できるっという意味に
とれらんだけど、そうじゃないのか? それとも単に掲示板で多次元配列はナンセンスって
ことがいいたいだけなのか?

というか、ここの連中って人の批判するなら、自分なりの根拠を書いてほしいね。
ただ嫌みを書き捨てるやつは最低だよ。
いろいろと参考意見を書いてもらう方が初心者にとって遥かに参考になる。
830デフォルトの名無しさん:2008/08/06(水) 15:36:08
ここをどこだと思っている
831デフォルトの名無しさん:2008/08/06(水) 15:37:58
>>829
くだらない言い争いはどっか別の場所でやってくれ
832デフォルトの名無しさん:2008/08/06(水) 15:57:32
>>819
デタラメって、どこがどうデタラメなのか指摘もできないなら、捨て台詞なんて
書き込むないでほしいなぁ。こっちは誠意をもって書き込んでいるんだから、
間違いがあるなら指摘するのが筋ってものだと思うが。

自分の文句がある部分でさえ説明できないなら、書き込まないでね。

833デフォルトの名無しさん:2008/08/06(水) 15:58:34
もう自演はおなかいっぱいです
834デフォルトの名無しさん:2008/08/06(水) 16:00:37
>>833
文句あるなら、間違いを指摘しろってんだを、ぼけ、死ねや
835デフォルトの名無しさん:2008/08/06(水) 16:04:54
とりあえず、多次元についての説明求む! なにがデタラメなのか知りたい
から。できる人にとっても説明が難しいのかな。
836デフォルトの名無しさん:2008/08/06(水) 16:06:52
>>829
> 完全にデタラメってどこがでたらめなんだよ?

「このF1レースカーは」と言いながら自転車を指さしている行為に例えられるデタラメだな。
837デフォルトの名無しさん:2008/08/06(水) 16:39:49
イェイ発見
838デフォルトの名無しさん:2008/08/06(水) 17:18:13
>>747の、名前、メールアドレス、投稿日時、投稿内容、レス番という
5つの要素で構成されたデータを5次元とすると、
各次元が次元の構成要素として成り立つのかどうか。

わかりやすく要素を名前、投稿日時、投稿内容の3つに絞ろう
これを一般的な3次元の座標に置き換えてみる
名前は、まぁ1つの次元と捕らえて良いだろう
投稿日時はどうか?利用者による投稿時間分布を考えれば、これもアリだ

さて、投稿内容はどうだろうか?
投稿内容をキーにして、利用者や投稿時間が多次元的に存在するかどうか。

データの正規化ってこういうことだよな?
5つの要素を5次元として考えたらひどいDBになるんじゃないか?
839デフォルトの名無しさん:2008/08/06(水) 18:32:46
こわいよママー
840デフォルトの名無しさん:2008/08/06(水) 20:36:39
根本的に多次元配列を勘違いしてる奴が多くないか?
配列の項目要素を多次元化して何か1つを指し示すのが多次元配列だろ?

もっと簡単な例で考えてみな
 渋谷区->渋谷->1丁目->3番地->2号
ならすでに5次元配列だ
2次の要素が南青山になったりすると3次の丁目以降も変わる
4次の3番地が変わる事もある
で、最終的に号まで指定すると何かを指し示す事になる(住所そのものが目的にもなるけど)

掲示板はどうだ?
 名前->メールアドレス->投稿日時->投稿内容->レス番
として管理する必要があるか?
これらは並列に並んでこそ1つのデータなわけだ
 名前->メールアドレス->投稿日時
までが同じでその先が枝分かれするような事は偶然かSPAM的要因以外には無いだろ
そして、少なくとも投稿内容が配列の要素になる事だけはあり得ないな
841デフォルトの名無しさん:2008/08/06(水) 21:11:35
たすけてママー
842デフォルトの名無しさん:2008/08/06(水) 21:54:37
手軽にデータ構造
my %data = (
     1 => { name=>"たろー", mail=>"sage\@sage.sage", date=>"2001/01/01" },
     2 => { name=>"じろー", mail=>"sage\@sage.sage", date=>"2001/01/01" },
     3 => { name=>"生きてた", mail=>"sage\@sage.sage", date=>"2001/01/01" },
     4 => { name=>"うれぴー", mail=>"sage\@sage.sage", date=>"2001/01/01" },
);

print $data{1}{name};
print $data{1}{mail};
print $data{1}{date};
843デフォルトの名無しさん:2008/08/06(水) 21:57:57
ちょww南極自重wwww
844デフォルトの名無しさん:2008/08/06(水) 22:30:13
>>829
次元を自由度という意味で使っているように見えるけど、この文脈だと誤解を与える。
845デフォルトの名無しさん:2008/08/06(水) 22:38:48
BASIC時代だと、リファレンスのような概念が無かったので、何でもかんでも二次元配列にしてたような気はする。

my $NAME = 0;
my $MAIL = 1;
my $DATE = 2;

my @data = (
    ["るどるふ", '[email protected]', '2001/01/01'],
    ["いっぱいあってな", '[email protected]', '2001/01/01'],
    ["ひゃくまんかい", '[email protected]', '2001/01/01'],
    ["いきたねこ", '[email protected]', '2001/01/01'],
);

print $data[0][$NAME];
846デフォルトの名無しさん:2008/08/06(水) 22:55:47
ああ、なんだ、どうにもこうにも意味不明だと思ったら、「5次元のデータ」と「5次元配列」をごっちゃにしたやつがいたのか……。
[a, b, c, d, e] ← 5次元空間の中の1点を指す5次元のデータ。
[a][b][c][d][e] ← 5次元空間のある範囲を埋める5次元配列。
847デフォルトの名無しさん:2008/08/06(水) 23:22:15
>>844
> 次元を自由度という意味で使っているように見えるけど、この文脈だと誤解を与える。

「自由度」が未定義なので意味不明。
848デフォルトの名無しさん:2008/08/06(水) 23:23:18
なにこの夏休みムード…うらやましいな
んで、この板IDないから誰がなに言ってるのかさっぱりわからんので
コテかトリップつけてくれorz

そもそも掲示板のデータてわざわざ全データを変数に取り込む必要なくね?
while(<$ファイルハンドル>){
my @データ = split /$区切り文字/,$_,$項目数;
#場合によってはハッシュに変換
出力処理(\@データ);
}

それともMLDBMでも使ってるのか???

仮に取り込む必要があっても
掲示板のレス番ならIDはほぼ隙間無く並べられてるはずなので
$data[$idx] = {...};か
$data[$idx] = [...];だろ

普通の配列にハッシュのリファレンスが入ってる
普通の配列に配列のリファレンスが入ってる
ってだけで次元とかまったく関係ない話だろ。

849デフォルトの名無しさん:2008/08/06(水) 23:48:45
5次元とかお前ら学者か何かか?
ここは何かしらの目的があってそれを達成する方法を聞く所だろ
問題があってそれの解決方法でもいいけど

配列で5次元がどうだとか、perl関係ないんだからよそでやれよアホ
850デフォルトの名無しさん:2008/08/07(木) 00:48:04
>>791
少しも異常ということはなく普通だと思います。Perl land において少数派ではあるというだけで。
そしてそんなあなたのために、 CPAN が Variable::Strongly::Typed を用意して待っています。裸エプで。
851デフォルトの名無しさん:2008/08/07(木) 01:25:48
良い子のみんな!

WebProg
http://pc11.2ch.net/php/

という、みんなにぴったりの掲示板があるよ!
852デフォルトの名無しさん:2008/08/07(木) 01:57:35
ζ           ______,―――-
ζ        /\__  ̄      \
ζζ       /             ~|
ζ       |        _____ ヽ
         | ̄ ̄――-~        ̄ヽ
ζ      /                ヽ
ζζ    /^ソヽ   __/ ̄ ̄ヽ――〜^^\
 ζ /      ̄ ̄              \
  ζ                          \
/ζ                 _          /
 ζζ 〜^^\,,_____,,__,/ ヾ/ヽ―ヽ___/
 ζ     /    |         ヾ /^ ヽ  \
 ζζ    ヽ   /          / | |λ| |  / ̄ ̄ ̄ ̄ ̄ ̄
  ζ     ヽ ヽヽ      / |  |/ //<  夏だな、ルパン
  ζ      |         /  ゞ  |__/  \______
   ζζ   ヽ ーヘ――  |  |  /     /
     ζ   | // ̄^~   ,/^  /―ヽ  /
      ζζヾ /     /ヽ/ /_ _―― <
        /|ゝ/ ヾヽw~ヾ/ ̄ ̄_ ̄ ̄ ̄ ̄\
       ///  | |/ ̄ ̄ ̄ ̄\     | /
  ,  _从〃 / // //         ヽ   \
ヾヾ_ // ,///           |     \
  ヾ_// /~/ /   ノ      |      |
   彡 彡,,/w/  /  __/        |      |
        /             /_ノ       |
853デフォルトの名無しさん:2008/08/07(木) 02:37:42
>>813
foreach my $textbody ( $content =~ m{<td(?:\s[^>]*?)?>(.+?)</td>}gis ) {
print $textbody, "\n";
}

# foreach の条件部はリストコンテキスト。

# m//g はリストコンテキストではマッチ内容リストか、
# またはキャプチャがあればキャプチャ内容のリストを返す。
# スカラコンテキストでの挙動は宿題。調べりゃ分かる。

# <td> には属性が付いて来ることがあるかもしれない。
# <td> かもしれないし <TD> かもしれない。
# 少し丁寧にレキシカルな名前付きループ変数を使う。
# 他にも配慮した点があるかもしれない。探してみよう。
# 改良の余地があるに決まっているので挑戦してみよう。

# 思い付きで書いた。後悔とテストはしていない。
854デフォルトの名無しさん:2008/08/07(木) 03:24:23
5.10の新機能の
sayと、~~について語って。
855デフォルトの名無しさん:2008/08/07(木) 03:32:43
perlレベル2
レファレンス、デレファレンス、型グロブ、レポートフォーマット、
CGI全般
856デフォルトの名無しさん:2008/08/07(木) 03:39:18
use warnings;
use strict;

use utf8;
use open IO => ":encoding(cp932)";
binmode STDIN => ":encoding(cp932)";
binmode STDOUT => ":encoding(cp932)";
binmode STDERR => ":encoding(cp932)";
use Encode;

use feature qw( :5.10 );
$|=1;
#----------------------------------
say "スライムが現われた!";
857デフォルトの名無しさん:2008/08/07(木) 03:58:23
あれ?
Perlはswitch caseでなくて、
given whenになるの?
858デフォルトの名無しさん:2008/08/07(木) 04:28:52
use warnings;
use strict;

use utf8;
use open IO => ":encoding(cp932)";
binmode STDIN => ":encoding(cp932)";
binmode STDOUT => ":encoding(cp932)";
binmode STDERR => ":encoding(cp932)";
use Encode;

use feature qw( :5.10 );
$|=1;
#----------------------------------
my $foo;

given ($foo) {

when (/^abc/) { my $abc = 1; }
when (/^def/) { my $def = 1; }
when (/^xyz/) { my $xyz = 1; }
default { my $nothing = 1; }
}

↑これを実行すると、
Use of uninitialized value $_ in pattern match (m//) at untitled2.pl line 18.
Use of uninitialized value $_ in pattern match (m//) at untitled2.pl line 19.
Use of uninitialized value $_ in pattern match (m//) at untitled2.pl line 20.
といわれます。$-の初期化なんてどうすればいいの?
859デフォルトの名無しさん:2008/08/07(木) 04:43:00
no warnings;
860デフォルトの名無しさん:2008/08/07(木) 06:13:16
>>859
そんなことしたら警告が見れないじゃないですか。
それとも、警告が出ても、無視していい場合もあるの?
861デフォルトの名無しさん:2008/08/07(木) 06:55:36
$foo が undef -> undef を $_ に代入 -> when の正規表現対象が undef
なんすけど如何致します?

って事じゃねえの?手元に無いから確認でけんがさ。
862デフォルトの名無しさん:2008/08/07(木) 13:08:29
>>857,858
perldoc について調べてください。
お望みの情報はあなたのコンピュータの中にあります。
perldoc perlsyn の中の "Switch statements" の項をご参照下さい。
その他新機能については perldoc feature で確認することができます。
どうぞよろしくお願いします。
863デフォルトの名無しさん:2008/08/07(木) 16:45:43
perldoc perlsyn Switch statements

これでいいの?
864デフォルトの名無しさん:2008/08/07(木) 16:53:49
今回の警告は無視してもいいの?
だめなの?
865デフォルトの名無しさん:2008/08/07(木) 16:56:54
かまわないよ
866デフォルトの名無しさん:2008/08/07(木) 17:06:56
          , -ー --、_
       ,,..- し、_,、_, - ' `ヽ、
      /             \
    /      /__ \ __ ヽ
   /  ,,.. -ー/ - 、  ,..- 、 \ ー-`、ヽ.、
   !,.-'' ..- '' ./    V   ヽ    .` Y  むーし むーし
   (,,.-''´   l    ・ |   ・ .i     |
   .|     .!     八    ノ     |
    !     .` ─ ´   ` ー ´      /    お疲れ様でしたー
    人       , ェェェ;、       ./
  /  \ \    ゝ─ー'   / /  \
 /     ` 、_` ─-----─''_´- "´   r''''''''つ
 |        . ̄r'''''''''つ ̄       |   |
 |         |   | |         ゝ 丿
 |         |  丿.|          フ
 .\        ` " .|     _ _ ,.イ
  | `ー──────┴─'"´ ̄    /
  と" ̄ ̄ ̄ ̄ ̄`ー-ー" ̄ ̄ ̄ ̄ ̄ ヽ
867デフォルトの名無しさん:2008/08/07(木) 17:16:07
しかし警告が出ないように書く方法はあるんですか?
ないんですか?

perldocは今よんでるところです
868デフォルトの名無しさん:2008/08/07(木) 17:21:56
>>867
my $foo = '' ;
869デフォルトの名無しさん:2008/08/07(木) 17:29:53
>>868
中身になんかを入れなさい、って意味の警告だったの?
870デフォルトの名無しさん:2008/08/07(木) 17:36:34
>>869
そうだけど…
871デフォルトの名無しさん:2008/08/07(木) 17:37:31
>>868
解消されたのか?w
>>861に書いた通りの筋書なら given 時に $_=$foo されて
当然 $_ は undef だった訳だが…
872デフォルトの名無しさん:2008/08/07(木) 17:39:24
when(undef){}
いれときゃいいだろ。
873862:2008/08/07(木) 22:02:17
>>863
それはやってみたらすぐにわかりましたよね。^^
何かわからないことがあった時にはまず試してみて、試してうまくいかなかったら、perldoc や Web や本で調べてみて、それでわからなかったら質問、という順番にしてもらえると助かります。
試してすぐにわかることや、すぐに説明が見つかるようなことは、答えるほうもあまりおもしろくありません。試し方や調べ方を知っていれば、ほとんど誰でも解決できてしまうことだからです。
また、そういった種類のことで、たくさんの人が質問したり過去ログを読んだりする掲示板を埋めてしまうのは残念でもあります。
調べ方を身につければ、誰かがあなたの代わりに調べなくても済むようになり、あなたも回答を待たずに済みます。
ぜひよろしくお願いします。
874デフォルトの名無しさん:2008/08/07(木) 22:23:38
読みづらいことは投稿の段階でわかりましたよね。^^
投稿の前には読みづらくないか試してみて、読みづらかったら改行などを入れてみて
それで読みやすくなったら投稿という順番にしてもらえると助かります。
明らかに改行すべきレスは読んでいる方も面白く有りません。
そういったレスでスレを埋めてしまうのは残念です。
改行の仕方を覚えればきれいに読めるようになり汚いレスをみずにすみます。
是非よろしくお願いします。
875デフォルトの名無しさん:2008/08/07(木) 22:35:19
use warnings;
my $foo = undef;
print 'Switch statements を調べさせても解決せんだろ' if $foo =~ /.*/;
876デフォルトの名無しさん:2008/08/07(木) 23:52:30
$str = "[email protected]"
と代入した後、

if ( $str =~ /(.+)@(.+)/ ) {
$a = $1;
$b = $2;
}

とやっても、パターンマッチしません。
パターンマッチ中の @ を \@ としても駄目でした。
$str に代入文字列の @ を \@ と置き換えるとマッチしました。
しかし、実際、ここには、メールのログからパースしたメール
アドレスがそのまま入ってくるので、\@ とは出来ません。
どうやったらうまくマッチさせられるでしょうか?
877862:2008/08/08(金) 00:02:53
>>874 すみませんでした。

>>875
>>857 に対しては有効だと思います。いわゆる switch を Perl で実現する構文についての説明そのもので、それが given () { when () {} } であること及びその詳細が明記されています。
>>858 に対しても同様で、"given(EXPR)" will assign the value of EXPR to $_ within the lexical scope of the block, から始まる部分に警告内容に関わる動作仕様について述べられています。
うまくいけば参考にして解決できますし、よしんば解決に至らなかったとしても、perldoc を引く練習にはなるはずです。
役に立っていてくれるとうれしいです。
878デフォルトの名無しさん:2008/08/08(金) 00:05:08
>>876
まあとりあえずこれを実行してみろ。
$str = "[email protected]";
print $str, "\n";
その次はこれな。
@bbb = ("X", "Y", "Z");
$str = "[email protected]";
print $str, "\n";
879デフォルトの名無しさん:2008/08/08(金) 00:09:16
>>876
m'(.+)@(.+)' をどうぞ。
880876:2008/08/08(金) 00:10:55
おっと、リテラルじゃなかったのね。失礼。>>878 をどうぞ。
881880:2008/08/08(金) 00:13:13
s/名前:876/名前:879/; # もちつけ俺
882デフォルトの名無しさん:2008/08/08(金) 00:48:28
>>878-879 さん
問題点が判り、やりたいパターンマッチが出来ました!
ありがとうございました。
883デフォルトの名無しさん:2008/08/08(金) 01:59:34
可能性(1)>>868

可能性(2)>>872

可能性(3)>>875


さて、どれが正解だろう?
884デフォルトの名無しさん:2008/08/08(金) 02:11:07
可能性(1)>>868 → 解決された

可能性(2)>>872 → 解決された

可能性(3)>>875 → 解決されなかった


(1)と(2)では、
双方とも解決はできたが、
読んでわかりやすいのは(1)かな?
885875:2008/08/08(金) 02:22:45
同じこと言われるもんを書いただけだから動かしても解決はしないよ。
use warnings して何を言われてたのか気付いて欲しかっただけで。
886デフォルトの名無しさん:2008/08/08(金) 02:42:35
Perlもアイテム課金にすりゃーいいのに。
そうしたら親切ていねいなチュートリアルくらい
作るだろう。人口が増えた方がもうかるから。
887デフォルトの名無しさん:2008/08/08(金) 03:21:10
>>886
単純で羨ましいです
888デフォルトの名無しさん:2008/08/08(金) 03:40:00
無料のPythonに人が流れるよ
889デフォルトの名無しさん:2008/08/08(金) 04:20:17
今のご時世に字下げを強制するのは惨すぎる。
FORTRANじゃあるまいし。
懐古趣味のオッサン言語やな。
890デフォルトの名無しさん:2008/08/08(金) 04:22:39
そう思っていた時期が僕にもありました
891デフォルトの名無しさん:2008/08/08(金) 04:58:54
forは無料だけど、whileは有料ですみたいな
892デフォルトの名無しさん:2008/08/08(金) 06:58:12
いやwhileは無料だろう。 foreachはしょうがないかもしれんが って何の話だよ
893デフォルトの名無しさん:2008/08/08(金) 08:45:32
じゃあwhileは無料アイテムね。

foreachは有料課金アイテムで、
ゲーム内通貨で50ゴールド。
894デフォルトの名無しさん:2008/08/08(金) 08:46:04
http://www.cgis.jp/charge.html

おまいらって時給5,000円なの?
すごいね。
895デフォルトの名無しさん:2008/08/08(金) 09:46:20
もしかしてrequireって日本語ファイル名はだめ?
英語にしたら成功したんだけど。
896デフォルトの名無しさん:2008/08/08(金) 09:49:42
my $file = 'テンプレ1.pl';


require 'encode("cp932", $file)';

↑これだとだめなのかな?
897デフォルトの名無しさん:2008/08/08(金) 10:12:52
下ので require できるようなファイル名はあんまりつけないと思うよ。
898デフォルトの名無しさん:2008/08/08(金) 10:18:59
そもそもどんなファイル名にも日本語なんか使うなよ・・・
899デフォルトの名無しさん:2008/08/08(金) 12:37:43
人それぞれ事情があるんだから、
事情も知らずに他人の仕事内容を強制するような意見は見苦しい。
900デフォルトの名無しさん:2008/08/08(金) 12:41:30
まあ英語だと汎用性が有るよってぐらいだね
901デフォルトの名無しさん:2008/08/08(金) 13:02:07
日本語だと何のファイルかわかりやすいってぐらいだね
902デフォルトの名無しさん:2008/08/08(金) 13:19:32
ファイル名にはIOレイヤみたいの用意されてないからめんどくさいんだよね。
903デフォルトの名無しさん:2008/08/08(金) 13:49:54
>>894
それはマッサージ師に
「おまいらって時給6,000円なの?」
って聞いているようなもんだぞ。
904デフォルトの名無しさん:2008/08/08(金) 21:23:33
いや、まじで、日本語のファイル名は
requireできないの?
それとも、できるの?
905デフォルトの名無しさん:2008/08/08(金) 21:24:28
あーでも、もし日本語のファイル名でrequireできるとしても、
最終的にはレンタルサーバーにアップロードして
urlの一部になる可能性があるわけだから、全部
英語にしておいたほうがいいの?
906デフォルトの名無しさん:2008/08/08(金) 21:26:30
日本語じゃなきゃいけない理由があるの?
907デフォルトの名無しさん:2008/08/08(金) 21:37:34
なぁ世紀の超絶スクリプト言語、
すべての問題を解決するPerl6は
どうしちゃったんだ?
ちんぽ握ったまま、もう10年近くまってるんだが
908デフォルトの名無しさん:2008/08/08(金) 21:47:50
Perl6さんはそのちんぽと一緒に壊死したよ
909デフォルトの名無しさん:2008/08/08(金) 21:56:37
以下のようにスレッドとネットワークの実験をしていたところ躓きました。port1にtelnetで接続後、port2に接続しても望んだ動作(接続後コマンド画面にすぐ戻る)をしません。どこを書き直せば良いのでしょうか。ご教授下さい。
use strict;
use warnings;
use threads;
use IO::Socket;
use IO::Select;

my $port1 = 7000;
my $port2 = 7001;

my $sock1 = IO::Socket::INET->new(LocalPort => $port1, Listen => SOMAXCONN, Proto => 'tcp', Reuse => 1,);
my $sock2 = IO::Socket::INET->new(LocalPort => $port2, Listen => SOMAXCONN, Proto => 'tcp', Reuse => 1,);

my $selecter = IO::Select->new;
$selecter->add($sock1);
$selecter->add($sock2);
910909の続きです:2008/08/08(金) 21:57:50
while( 1 )
{
my ($active_socks) = IO::Select->select($selecter,undef,undef,undef);

foreach my $sock ( @{ $active_socks } )
{
if( $sock == $sock1 )
{
my $thr = threads -> create( \&thr1 );
$thr -> detach();
}
elsif( $sock == $sock2 )
{
my $thr = threads -> create( \&thr2 );
$thr -> detach();
}

}
}

sub thr1()
{
my $new_sock = $sock1->accept;
$new_sock->close();
}
sub thr2()
{
my $new_sock = $sock2->accept;
$new_sock->close();
}
911デフォルトの名無しさん:2008/08/08(金) 22:09:00
while(1){}中にlast条件が無いんだけど無限ループになんない?
つかwhile(1){}で囲む意図は?(そんなもんなのかな?IO::Socket知らないから…)
912909の続きです:2008/08/08(金) 22:12:20
サーバープログラムなので繰り返し接続待ちできるようにするための無限ループです。
タブが消えてしまい読みづらいので全角スペースで置き換え、while以降を再度書き込みます。

while( 1 )
{
 my ($active_socks) = IO::Select->select($selecter,undef,undef,undef);

  foreach my $sock ( @{ $active_socks } )
  {
   if( $sock == $sock1 )
   {
    my $thr = threads -> create( \&thr1 );
    $thr -> detach();
   }
   elsif( $sock == $sock2 )
   {
    my $thr = threads -> create( \&thr2 );
    $thr -> detach();
   }
  }
}

sub thr1()
{
 my $new_sock = $sock1->accept;
 $new_sock->close();
}
sub thr2()
{
 my $new_sock = $sock2->accept;
 $new_sock->close();
}
913デフォルトの名無しさん:2008/08/08(金) 22:39:53
tab1個を、全角スペース2個に
置き換えるスクリプトは、s///?
それとも、tr///?
914デフォルトの名無しさん:2008/08/08(金) 22:40:58
コマンド画面ってのがコマンドラインの意味なら無限ループ抜けないんだから戻る訳
無いんじゃ?
915デフォルトの名無しさん:2008/08/08(金) 22:41:44
>>913
やってみれ。
916デフォルトの名無しさん:2008/08/08(金) 22:42:10
>>913
s///
917デフォルトの名無しさん:2008/08/08(金) 22:49:18
>>909
こういう話に見えてしまったのは酒のせいなのか
% perl 909.pl &
918デフォルトの名無しさん:2008/08/08(金) 22:55:28
>(接続後コマンド画面にすぐ戻る)をしません。

$ とか、C:> とかが出ないで待ち状態になる、って意味かな?
919デフォルトの名無しさん:2008/08/08(金) 23:56:52
また、自分でデバッグしないで質問か。
920デフォルトの名無しさん:2008/08/09(土) 11:00:56
自分で作ったファイルは、libと、site/libと、
どっちのフォルダにつっこめばいいの?

@incを見ると、libと、site/libと、2つのフォルダを
見てるようなんだけど。そのうちのどっちかに
突っ込めばいいんだよね?

で、普通はどっちに入れておくのかな?
921デフォルトの名無しさん:2008/08/09(土) 11:01:35
それで、日本語のファイル名は、
requireで呼び出せない、っていうことで
FAですか?初心者向けの解説サイトとかに
書くかもしれないんで、なるべく正確に答えてください。
922デフォルトの名無しさん:2008/08/09(土) 11:05:02
サブルーチンで、引数を受け取るには、
絶対に、@_を使わないとだめなの?
923デフォルトの名無しさん:2008/08/09(土) 11:46:59

その程度で解説サイトとかやめてくれ
924デフォルトの名無しさん:2008/08/09(土) 11:48:11
てかさ、サブルーチンの中で
引数をうけるとき、かならず

($c)=@_;

ってしないとだめなのな。
うっかり

         $c=@_;

って書いたら、配列の格納されている要素の個数が
代入されてしまって、原因突き止めるのに1時間かかったよ。
925デフォルトの名無しさん:2008/08/09(土) 12:02:51
世界のwebサイトのSN比は日本語サイトに限らず、
どんどん2chの水準に近づいている。

webの熱死は近い。
926デフォルトの名無しさん:2008/08/09(土) 12:39:18
>>921
サイトを作るのは構わんが、絶対に嘘は書くなよ
しっかりと調べて書け

じゃないとお前の嘘を信じてバカを見る奴が出てくる
927デフォルトの名無しさん:2008/08/09(土) 12:59:33
あの一連の書き込みから精神病の臭いを嗅ぎ取らない奴ってなんなの?
928デフォルトの名無しさん:2008/08/09(土) 13:31:45
がちでヤバいやつはPerlなんか理解できないし
プログラマなんかは大なり小なり癖のある人が多いんじゃない
929デフォルトの名無しさん:2008/08/09(土) 13:32:56
>>921
何ができて何ができないか、原理も含めて理解せずに解説サイトなんか作るんじゃねえ、迷惑だ。
ちなみにrequireで読み込めるか否かは、そのファイルをopenで読み込めるか否かにかかってる。
日本語ファイル名の扱いはものすごく環境依存性が高いので、正確な説明なんて無理。
930デフォルトの名無しさん:2008/08/09(土) 13:39:53
>>920
自作のファイルについては、それがアプリケーション固有のものなら、それを置いてあるディレクトリに、環境変数PERL5LIBや-Iオプション、use lib等で@INCを操作してパスを通す。libやsite/libには入れない。
汎用的に作ったものについては、h2xsでモジュールの雛形を作成し、その中に自作のコードを突っ込んで、perl Makefile.PL、make、make installするとPerlのパッケージ管理機構がよきにはからってくれる。
931デフォルトの名無しさん:2008/08/09(土) 13:41:29
いや、原理とかどうでもいいし
「ボクのパソコンだとこうすれば出来ました」
って情報で十分だ。本当か嘘かは見た側が判断すればいい。
932デフォルトの名無しさん:2008/08/09(土) 15:00:38
>>921
>初心者向けの解説サイトとかに
>書くかもしれないんで、なるべく正確に答えてください。

初心者向け解説なら、>>4 のテンプレにある。
他の人も言っていることだが、
まず、自分自身が初心者であることをよく認識することだな。
933デフォルトの名無しさん:2008/08/09(土) 15:59:04
ディレクトリ舐めるとunicodeじゃなくてcp932でしかとれないからねぇ
934デフォルトの名無しさん:2008/08/09(土) 16:04:23
requireするファイルの最後に、
1を書けって書いてある書物と、
1;を書け、って書いてあるサイトと、
説明がバラバラです。
どっちが正しいですか?
935デフォルトの名無しさん:2008/08/09(土) 16:10:54
>>932
クックック、、、
まだ、、、私のことを「初心者」だと、、、思っているのか、、、?!
この私はすでにランダムに数値を生成し、
intで整数化し、その生成した数値をpushで
配列に投入し、しかも、その過程をwhileループで
10回繰り返し、しかもその結果をsay関数で
画面に出力するところまできているっ!!!

つまりっ、、、キサマこそが素人っ、、、、!!!
936デフォルトの名無しさん:2008/08/09(土) 16:51:25
require 'encode("cp932", $file)'; で探しに行くファイルはcp932ですらないよねえ。
個人的に「できるのかできないのかどっち?」「FAですか?」の人は初心者枠に入れてない。
937デフォルトの名無しさん:2008/08/09(土) 17:14:58
夏休み、早く終れ
938デフォルトの名無しさん:2008/08/09(土) 17:51:34
>>935
あのさあ、なんか一人で盛り上がってるけど
お前だけだよマジに成ってんの、他の人はそんなノリノリじゃないから
見苦しいよそういう書き込み、その口調で友達とかに話しかけてみれば?
939デフォルトの名無しさん:2008/08/09(土) 18:14:31
>>938
「目を合わせちゃダメよ! いないフリいないフリ」
940デフォルトの名無しさん:2008/08/09(土) 21:01:51
ID入れろよ運営
透明アボーンできねぇだろ
941デフォルトの名無しさん:2008/08/09(土) 23:36:05
>>924
せっかく空気読んで要素の個数返してるのに、、、っていう perl の愚痴が聞こえてきそうw
942デフォルトの名無しさん:2008/08/10(日) 01:28:17
>>928
>>927 のコメントもどうかとは思うけれど、「癖」なんつーレベルじゃないのも確かだ。
社会生活営めねーだろこれ。
943デフォルトの名無しさん:2008/08/10(日) 04:28:49
>>941
だなw

引数1つなら
 $c = shift;
で充分だろうに
944デフォルトの名無しさん:2008/08/10(日) 04:32:38
perlがしゃべったらおもしろいよな
「何か」みたいな。

「デフォルトの配列の先頭から
要素を一個取り出して、$cに入れときますねご主人様」

みたいな。
945デフォルトの名無しさん:2008/08/10(日) 05:09:36
($c) = @_;
$c = shift;
$c = $_[0]; # $[ == 0

意図してないんだろうけど使い回せるセリフにしてあるな
946デフォルトの名無しさん:2008/08/10(日) 05:43:41
さていまからハッシュの勉強をするお

strictの時、
ハッシュもつかいはじめるまえに
初期化しないとだめなの?

もしそうなら、ハッシュの初期化ってどうやるの?

配列の初期化はこのまえおそわったんだけど。
947デフォルトの名無しさん:2008/08/10(日) 07:00:41
print文の中で、
->
を使うと、何か問題ある?

say "$a -> $b";

みたいな。
948デフォルトの名無しさん:2008/08/10(日) 07:07:06
use warnings;
use strict;

use utf8;
use open IO => ":encoding(cp932)";
binmode STDIN => ":encoding(cp932)";
binmode STDOUT => ":encoding(cp932)";
binmode STDERR => ":encoding(cp932)";
use Encode;

use feature qw( :5.10 );
$|=1;
#----------------------------------

my $a;
my $b;
my %c;
my $d;

for ($d=1;$d<=10;$d=$d+1){

$a=int(rand(10000)) +1;
$b=int(rand(10000)) +1;
$c{$a}=$b;
say "($d)$a -> $b";

}

↑これってsay関数の””ダブルクオーテーション内部で()パーレン使ってるんだけど、
問題ある?無い?
問題あるけど、たまたま、うまく動いた?問題ないから動いた?
949デフォルトの名無しさん:2008/08/10(日) 07:34:27
use utf8;
use open IO => ":encoding(cp932)";
binmode STDIN => ":encoding(cp932)";
binmode STDOUT => ":encoding(cp932)";
binmode STDERR => ":encoding(cp932)";
use Encode;
use feature qw( :5.10 );
$|=1;
#----------------------------------
say "\n";
say "はーい、それでは、生徒番号で2人組み作ってー\n";
my $a;
my $b;
my %c;
my $d;
for ($d=1;$d<=10;$d=$d+1){
$a=int(rand(10000)) +1;
$b=int(rand(10000)) +1;
$c{$a}=$b;

}

my $count=1;
foreach my $key (keys(%c)) {
my $value = $c{$key};

say "($count)$key -> $value";
$count++;
}
print "\n\n";
say "先生!できました!\n";
950デフォルトの名無しさん:2008/08/10(日) 15:50:50
ちょっと質問させてください。

配布しようと思ってperlでカウンターなどを作っているのですが
ユーザー変数(パスワードとか背景色とか)って英語でどう書いたらいいでしょうか?
あとシステム変数(ユーザーが変えることが出来ない変数)も。
一応user variablesとsystem variablesとしてるのですが
プロの間ではこう書くみたいな定番な書き方はありますでしょうか?

ちょっとわかりにくくなったと思うので例

#!/usr/bin/perl

# user variables ←ここの名前と
$pass = 'abc123'

# system variables ←ここの名前を英語でかっこよく出来れば素人が知らないような単語で書きたい。
$a = $pass
951デフォルトの名無しさん:2008/08/10(日) 16:41:56
>>950 どう書いたらいいでしょうか? って聞かれたら、
内容が伝わる名前で、且つアホと思われない名前を好きな様に書けばいいんじゃね?としか言えん

俺から見たら『システム変数』、『ユーザー変数』とか日本語で解説と共に段落とって固めて書いててくれた方が見やすくて助かる

あとperlや他の言語もそうだけど、プロは居てもそいつらの間に定番なんて無いと思うぞ
せいぜいグローバルは大文字で書くのが通例とか、その程度しかない
会社によって命名規則が星の数ほどあるだけだ

お前さんの望みは配布ソース開いた人に対して
素人が知らないかっこいい単語書いててこの人かっこいいなぁとか思われたい訳なんだから、質問の仕方が少しおかしいぞ
952デフォルトの名無しさん:2008/08/10(日) 16:53:38
質問者の意図と関係ないけど $a を見るとシステム利用されそうだなと感じる
953デフォルトの名無しさん:2008/08/10(日) 17:21:17
#「変数名」の話だよね?コメントの行の書き方では無いよね?
「ハンガリアン記法」<- ぐぐれ
とか書き方はあるにはあるよ。
954デフォルトの名無しさん:2008/08/10(日) 17:24:11
>>952
$aは$[や$\と同じで特殊変数だから本来の用途以外に転用するのはよくない。
955デフォルトの名無しさん:2008/08/10(日) 17:31:55
コメントの行の話じゃないのか?
「ついでに変数名も」っていう風に読み取れなくは無いけど
変数名の付け方ならぐぐれば一杯出てくるはず

あと$aって特殊変数だったのか、知らなかった
956952:2008/08/10(日) 17:33:17
なんで sort を思い浮かべたこっちにレスついたんだろう。
お題はコメント行のほうなんだと思いますよ。矢印で指定されてる箇所。
957デフォルトの名無しさん:2008/08/10(日) 17:33:19
>>924
配列変数はスカラーコンテキストにおいて個数を返す。
一般的な方法 -> shiftとか添え字とかなんか

>>934
真を返すだけなので正しいとか別に。最後なのでセミコロンは省略できる。
全角で書かくと文字コードが違います。気持ち悪いです。

>>946
strictの仕様をよく読むよろし。
あと初期化じゃなくてただの宣言でいい。

>>947
printの中とか何か問題とか意味がわからないけど、
ダブルクウォートコンテキストに置いてはデリファレンスが優先される。

958950:2008/08/10(日) 17:36:46
>>953
コメントの行の書き方です。
日本語だったら自分でも考えられるのですが英語はどうも苦手で。
variablesとかsetupとかdifineとかいろいろあるのですが
プロのみなさんの間では何が一般的なのかな〜と思って質問してみました。
959デフォルトの名無しさん:2008/08/10(日) 17:38:37
>>957

->
をかくと、こっちはただの矢印の意味で
表示させたいだけなのに、perlタンが勝手に
特殊な意味で受け取ってしまうのではないか?
と心配なのです。

デレファレンスがこの場合、可能性があると
いうことですか?
960デフォルトの名無しさん:2008/08/10(日) 17:40:22
>>950
日本語で書けばいいじゃん
961デフォルトの名無しさん:2008/08/10(日) 17:51:28
>perlタンが勝手に
Perlは特定の誰かに合わせて仕様を変えない仕様で、調べてもらうことを前提に作られてます。
せっかくデリファレンスという餌を与えられたのに。。。
962デフォルトの名無しさん:2008/08/10(日) 17:52:41
Perlだけじゃないけど、
文字コードの日本語まわりの処理ってなんでこんなにクソなの?
マジでいい加減にしろよ。クソ野郎。
誰の責任だよ。出てこい。一発殴らせろ。
963デフォルトの名無しさん:2008/08/10(日) 18:04:02
つ JIS , NEC , M$ , IBM。
あと、UNICODEコンソーシアムでまともな提言も出来ずに支那文字、チョン便所文字と一緒くたにされた日本のヘタレ研究者。
964デフォルトの名無しさん:2008/08/10(日) 21:03:26
>>958
h2xs -X モジュール名
で拡張モジュールの雛形を作ってくれるので、それを見てみれば?
あんまり参考にならないかもしれないけど。
(というか、>>958のような区分にはなってない)
965デフォルトの名無しさん:2008/08/10(日) 21:14:30
>>958
> 英語はどうも苦手で。
> difineとかいろいろあるのですが
なにげにワロタ
966デフォルトの名無しさん:2008/08/10(日) 23:39:31
和んだ
967デフォルトの名無しさん:2008/08/11(月) 01:02:03
和んだ
968デフォルトの名無しさん:2008/08/11(月) 02:31:44
ワンダ - モーニングショット
969デフォルトの名無しさん:2008/08/11(月) 08:15:50
>>962
英語圏でないって時点で、プログラミングのハンデがあるのは仕方ないよ。
日本人はプログラミングの本道とは外れたしょーもない部分で引っかかって生産性を損失してる部分が多すぎる。
970デフォルトの名無しさん:2008/08/11(月) 08:42:42
requireのファイルの最後に、1を書かなくても
動いたのですが、これって書かなくてもいいってこと?
971デフォルトの名無しさん:2008/08/11(月) 08:43:13
””ダブルクオーテンションの中で、
->という記号を安易に使ってもいいの?

それともだめなの?
972デフォルトの名無しさん:2008/08/11(月) 09:22:55
>>970
最後に書いた文が式でその値が真なら動くよ。

初期化の成功失敗を伝えるために積極的に値を出し分けているんじゃなければ
最後に1;と書いといたほうが安心だし余計なところに頭を使わないですむので
みんなそうする習慣になっているというだけの話です。
973デフォルトの名無しさん:2008/08/11(月) 09:30:20
>>971
安易に使うのはいかなる場合でも感心しないな。

% perl -e '$x->{foo}="hoge"; print "$x, $x->{foo}, ${x}->{foo}, ->$x->{foo}"'
HASH(0x934e880), hoge, HASH(0x934e880)->{foo}, ->hoge
974デフォルトの名無しさん:2008/08/11(月) 09:46:24
>>973
半角スペースを開ければ問題ない?

- >

みたいな。
ようはデレファレンスとして解釈されてしまうんでしょう?
こっちは矢印記号として使いたいわけですが。
975デフォルトの名無しさん:2008/08/11(月) 09:47:50
>>972
でもさ、requireで呼び出して使う場合もあるし、
呼び出さないで単独でファイル単体で実行させたい
場合もあるし、単独で使う場合って、ファイルの最後に
1;
を書いておいても、なんら問題はないの?
余計な記号があると心配じゃん。
976デフォルトの名無しさん:2008/08/11(月) 10:31:17
数字を読み込んで、それをキャラクターにする
プログラムを組んでみようと思って、こう書いたんだ。

use warnings;
use strict;

use utf8;
use open IO => ":encoding(cp932)";
binmode STDIN => ":encoding(cp932)";
binmode STDOUT => ":encoding(cp932)";
binmode STDERR => ":encoding(cp932)";
use Encode;

use feature qw( :5.10 );
$|=1;
#----------------------------------
my $a;


for ($a=0;$a<=100;$a=$a+1){

say $a." ".chr($a);
}
977デフォルトの名無しさん:2008/08/11(月) 10:32:22
そしたら、DOSプロンプトに出力するバージョンは、うまく動いた。
そんで、こんどは、テキストファイルに出力してみようと思ったのさ。
そんで、次のコードを書いた。

use warnings;
use strict;

use utf8;
use open IO => ":encoding(cp932)";
binmode STDIN => ":encoding(cp932)";
binmode STDOUT => ":encoding(cp932)";
binmode STDERR => ":encoding(cp932)";
use Encode;

use feature qw( :5.10 );
$|=1;
#----------------------------------
my $a;
open (FILE,'> abc.txt') or die "$!";

for ($a=0;$a<=100;$a=$a+1){
say FILE $a." ".chr($a);
}

close (FILE);
978デフォルトの名無しさん:2008/08/11(月) 10:33:39
そんで、できあがったabc.txtを、サクラエディタで、
utf-8で開いてみた。そしたら、文字番号0〜32までが、
空白で、表示されてないのさ。

一方、DOSプロンプトに出したときは、文字番号0〜32も
変な記号でいろいろ出ていたのに。なんで?
979デフォルトの名無しさん:2008/08/11(月) 10:51:54
また新しいゲームのアイデア思いついたよ

配列Aを出して、mapで変換して、配列Bを表示する。
そんで、変換のロジックはブラックボックスにしておいて、
AとBだけを見せて、変換ロジックを推定する。

あたれば、得点。こういうゲーム。
980デフォルトの名無しさん:2008/08/11(月) 11:38:20
Perlの初心者です。教えてください。文字コードの問題です。

# test for ActivePerl 5.8.8
use LWP;
my $m =LWP::UserAgent->new;
my $w = $m->get("http://www.2ch.net/");
print $w->content;

を実行すると表示できます。2chのcharsetはsjisで$w->contentは
sjisを返します。次にuse encoding文を付け加えます。

# test for ActivePerl 5.8.8
use encoding 'cp932';
use LWP;
my $m = LWP::UserAgent->new;
my $w = $m->get("http://www.2ch.net/");
print $w->content;

これは文字化けして表示できません(エラーも起こします)
$w->contentは相変わらずsjisを返してきます。
print文はsjisにもかかわらずutf8からsjisへ変換しようとして
エラーを起こすようです。

質問は
$w->contentがutf8を返すようにできないかというものです。
言い換えるとLWPのオブジェクトの文字列の保持をutf8とするように
設定できないかということです。
よろしくお願いします
981デフォルトの名無しさん:2008/08/11(月) 12:08:26
>>980
conentはバイト列という決まりなのだが、君のような人のためにdecoded_contentというのが用意されている。
perldoc HTTP::Message参照
982デフォルトの名無しさん:2008/08/11(月) 12:36:31
>>978
>できあがったabc.txtを、サクラエディタで、
>utf-8で開いてみた。

サクラエディタって使ったことないけど、ファイル開くたびに
文字コード指定するの?それなら、sjis で開かないとダメじゃん。
utf-8にしたいなら、
binmode STDOUT => ":encoding(cp932)";
の行を削除。
983デフォルトの名無しさん:2008/08/11(月) 12:55:49
>>981
うまくいきました。ありがとうございます。

# test for ActivePerl 5.8.8
use Encode;
use LWP;
my $m =LWP::UserAgent->new;
my $w = $m->get("http://www.2ch.net/");
print encode('cp932', $w->decoded_content);
984デフォルトの名無しさん:2008/08/11(月) 12:55:54
\x00-\x1F と \x20 の表示に CP932 やら UTF-8 は関係あるのか
985デフォルトの名無しさん:2008/08/11(月) 18:33:14
>>982
なんで?
Windows上で、
perlから、txtファイルに出力すると、
絶対シフトJISになっちゃうの?

だから、シフトJISと指定して読み込まないと
だめなの?

binmode STDOUT => ":encoding(cp932)";

↑もしかして、これって、シフトJISで出力する、って意味だったの?
だからDOS窓では問題なく出力できてたの?
986デフォルトの名無しさん:2008/08/11(月) 18:39:01
なんか、ここって質問の半分くらいが文字コードの問題だなw
987デフォルトの名無しさん:2008/08/11(月) 18:53:33
全部同じ奴じゃねえの。文体的に
988デフォルトの名無しさん:2008/08/11(月) 19:04:23
>>4入り 5.10 の人とほかの人は区別したい。いちおう。
989デフォルトの名無しさん:2008/08/11(月) 19:09:37
次スレの旬が近そうなので逝ってきます。
990デフォルトの名無しさん:2008/08/11(月) 19:12:46
>>978
サクラエディタが制御文字を表示してないだけでないの?
991デフォルトの名無しさん:2008/08/11(月) 19:12:52
次スレでございます。
Perlについての質問箱 37箱目
http://pc11.2ch.net/test/read.cgi/tech/1218449440/
992デフォルトの名無しさん:2008/08/11(月) 19:35:15
            __、
     ,r´⌒ヽ,⌒ヽ,ヽ
   (⌒)、   .人  λ\、 ._____
    \. \    、 ヽ./ ー  ー\
     |\ \    ヽ./ ( ●) ( ●)
     |  \  \ /     (__人__) \  はいはい、どーもすみませんでした
     |.   \   |       ` ⌒´   |
  .   |.   |.\_ノ\            /
  .   |.   |   |   \______/
  .   |   )  .|     . . ̄ ̄
  .   |   |  .|
     |   |.|  .|
  .   |  | .| .|
     /  / / ヽ,
    (__ノ  ヽ、__つ
993デフォルトの名無しさん:2008/08/11(月) 19:35:48
              コロコロー (((●
  猫マナー猫マナー猫マナー猫マナー猫マナー猫マナー
  猫マナー猫マナー猫マナー猫マナー猫マナー猫マナー
 猫マナー猫マナー猫マナー猫マナー猫マナー猫マナー

   ●))) コロコロー
  ーナマ猫ーナマ猫ーナマ猫ーナマ猫ーナマ猫ーナマ猫
   ーナマ猫ーナマ猫ーナマ猫ーナマ猫ーナマ猫ーナマ猫
   ーナマ猫ーナマ猫ーナマ猫ーナマ猫ーナマ猫ーナマ猫

                コロコロー (((●
  猫マナー猫マナー猫マナー猫マナー猫マナー猫マナー
  猫マナー猫マナー猫マナー猫マナー猫マナー猫マナー
 猫マナー猫マナー猫マナー猫マナー猫マナー猫マナー
994デフォルトの名無しさん:2008/08/11(月) 19:36:22
いきなり氏ねって、どういう事ですか?君には社会の常識がないのですか?
普通は、『あのう、すいませんけれども氏んでくれませんか?』とか
『あなたはには、氏ぬという選択肢もありますよ』とか言うものですよ、
あなたみたいに最初から喧嘩腰だと、
言われた方は『じゃぁ氏んでみようかな』とかいう気持ちがなくなるものです。
まずは、親切丁寧に人に氏んでと頼むべきだと思いますよ。
そこから、人の輪と協調が生まれ、『よーし氏んでみるか』とか
という気持ちが生まれるわけです。
995デフォルトの名無しさん:2008/08/11(月) 19:36:55
                /\___/ヽ
               /'''''' u ゚ '''''':::u:\
              |(一),゚  u 、(一)、゚.|
              | 。 ,,ノ(、_, )ヽ、,, u.:::|  最新型の扇風機って暑いんだな
     〃 ̄ヽ 〜   | u ` -=ニ=- ' .:。::|      なんか、オレンジ色に光ってるし
   r'-'|.|  O |  〜    \_゚`ニニ´ _::::/
   `'ーヾ、_ノ 〜    /  ゚ u 。 \
      | ,|         |゚ / ・   ・ ヽ |
      | ,|         | | 。 ゚ u |゚ |
      | ,|         \\=====/ノ
   ,-/ ̄|、          (m)  (m)
   ー---‐'         (__)(__)
996デフォルトの名無しさん:2008/08/11(月) 19:37:29
    \ ポーニョ ポニョ / |\
          ポニョ.    | |\
 ウ…ウーン… ∧_∧   | |  \
   ___  _∩∀゚∩)  | |   |
   | __ ( ;´д`) ̄|ヽ) | |   |
   |\⌒⌒⌒⌒⌒⌒\  \|    |
   \ \          \  \  |
     \ \          \  \|
      \ \|⌒⌒⌒⌒⌒⌒⌒|
        \ |_______|


↓翌日の頭の中

ポーニョポーニョポニョ::::::::::::::::::::::::::::::::::
::::::::::::::::::::::::::::::::ポーニョ:::::::::::::::::::::::::::
:::::::::::::::(>'A`)> ウワァァァァ :::::::
:::::::::::::::( へへ :::::::::::::::::::::::::::::::::
:ポーニョ:::::::::::::::::::::::::ポーニョ::::::::::::::::::::::::::
::::::ポーニョ:::::::::::::::::::::::::::::::::::::::::::::::::::
997デフォルトの名無しさん:2008/08/11(月) 21:03:31
おちんちんのエラの部分に、ちいさいギザギザがあるんですが、
これって何かの病気ですか?
医者に診せたほうがいいでしょうか?
998デフォルトの名無しさん:2008/08/11(月) 21:12:58
教えて良かったと思えるのは幸せなのだと噛みしめる今日この頃。だから、

>>997 は女医に診せてサマリ提出汁。
999 ◆TWARamEjuA :2008/08/11(月) 21:14:32
あづいよう
1000デフォルトの名無しさん:2008/08/11(月) 21:50:44
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。