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

このエントリーをはてなブックマークに追加
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/09/21 現在の最新版(安定版): 5.10.0
● 2008/09/21 現在の開発版: 5.9.5

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

リンク集は>>2-3
Perl 日本語処理の基礎の基礎 >>4
過去スレは>>5-6 あたり
2デフォルトの名無しさん:2008/09/21(日) 12:22:38
[プログラミング自体の経験が無い奴はまずココを読め]
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/09/21(日) 12:23:02
4デフォルトの名無しさん:2008/09/21(日) 12:23:32
#  [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/09/21(日) 12:24:39
6デフォルトの名無しさん:2008/09/21(日) 12:25:07
7デフォルトの名無しさん:2008/09/21(日) 12:37:52
すれ立て乙
8デフォルトの名無しさん:2008/09/21(日) 14:28:51
もういいです
9デフォルトの名無しさん:2008/09/21(日) 14:42:33
同感だが、ないと寂しいのも事実
10デフォルトの名無しさん:2008/09/23(火) 14:43:26
いままさに転職で就活してるが、PerlとかPHPとかできますって言っても
「PHP()笑ですか。Javaとかできますか?」って言われるわww
ちなみにPerlの話題なんて微塵もでません。言っても「へぇ…」程度

あんまりJavaJava言われるから、Javaのコードすら書いたことないのに
いま勉強中です!資格取得めざしてます!!なんて言うようにしてみたら
Javaでちょっとコード書いてきて見せてとか言われてしまって、
そこで初めてJava触ったけど
MVCアーキテクチャとかっていうやつだっけか。たしかにこれは面倒だなw

仕事でいろいろ分業するのにはこういう作りはすごくよさそうだけど
個人で趣味でやるならPHPで十分目的は達成できるしPHPでいいだろうな
11デフォルトの名無しさん:2008/09/23(火) 15:10:14
ファイルハンドルからファイル名を取得することはできますでしょうか?
xxxxxxみたいな関数とかあります?

open my $fh, "data.txt";
$file_name = xxxxxx $fh;
print $file_name; #=>data.txt
12デフォルトの名無しさん:2008/09/23(火) 15:23:53
無いと思う。つか、ファイルを開く時点で名前を把握してるのに、なんでわざわざ
ファイルハンドルから取得する必要がある?
13デフォルトの名無しさん:2008/09/23(火) 15:47:31
>>12
ないですか。

ファイルロックをする関数でflockが有効ならflockを、そうでなければ、ファイル名をベースにした
ディレクトリ作成をしようと思いました。

sub lock {
my $fh = shift;

if ($valid_flock) {
flock($fh, 2);
} else {
my $file_name = xxxxxx $fh;
my $lockdir = $file_name."dir";
my $retry = 5; # リトライ回数セット
while (!mkdir($lockdir, 0755)) { # 作成。出来なければ待つ
if (--$retry <= 0) { &error("BUSY"); } # 5回ダメならあきらめる
sleep(1); # 1秒待つ
}
}
14デフォルトの名無しさん:2008/09/23(火) 16:37:34
>>13
flock() が使えない環境で動かす必要があるなら、最初から他の方法に統一したほうがいいように思えます。
flock() だけ分岐させても、どちらに分岐するかによって flock() 依存の機能の利用可否が異なりますから面倒になるだけです。

それはそれとして、その構成だと呼ぶ側で既に open() してるわけですから、
引数にファイル名を渡してやればいいんじゃないですかね。
15デフォルトの名無しさん:2008/09/23(火) 17:00:49
>>14
flockが使える環境ならば、ファイルロック機能が強固なflockを使ってもらい、使えない場合は、
ディレクトリ作成方法でまかなおうかと思いました。

ファイル名も引数で渡す方法でいこうと思います。
16デフォルトの名無しさん:2008/09/23(火) 17:27:20
PerlでCのEnumみたいなのを定義する上手い方法はないかな?
それともハッシュでやるしかないんでしょうか?
17デフォルトの名無しさん:2008/09/23(火) 17:39:20
>>16
cpan にあるなあ
ttp://search.cpan.org/~zenin/enum-1.016/enum.pm
求めるものかどうか知らんけど。
18デフォルトの名無しさん:2008/09/23(火) 17:40:38
>>17
あーこれグッドです。どうもありがとうございます。
19デフォルトの名無しさん:2008/09/23(火) 18:03:50
定数って正規表現中で使えないのか・・・当たり前だよね
やっぱりPerlならHashでやるのが一番いいのかもね
20デフォルトの名無しさん:2008/09/23(火) 18:52:06
(??{})

いや、なんでもない
21デフォルトの名無しさん:2008/09/24(水) 10:13:37
>>19
<q cite="http://www.kt.rim.or.jp/~kbk/perl5.005/perlmod.html#Symbol_Tables">
シンボルテーブルの別の使い方は、“定数”スカラーを生成するためのものです。

  *PI = \3.14159265358979;

この後、$PIを変更することはできません。
</q>

#!/usr/bin/perl -w
use strict;
use constant FOO => 'foo!';
our $BAR; *BAR = \'bar!';
print "${\FOO}$BAR\n", eval { $BAR = 'bar?' } || $@;
__END__
22デフォルトの名無しさん:2008/09/24(水) 10:30:46
>>21
>>16 からの話の流れを読むと、
列挙型が欲しくて enum (>>17-18) を使ったけれど、enum の提供する定数はサブルーチンベースなのでパターン内に展開できない(>>19)。
それに対し >>20 が控え目に打開案を示した、という流れ。

シンボルテーブルベースの列挙型を新たに実装する手もあるし、
Readonly.pm を使う手もあるけど、
変にこだわりさえしなきゃ >>19 の通りハッシュで済む話だね。
23デフォルトの名無しさん:2008/09/26(金) 06:39:52
24デフォルトの名無しさん:2008/09/26(金) 11:14:17
Perlを勉強してやる!
25デフォルトの名無しさん:2008/09/26(金) 14:32:07
>>23
read.cgiはCで書かれてるつーの。
26デフォルトの名無しさん:2008/09/26(金) 15:14:43
>>24
つ、通報しま
27デフォルトの名無しさん:2008/09/26(金) 15:42:10
>>23みたいに、内容の違うpageを自分の妄想と結びつけてソースだと言い張る
頭がおかしい人間がこの掲示板には多いよね。

>>23のリンク先は、「cでperlみたいに正規表現を使いたいんだけどどうすりゃ良いの?」
というひろゆきの質問スレなのに、それがわからない。

煽りでなしに、病院で診察を受けた方が良い。
28デフォルトの名無しさん:2008/09/26(金) 15:54:38
自分で掲示板作って
自分でそこで質問する、って
最強だよな。
29デフォルトの名無しさん:2008/09/27(土) 08:14:06
do{last}while(1)
なぜこれがエラーになってしまうのでしょう?
do{last}for(1)
これはおkなのに
30デフォルトの名無しさん:2008/09/27(土) 10:17:16
文字列がどれだけ合っているかを判別するにはどのようにしたらよいでしょうか?

以下のように
-------------
(比較元) 我が輩は猫である。

我が輩は人である。 -> 90% ほど合致。
我輩は猫である。  -> 90% ほど合致。
猫である我が輩は。 -> 5% ほど合致。
-------------
ように算出できないでしょうか?
31デフォルトの名無しさん:2008/09/27(土) 18:27:16
http://www.aoky.net/articles/steve_yegge/tour_de_babel.htm

「そしてもちろん、Perlにはそのほかにもたくさんデザイン上の
奇妙なところがある。たとえば「コンテキスト」を見るといい。そ
れはラリーがシェルスクリプトからコピーしたN変数ネームス
ペースやシジルによるデリファレンスのようなおかしな決断の
ぞっとする副産物だ。Perlでは、すべてのオペレータ、すべて
の関数、すべての操作が、その「コンテキスト」に従い、6つの
うちのランダムな1つの仕方で振る舞う。与えられたコンテキス
トにおいて特定の操作がどう振る舞うかを支配するルールや
ヒューリスティクスというのは存在しない。あなたは単にすべて
暗記しておくしかないのだ。

例がほしい? スカラーコンテキストでハッシュにアクセスすると
、分子が割り当てられたキーの数、分母がバケットの数となっ
ている分数を内容とする文字列が得られる。クジラのはらわた
だ。そう言ったでしょ。」
32デフォルトの名無しさん:2008/09/27(土) 18:28:54
>>31
を読んで、「ほんとかよ?」と思ったので実験してみた。

my $a;
my %b;
%b=qw (a b
c d
e f
g h);

$a=%b;
print "$a\n";

実行結果。
4/8

本当だ!
この仕様考えたヤツはいったい何が不満だったのか?
33デフォルトの名無しさん:2008/09/27(土) 18:50:31
>>30
Levenshtein距離とか
34デフォルトの名無しさん:2008/09/27(土) 19:33:23
>>32
Javaで言えばただのtoStringじゃん
35デフォルトの名無しさん:2008/09/27(土) 19:38:22
ついでに言えばperlのコンテキストもOOPの演算子オーバロードも(使う方からすれば)似たようなもの
36デフォルトの名無しさん:2008/09/27(土) 20:54:49
perlのかっちょええエディタを紹介して。
コードの自動補完とかできるやつ。
37 ◆TWARamEjuA :2008/09/27(土) 22:49:21 BE:654023-2BP(7089)
(・o・)ポカーン
38デフォルトの名無しさん:2008/09/27(土) 23:04:10
>>29
do ~ while 構文(及び while 修飾子)で last したければ
% perl -le '{ do{last} while (1) } ;'
みたくブロックで囲む必要がある。
詳しくは、 perlsyn の while の項を読め。
ちなみに next の時は、
% perl -le 'do{{next}} while (1) ;'

B::Deparse で syntax OK になる分タチ悪がね。
% perl -MO=Deparse -le 'do{last}while( 1 ) ; '
(略)
-e syntax OK

つか do ~ while 構文なんて使うなよ…
39デフォルトの名無しさん:2008/09/27(土) 23:15:21
「い」が抜けたorz...
40デフォルトの名無しさん:2008/09/27(土) 23:27:27
「でもいい」も抜けてたな。
酒飲んで書き込むもんじゃねえなあ
41デフォルトの名無しさん:2008/09/28(日) 00:26:39
>>29
while(1)・・・でいいのをわざわざdo・・・while(1)で書いてるくらいだから、
よっぽど、do-while文が好きだったんだな。どの言語の影響だ?

Perlのdo-while/untilループは通常のループ制御が使えんから、使い物にならんよ。
>>38みたく、みっともないことになる。
42デフォルトの名無しさん:2008/09/28(日) 00:35:15
Exporterを使って全関数をExportするにはどうしたら良いでしょうか?
@Exportに全関数名を入れるのは骨が折れるのでこの方法は避けたいです。
43デフォルトの名無しさん:2008/09/28(日) 01:25:25
正規表現で.+と.+?の違いはなんでしょうか?
前者は任意の文字が1個以上続くというのはわかるのですが、後者がわかりません。

よろしくお願いします。
44デフォルトの名無しさん:2008/09/28(日) 01:59:56
マンドクセー
最長と最短
45デフォルトの名無しさん:2008/09/28(日) 02:26:47
>>42
Perlは関数とか実行時に動的に割付可能な言語だから、いちいち名前を列挙するのが当然と思われ。
ま、俺もPerlあんま詳しくないんだけど、自動で全部というのはプラクティスとしてありえないと思う。

強引にやるなら、コンパイル時にシンボルテーブルのコードっぽいやつをとりあえず
@EXPORTに突っ込むことが考えられるが、こんなことやってるのいままでPerl関係のコードで見たことがない。
見たことがないということは、やらない方がいいということ。

@EXPORT = map {*{$_}{NAME}] grep {*{$_}{CODE}} values %PACKAGENAME::

PBPにサブルーチンにEXPORT属性を設定する方法が紹介されているので、ここらあたりで
妥協できないか。
46デフォルトの名無しさん:2008/09/28(日) 08:59:51
他のモジュールと関数が衝突すると痛いので、
オブジェクト指向化推奨されてる。
EXPORTするのは定数ぐらいにした方がいい。
47デフォルトの名無しさん:2008/09/28(日) 09:47:27
大量に定数定義するモジュールで45みたいなことやったわ。
全部大文字のシンボルを@EXPORT_OKに追加するとかそんなの。
いちいち列挙するのだるかったのでつい魔が差した
48デフォルトの名無しさん:2008/09/28(日) 21:15:00
perlはそのうちこうなる↓
http://namidame.2ch.net/test/read.cgi/news/1222604031/
49デフォルトの名無しさん:2008/09/29(月) 01:05:31
>>45
やはり全部書くべきですか。ただ面倒というだけで問題は無いのでひとまずはそれで行こうと思います。
PBPというのはPerl Best Practicesですね。まだ読んだことが無いので手を出してみます。

>>46
薄学のためオブジェクト指向についてまだよく分かってないのですが、
確かに全関数をエクスポートするくらいならオブジェクト指向で組めばよい気がしてきました。
まだ関数名の衝突という事態には当たったことはありませんが、
オブジェクト指向で組むことも考えてみようと思います。
50デフォルトの名無しさん:2008/09/29(月) 08:03:59
ときどき開発者の中には、特に Perl のプログラマーは、
PHPを「劣った」言語だと考える人がいます。
それについてはどう思いますか。
51デフォルトの名無しさん:2008/09/29(月) 11:08:45
PHPっつたって、バージョン違えば別言語なんだからバージョン言ってもらわないと。
5.2と5.3のマイナーバージョン違いでさえ大幅に違うんだからさ。
52デフォルトの名無しさん:2008/09/29(月) 11:40:15
劣ったとは思わんがPerlや他の言語を元にWebに特化したわりには冗長だな
そしてプログラミングセンス的に劣った奴でも簡単に扱えるのは良いんだか悪いんだか・・・
Perl以上に出来る奴と出来ない奴の差が激しいかもね

無駄に関数多いけど新しいものをどんどん取り入れようとしてる姿勢は良いと思う
が、ますます冗長になっていく・・・

某社ではプログラマにはPHPは使わせてなかった
あんなのはHTMLのコーダーやデザイナーが埋め込みで使うスクリプトだ、と
極論ではあるがそういう使われ方が結構多いんじゃないか?
53デフォルトの名無しさん:2008/09/29(月) 11:54:26
PHPは成長中の言語だから、一概に言えない。
ただ、Perlと同じく継ぎ接ぎの酷さが見えてきた感じはする。
54デフォルトの名無しさん:2008/09/29(月) 22:26:06
ある程度以上メジャーになってしまうと、あとから大規模に言語仕様を弄るのは大変だからな。
同様の問題は、PerlやPHPに限らずRuby,PythonとかC/C++とかも多かれ少なかれ抱えてると思う。
55デフォルトの名無しさん:2008/09/30(火) 07:11:06
おまいら、eclipse + padwalker + epic
使ってる?
56デフォルトの名無しさん:2008/09/30(火) 08:21:44
http://builder.japan.zdnet.com/news/story/0,3800079086,20361311,00.htm
ここみたら、perlのエディターが

Perl

* EPIC
* PerlBuilder
* PerlComposer
* Perl Editor
* Perl Express
* Open Perl IDE
* OptiPerl
* Zeus

こんなに紹介されてるんだけど、どれが最強?
57デフォルトの名無しさん:2008/09/30(火) 08:51:27
1級perl検定

以下のコードのバグを見つけよ
(制限時間15秒)

---------------------------------------

for ( my $a=1; $a<=10; $a++ ) {
 print "$a\n" if $a=3;
}
58デフォルトの名無しさん:2008/09/30(火) 09:01:22
http://www.donzoko.net/doc/memo/unlikeperl.html
ここに書いてあるんだが、ひょっとして
モジュール同士で相性が悪いってことはあるのか?

もしそれが本当だとしたら、モジュールなんでもかんでも
いれたり使ったりすると原因不明のバグに悩まされることにも
つながりかねないのか?
59デフォルトの名無しさん:2008/09/30(火) 10:08:24
>>57
if $a==3 かな?
15秒以内でみつけたから、俺、上級?
60デフォルトの名無しさん:2008/09/30(火) 13:06:08
配列の任意の要素を削除するにはどうすればいいのでしょうか?

@arr = (1, 2, 3, 4, 5);
$del_element = 3;

($del_elementで指定した要素を削除する処理)

print "@arr"; #=> 1 2 3 5
61デフォルトの名無しさん:2008/09/30(火) 13:08:48
>>60
splice
62デフォルトの名無しさん:2008/09/30(火) 13:21:49
>>61
d
できました
63デフォルトの名無しさん:2008/09/30(火) 13:41:24
Perl::Critic
ってなんなのかなぁ?
64デフォルトの名無しさん:2008/09/30(火) 13:48:14
>>58
SwitchとAcme::Comment がソースフィルタタイプのモジュールだからだろ?
ソースフィルタタイプなんて一個でも気持悪い(元のコードを改変すんだぜ?)のに
モジュールの二段重ねとか、そりゃ危険は高かろう。

つか、フィルタタイプだろうとなかろうと、cpan.searchでフィックスしてない
バグくらいは閲覧してから入れるか否かの判断しろよ、、、
65デフォルトの名無しさん:2008/09/30(火) 14:09:56
http://blog.nqou.net/2006/11/20225449.html
ここに書いてある
perltidy
ってのをいれようと思ったんだが、
ActiveperlのPPMには入っていないようだ。

しかし、Acme::tidyというのが代わりに検索で
出てくるんだが、これでも同じなのか?
66デフォルトの名無しさん:2008/09/30(火) 14:14:28
67デフォルトの名無しさん:2008/09/30(火) 14:29:04
>>65
自己解決した。
検索のときにハイフンを入れてなかった。
ハイフンいれたら検索で出てきた。
68デフォルトの名無しさん:2008/09/30(火) 15:19:21
perlcritic
使い方がいまいちよくわかんね。
69デフォルトの名無しさん:2008/09/30(火) 19:15:02
eclipse + padwalker + epic
でperlなのだが、

prin

って打ったときに、
print
printf

って候補を出してくれる、っていうのはできないの?
70デフォルトの名無しさん:2008/09/30(火) 19:34:32
RSS1.0、RSS2.0、Atom0.3のRSSを生成したいのですが、
オススメのモジュールなどありますでしょうか?
できればインストールが簡単(*.pmコピるだけとか)で扱いやすいので。
71デフォルトの名無しさん:2008/09/30(火) 22:31:04
UNIXタイムスタンプ→グレゴリオ歴に変換するにはどうすればいいのでしょうか。
localtime((stat 'hoge.png')[9]) としても、どうも変な変換になっているようなのです。
72デフォルトの名無しさん:2008/10/01(水) 21:08:27
CPANモジュールについてはここでいいですか?
Text::MeCabの最新版
http://search.cpan.org/~dmaki/Text-MeCab-0.20007/
がどーしてもMacOS Xにインストールできません。
Makefileの-arch ppcを削ったらmakeできましたが、
それをmake installしてもまともな結果になりません。
どなたか御存知ですか?
73デフォルトの名無しさん:2008/10/01(水) 21:15:48
>>71
scalar localtime((stat 'hoge.png')[9]) にすると希望どおりだとかいうオチでは。

>>72
前にCPAN on OS X で困ってる人が来ていろいろやりとりしてたら
「MacPortsで解決しました!」という出来事があったのでこわいのです。
74デフォルトの名無しさん:2008/10/01(水) 22:02:08
>>73
> scalar localtime((stat 'hoge.png')[9]) にすると希望どおりだとかいうオチでは。

マニュアルを見ると希望通りに出来ると云うオチでしょう。
75デフォルトの名無しさん:2008/10/01(水) 23:14:32
perlソースコードの1行目のshebangを置換させるようなプログラムを
以下みたいなone-linerで書きたいのですが

perl -pi.bak -e 's/#!.*/#!c:\\perl\\bin\\perl/ if($. == 1)' *.pl

$. の行数が、2つめのソース以降も値を引き継いでしまいます
なにかうまい方法はないでしょうか
76デフォルトの名無しさん:2008/10/02(木) 01:03:19
>>75

組み込み関数の eof を調べてみたらいいと思うよ。
77デフォルトの名無しさん:2008/10/02(木) 01:19:21
>>76
ありがとうございます
eofは使ったことがありませんでした
試してみます
78デフォルトの名無しさん:2008/10/02(木) 07:41:10
普通に丸呑みモードでいいやん?
perl -i.bak -0777pe 's/\A#!.*?\n/hoge\n/ ' *pl
79デフォルトの名無しさん:2008/10/03(金) 18:05:27
cgi掲示板なのですが、ログインすると文字化けしてまして、
コードがISO、西ヨーロッパなどとなってしまうのです。

そこで、headerの部分にcharset=を含めようとしてるのですが、
何度やっても、500エラーになってしまいます。


sub header {
print "Content-type: text/html\n\n";
print "<!--//HEAD//-->\n";
print "<html><head>\n";
print "<META http-equiv="Content-type" content="text/html; charset=Shift_JIS">\n"
print "<title>CGI Control Panel</title>\n";


print "<META http-equiv="Content-type" content="text/html; charset=Shift_JIS">\n"

を追加して日本語になるように、お願い致します。
80デフォルトの名無しさん:2008/10/03(金) 18:26:15
>79
WebProg板へ行った方が的確な回答が得られるんじゃないかな。


で、" " の中で、更に " " を使うな。
人間ならともかく、コンピュータはどこまでが " " の範囲なのか理解できない。
81デフォルトの名無しさん:2008/10/03(金) 18:27:33
すでにWebProgにマルチしてるよコイツ
82デフォルトの名無しさん:2008/10/03(金) 22:09:29
質問です。ActivePerlをインストールしコマンドラインでppm install DBD::mysqlを実行したのですが
ppm install failed: Can't find any package that provides DBD::mysql
というエラーメッセージが出ます

DBD::mysqlはリポジトリから無くなってるのでしょうか?
83デフォルトの名無しさん:2008/10/03(金) 22:32:19
追記:PERLバージョン5.10.0です
新バージョンに対応してるDBD::mysqlがないということでしょうか
84デフォルトの名無しさん:2008/10/03(金) 23:29:38
Active Perl 5.8.8 では ppm install DBD:mysql できるぞ。
無理して 5.10.0 使わんでもいいんじゃない?
85デフォルトの名無しさん:2008/10/03(金) 23:47:26
>>82
cpan使えば?
86デフォルトの名無しさん:2008/10/04(土) 12:29:01
87デフォルトの名無しさん:2008/10/04(土) 12:50:24
VB、Java、最近だとruby、このあたりは、プログラマに向いてない
人間の比率が高いから、採用の目安としては使えない、ってことじゃないかな。
昔のコボラみたいに融通が利かない人間を採ってもあとあと困るし。
88デフォルトの名無しさん:2008/10/04(土) 17:40:03
Mail::Sendmail

これの正しい発音は、

メール コロンコロン センドメール

で合ってる?
89デフォルトの名無しさん:2008/10/04(土) 18:39:13
滅入る 殺殺 千度滅入る
90デフォルトの名無しさん:2008/10/04(土) 19:00:16
Acmeはちゃんとアクメって読めよ
91デフォルトの名無しさん:2008/10/04(土) 19:27:09
ファイルを読み込むとき、ファイル名を指定する。
log.txt
ここで質問。ファイル名が連番になっていても 順に読めるのでしょうか?
log001.txt
log002.txt

open(IN, "log.txt");
print while (<IN>);
close(IN);
log003.txt
92デフォルトの名無しさん:2008/10/04(土) 19:34:12
はあ
93デフォルトの名無しさん:2008/10/04(土) 20:34:36
日本語でおk
94デフォルトの名無しさん:2008/10/04(土) 20:47:45
globれ
95デフォルトの名無しさん:2008/10/04(土) 22:27:56
だから
open(IN, "log001.txt"); 
print while (<IN>); 
close(IN); 

open(IN, "log002.txt"); 
print while (<IN>); 
close(IN); 

open(IN, "log.003txt"); 
print while (<IN>); 
close(IN); 

って書くと面倒でしょう?

ファイル名が連番になってて 順に読めないのかどうか?が知りたいのですよ。
96デフォルトの名無しさん:2008/10/04(土) 22:30:44
200個のファイルを読み込みたいのだよ。
200個分のファイルを読むように ソースコードを書くのが 手間がかかりすぎるやん?
2000行ぐらい書くことになるかもしれない。
だから、 ファイル名を連番にして、 
200行ぐらいの短くて分かりやすいコードは書けないのでしょうか?
97デフォルトの名無しさん:2008/10/04(土) 22:33:04
>>91
my $a;
$a="log001";
print "$a".".txt\n";

$a++;
print "$a".".txt\n";

これちょっと実行して結果見てみ。
98デフォルトの名無しさん:2008/10/04(土) 22:36:07
>>94
なかった
99デフォルトの名無しさん:2008/10/04(土) 22:37:58
>>97
それ!それです。
マジ助かる。ありがとうございました!!
100デフォルトの名無しさん:2008/10/04(土) 22:37:58
>>98
何がないんだよ
101デフォルトの名無しさん:2008/10/04(土) 22:41:07
globでえーやん
102デフォルトの名無しさん:2008/10/04(土) 23:02:00
助かるってことはループは使えるのかな。globもないらしいしよくわからない。
例によって $a は(ry ついでに "$var" って(ry
103デフォルトの名無しさん:2008/10/04(土) 23:03:50
$varなんかどこに書いてあるんだよ
104102:2008/10/04(土) 23:05:46
じゃあ元通りの "$a"
105デフォルトの名無しさん:2008/10/05(日) 04:55:51
>87
改行の仕方がおかしいせいで別の意味に取れる
106デフォルトの名無しさん:2008/10/05(日) 05:25:14
>>102
つかこの程度の発想が出来ないとプログラムセンス的になぁ・・・
107デフォルトの名無しさん:2008/10/05(日) 13:03:55
かなり致命的だよな。
そこそこスジの良い人なら、仮にPerlが初めて触った言語でも
勉強3日目には卒業してるレベル。
108デフォルトの名無しさん:2008/10/05(日) 17:14:19
オレと同期入社の女子社員は
>>95みたいなプログラムを本当に書いてた
109デフォルトの名無しさん:2008/10/06(月) 10:24:45
質問者もひどいが回答者もひどいという話か
110デフォルトの名無しさん:2008/10/06(月) 23:15:39
if文条件部の正規表現で、gオプションを付けているのをどこかで見たのですが、別に付けなくても
いいような気がするのですが、何か意味があるのでしょうか?

if ( /%[^%]*?%/g ) { ・・・ }
111デフォルトの名無しさん:2008/10/06(月) 23:57:19
試してないけど、マッチ情報の取得とかで変わるんじゃない?
112デフォルトの名無しさん:2008/10/07(火) 01:44:45
if じゃなくて while の条件式じゃないのかな。
113デフォルトの名無しさん:2008/10/07(火) 11:38:43
言われてみれば確かに if で g を使うのは変だよな。while ならともかく。
たぶん、ついうっかりやってしまただけだろ。特に意味など無いと思うよ。
114デフォルトの名無しさん:2008/10/07(火) 11:57:42
Windows、ActivePerl5.8.8 です。
data1.txtは、Shift-JISで改行は\x0D\x0Aです。
以下のコードを実行すると、data2.txtの改行が、\x0D\x0D\x0Aとなりますが、何故そうなるのでしょうか?

open IN, "<:raw", "data1.txt";
open OUT, ">:crlf", "data2.txt";
print OUT <IN>;
close IN;
close OUT;
115デフォルトの名無しさん:2008/10/07(火) 12:46:41
久し振りにPerl/Tkをやったら、すっかり忘れている。
116デフォルトの名無しさん:2008/10/07(火) 12:48:52
>>114
:crlf は、0x0A を出力する時に 0x0A → 0x0D, 0x0A という置換をする。
(入力時は、0x0D, 0x0A を 0x0A に置換する)
:raw は、何の変換もしない。

おそらく data1 が 0x0D, 0x0A なテキストで、これがそのまま無変換で読み込まれ、
出力する時に <0x0D> <0x0A> → <0x0D> <0x0D, 0x0A> と変換されている。
117デフォルトの名無しさん:2008/10/07(火) 12:58:49
>>116
なるほど、そういうカラクリですか
サンクス
118デフォルトの名無しさん:2008/10/07(火) 14:18:44
>>110-113
正規表現的にうっかりだろうけど、マッチがグローバルになる事を利用している場合もある。
マッチが保存された開始位置から始まり、(次のマッチの為に)開始位置を保存するようになる。

例.
perl -le '$_=q/012312345/; m/1/g; m/1/g; print join q/:/,$`,$&;'
0123:1

pos($_)= X; m/RE/g のように、マッチ開始位置を指定する手もある。
119デフォルトの名無しさん:2008/10/07(火) 18:04:49
>>111-113
>>118
サンクス
可能性としては、単なるうっかりか、次のマッチのために使っていたということっすね
120デフォルトの名無しさん:2008/10/07(火) 18:17:13
日本で一番Perlを操れる人は小飼弾氏ですか?
121デフォルトの名無しさん:2008/10/07(火) 18:25:49
小飼ってまだ生きてるの?
122デフォルトの名無しさん:2008/10/07(火) 18:38:21
http://www.yahoo.co.jp/

↑こんなURL投稿でサイト名を取得して(タイトル内の<title>Yahoo! JAPAN</title>)を表示させるにはどうしたら良いですか?

Yahoo! JAPAN
123122:2008/10/07(火) 18:39:41
タイトルが無い場合はURL
124デフォルトの名無しさん:2008/10/07(火) 18:46:44
>>120
ちがうだろ
125デフォルトの名無しさん:2008/10/07(火) 18:52:55
>>122
支離滅裂
126デフォルトの名無しさん:2008/10/07(火) 18:55:37
http://www.aimix.jp/cgi/accsearch123.html
これを改造で良いのかな?
127デフォルトの名無しさん:2008/10/07(火) 19:33:55
SLDやTLDを抽出するプログラムを書きたいのですが、
.co.jpがどうしても抽出できません。
誰か間違いを教えてくださると嬉しいです。
よろしくお願いします。

my $suuji;
$host = fff.co.jp;

if($host =~ /\.co\.jp$/){
$suuji = 10;
}else{
$suuji = 3333;
}

print $suuji;
128デフォルトの名無しさん:2008/10/07(火) 19:42:29
$host = fff.co.jp;
print $host, "\n";

裸のワードはなんたらなので文字列ならなんとかかんとか
129デフォルトの名無しさん:2008/10/07(火) 20:39:27
>>116を見て思ったのですが、"\n"="\x{0A}"ですか?
130デフォルトの名無しさん:2008/10/07(火) 20:55:24
そうです
131デフォルトの名無しさん:2008/10/07(火) 21:02:20
>>130
サンクス
一つ賢くなりました
132デフォルトの名無しさん:2008/10/07(火) 21:29:48
>>122
scraper
133デフォルトの名無しさん:2008/10/08(水) 12:43:37
CPANへの登録ってどういう基準?
便利でよくできてるものはどんどん登録された方がいいと思うけど、
これはえがいひとみたいのが、カスみたいのを登録しまくったら滅茶苦茶になるよね?
134デフォルトの名無しさん:2008/10/08(水) 20:23:03
おまえでも登録できる。
単に出来が悪くて抹消というのは聞いたことがない。
Perl の人達は一般に、コードの主観的有用性に基いた恣意的な判断を嫌う。
規制の例としては、名前空間に関する暗黙のコンベンションを読み取れない子が時折出現してはかわいそうなことになっているくらいか。
135デフォルトの名無しさん:2008/10/08(水) 21:34:31
packageとかperlってモジュール登録したバカな奴いたような気がする。
CPANテロ。
136デフォルトの名無しさん:2008/10/09(木) 23:50:53
文字列が全角ひらがなと全角スペースと半角スペースのみで
構成されているかどうか調べる正規表現が分かりません。
先輩方。よろしくお願い致します。

137デフォルトの名無しさん:2008/10/10(金) 00:13:44
始めましてこんばんわ。
最近までCGIのソースを見て作ってきたのですが飽きてきたので他のものに
触れたいと思っているのですが皆さんはperlでどのようなことをしていますか?
自分はソフトウェアかネットワークプログラミングをやろうと思っているのですが
(というかそのぐらいしか知らないです。)皆さんの意見を参考にもし面白そうなの
があればやってみようと思ってます。
ただCGや音楽、ゲームはなしの方向でお願いします。
138デフォルトの名無しさん:2008/10/10(金) 00:22:17
まず日本語のお勉強をしましょうね。
139デフォルトの名無しさん:2008/10/10(金) 01:36:24
始めましてこんばんわ。
最近までCGIのソースを見たり、書いたりしてきたのですが飽きてきてしまったので
他のものにも触れてみようかなと思っているのですが皆さんはperlでどのようなことをしていますか?
自分はソフトウェアかネットワークプログラミングをやりたいと思っているのですが
皆さんの話を参考にもし面白そうなのがあればそれらも検討しようと思っております。
ただCGや音楽、ゲームはなしの方向でお願いします。
こんな感じでよろしいですか?
140デフォルトの名無しさん:2008/10/10(金) 06:06:59
日本語でおk
141デフォルトの名無しさん:2008/10/10(金) 09:13:09
えぇ。いい加減もったいぶらず教えてください。
そんなに日本語変ですか。
142デフォルトの名無しさん:2008/10/10(金) 09:30:14
「ソフトウェア」の意味がわかってないので変てこになっているのか?
143デフォルトの名無しさん:2008/10/10(金) 10:00:42
何を始めたんだろうっていう疑問が、一行目でいきなり来るけどな。
144デフォルトの名無しさん:2008/10/10(金) 10:08:06
>>141
ソフトウェアはソフトウェアプログラミングのことを言ってます。
>>143
そこは変換ミスなのでスルーしてください。
本当はその漢字が正しいと勘違いしていただけですが。
145デフォルトの名無しさん:2008/10/10(金) 10:23:20
>>144
> ソフトウェアはソフトウェアプログラミングのことを言ってます。

じゃあ、「ソフトウェアプログラミング」の中の「ソフトウェア」の意味は?
146デフォルトの名無しさん:2008/10/10(金) 10:47:54
>>145
アプリケーションソフトなどのことじゃないのですか?
147デフォルトの名無しさん:2008/10/10(金) 11:00:01
アプリケーションソフトとは?
って話になるだろ・・・
148デフォルトの名無しさん:2008/10/10(金) 11:09:22
>>147
そんなことを聞いてどうするつもりですか?
なぜあなたがそんなことを細かく聞いてくるのか自分には理解が出来ない
のですが?
ソフトウェアプログラミングのソフトウェアがアプリケーションソフト以外の
ものをさすならわかりますがそれで間違いないならこれ以上追及する意味が
ないと思うのですが?
149デフォルトの名無しさん:2008/10/10(金) 11:16:22
ソフトウェアをやりたい
アプリケーションソフトをやりたい
ってどういうことやねんってことでしょ
150デフォルトの名無しさん:2008/10/10(金) 11:29:51
じゃあ、インクリメンタルサーチ可能な全文検索システム作ってちょ。
151デフォルトの名無しさん:2008/10/10(金) 11:33:45
たぶん
「デスクトップアプリケーションを作りたい」
では・・・
152デフォルトの名無しさん:2008/10/10(金) 11:38:46
>>148
君がやりたい内容が理解できないから
掘り下げて聞いているのですよ。
ソフトウェアでもアプリケーションソフトでも、意味が広すぎる
153デフォルトの名無しさん:2008/10/10(金) 11:47:51
自分が聞きたいのはソフトウェアプログラミングの内容ではなくて
皆さんがperlでどんなことをやってるかなのですが・・・?
154デフォルトの名無しさん:2008/10/10(金) 11:58:13
いろいろ
155デフォルトの名無しさん:2008/10/10(金) 12:01:47
オナヌー
156デフォルトの名無しさん:2008/10/10(金) 12:08:17
>>153
「どんなこと」も広すぎるから、方向性を絞り込む為に「やりたいこと」を参考にしたいのだが
そのやりたいこともよくわからないので掘り下げてみた

エロ動画サンプルを自動巡回DLオススメ
157デフォルトの名無しさん:2008/10/10(金) 12:19:58
あとはエロ画像の重複チェックとかかな。
md5ハッシュとファイルサイズを持っておいて、この2つでチェックすれば
まぁほぼ確実な精度で重複する画像が見つけられるだろう。
158デフォルトの名無しさん:2008/10/10(金) 12:27:14
・エロ画像巡回収集、サムネイル生成、整理
・エロ動画巡回収集、解凍、整理

自分の場合はこんな感じ。いつも思うことだけどPerlの用途は幅広いね。
159デフォルトの名無しさん:2008/10/10(金) 13:20:15
それPlaggerでできるよ!
160デフォルトの名無しさん:2008/10/10(金) 13:38:48
エロは偉大だなw
161デフォルトの名無しさん:2008/10/10(金) 14:00:04
Perlだと2ちゃんブラウザとかトリップ解析とか人工無脳とか作った
162デフォルトの名無しさん:2008/10/10(金) 14:02:18
自宅でgoogleを作った
163デフォルトの名無しさん:2008/10/10(金) 14:03:22
なんだそれは
164デフォルトの名無しさん:2008/10/10(金) 14:43:01
実行環境のIPとSubnet Maskを取得する方法を
教えてください。

ifconfig/ipconfigで調べることはできるんですが、
ひょっとするとモジュールがあるかも、と思いました。
ググったら、Net::Netmaskモジュールを見つけたんですが、
これは違いました。




わかるような情報を
165デフォルトの名無しさん:2008/10/10(金) 14:48:32
>>163
おっと、「自宅でgoogle」を作った。な。

ウェブブラウザのアクセス追跡やその他SBMや優秀なリンクリスト系ブログから
URLをかき集めてクロリングクロリング。ず〜っと16KB/secのバンド幅でかき集め
続けている。


166デフォルトの名無しさん:2008/10/10(金) 14:52:39
>>164
つNet::Interface
167デフォルトの名無しさん:2008/10/10(金) 14:53:24
>>164
ええと…… 言周 言周 言周 ……Net::Interfaceはちがう?
168デフォルトの名無しさん:2008/10/10(金) 16:38:13
Perol
169デフォルトの名無しさん:2008/10/10(金) 16:47:44
オマエらこういう質問に無視しないでマジメに答えてやれよ。

>>136
^(?:\x82[\x9F-\xF1]|\x81[\x4A\x4B\x54\x55]|\x20|\x81\x40)+$
これでどうだろうか?
でも、スペースがあると何かと厄介だよな。
フォームとかで使う事を考えると、スペース削除して目的達成できるなら
事前に半角全角スペース全削除して平仮名だけチェックするのがイイと思う。

170デフォルトの名無しさん:2008/10/10(金) 16:57:45
>>169
> オマエらこういう質問に無視しないでマジメに答えてやれよ。

自分は人々より高い位置にいるという自己認識を露わにしながら
出現する人ってなんなの?
171デフォルトの名無しさん:2008/10/10(金) 17:19:30
「マジメに答えてやれよ」ってのは、皆答えることができるってのが前提だから、
別に自分を「人々より高い位置にいる」とは認識してないのでは。

誰も答え「られない」が、俺だけは答え「られる」って構図を出してきたんなら、
まぁ、確かにそういう気位を感じなくもないが。
172デフォルトの名無しさん:2008/10/10(金) 17:25:33
本当に質問に答える気なら、まず最初に「エンコーディングは?」って
質問返ししなきゃならんし、面倒臭いしスルーしてた。
文字コードSJIS決めつけで答えてるし、どっかのページのコピペでしょ。
もしかしたら、質問者本人の煽りレスかもね。

173デフォルトの名無しさん:2008/10/10(金) 17:26:17
>>169
司令官が出現しました!!
174デフォルトの名無しさん:2008/10/10(金) 17:51:42
unicode文字列にデコードされている前提で、

/^[  \p{Hiragana}]+$/

でいいんじゃね?

'['のあとの2文字は半角スペースと全角スペース。
175デフォルトの名無しさん:2008/10/10(金) 20:27:16
プログラミングPerlって2000年発行でちょっと古い気がするのですが、それでも買いですか?
176デフォルトの名無しさん:2008/10/10(金) 20:55:28
即答かコード一行書いて終わりみたいな質問なら答えやすいよね。

>>175
買って損はない
177デフォルトの名無しさん:2008/10/10(金) 20:58:11
>>176
サンクス
買ってみます
178デフォルトの名無しさん:2008/10/10(金) 21:16:28
>>177
バージョン5.6がベースだからunicodeとスレッド関係は要注意。
この2つは5.8以降で互換性が無くなってるからあくまで参考に留めるべし。
5.8以降のunicodeの扱いはwebで検索した方が良い。
179デフォルトの名無しさん:2008/10/10(金) 21:27:50
>>178
了解しました
180デフォルトの名無しさん:2008/10/10(金) 21:50:48
175の人は「perldocがあるからラクダ要らない」説もあることを頭に入れとくといいかもしれないよ。

自分は2002年にラクダ和訳が出てすぐ「欲しかったから」買ったんだけど
純粋に実用面だけを考えたら、他人に「買って損はない」とまでは言えないな。
181デフォルトの名無しさん:2008/10/11(土) 00:07:45
2ちゃんねるがあればマニュアル本を買う必要は無いだろ
182デフォルトの名無しさん:2008/10/11(土) 01:53:16
>>180のオススメのPerlの本は何?
183デフォルトの名無しさん:2008/10/11(土) 02:01:32
本は要らない
184デフォルトの名無しさん:2008/10/11(土) 09:06:11
プログラミングPerlよりPerlクックブックの方が役に立つと思う。
185デフォルトの名無しさん:2008/10/11(土) 09:17:50
今プログラミングPerl久しぶりに開いてみたら・・・

訳出作業に使用した作業環境
IBM ThinkPad 535(Pen120MHz 40MB HDD2GB)
FreeBSD2.2.1+PAO Mule2.3
186デフォルトの名無しさん:2008/10/11(土) 09:23:21
元々料理本はラクダの一部じゃん。
だから、説明に欠落がある。
187デフォルトの名無しさん:2008/10/11(土) 15:46:11
>>137
ソフトウェアってのはハードウエアではないあらゆるものを指すわけで、あなたが飽きてきたっていう
「CGIプログラム」だってソフトウエアです。家電のプリント基板に入っている組み込み系もソフト
ウエアですし。だからみんな「ソフトウエアがやりたい」って、何がやりたいの? と訊いてる訳です。
…てなことは説明しなくてもわかって欲しいのですが。
Windows上で動くGUIなプログラムのことなんですかね…。perlでも書けなくもないですね。
でも結局WinAPIをいじるから、そっちの知識がないと書けないですし。VBやVCという言語がある
ってことくらいは知っててもいいと思います。なでしこってのもあるよ。
そもそも、プログラムの形態とか言語についてあれこれいう前に、作ったプログラムで何がやりたいか、
を具体的にイメージできないと、モチベーションを維持するのは難しいと思います。私の経験上
そうです。何か作りたいものがあって取り組むのが一番上達が早いです。
私はCGI屋なんで、その立場から言わせてもらうと、CGIだっていつまでも奥が深くて、飽きるなんて
ことはないですよ。できることはたくさんあるし、やりたいことも尽きません。
188デフォルトの名無しさん:2008/10/11(土) 16:29:55
ネタに亀レス(w
189デフォルトの名無しさん:2008/10/11(土) 17:31:11
なんだこの珍問答
190デフォルトの名無しさん:2008/10/11(土) 17:48:10
どうかおめこ干しを
191デフォルトの名無しさん:2008/10/12(日) 22:15:11
>>187
ということはプログラムのほとんど、またはすべてはソフトウェア
プログラミングということでしょうか?もしそうなら皆さんごめんなさい。
確かにそれなら自分の質問に答える前につっこまれるのが普通だと思います。
それとCGIですごい大きいものを作ったわけでもないのに飽きたと言ったのは偉そうに
言い過ぎました。すみません。
自分が言っているソフトウェアプログラミングはメモ帳やエクセルなどの
デスクトップアプリケーションのことです。
自分がまだプログラムを始めたての頃、作りたかったのがCGIというかチャットや掲示板だったんです。
プログラムを始めた時は頭が今よりも悪く(今もよくないですが)学校が忙しいのもありましたが
意味不明なことをしていて結局CGIに取り掛かるのに1年かかってしまいました。
ただ作ってみたら結構簡単だし同じような処理が多いので楽しいよりめんどくさい
の気持ちが強くなってしまい他の作ってみたいなという気持ちが出てきたので
前の質問に至りました。
ただ自分はパソコン歴自体長くなく知らないことも多いので
もしかしたらすごい楽しいCGIのプログラミングがあるのかもしれませんね。
検索サイトやデータベースはあまり興味ないですが。
長々とすみません。
192デフォルトの名無しさん:2008/10/12(日) 22:25:09
アルファがベータをカッパらったらイプシロンした

まで読んだ。
193デフォルトの名無しさん:2008/10/13(月) 06:14:15
>>191
まず周囲の空気を読む事から覚えろw
194デフォルトの名無しさん:2008/10/13(月) 08:27:19
>191
用語や用法のミスはあまり問題ではない。
まずは相手に伝える努力をしろよ。
195デフォルトの名無しさん:2008/10/13(月) 09:33:28
>>194
> 用語や用法のミスはあまり問題ではない。

用語や用法の決めつけをあらゆるレベルでやっているのを見て、
みんな真面目に対応するのをやめたのだと思う。

196デフォルトの名無しさん:2008/10/13(月) 10:59:33
入門書くらい読め
197デフォルトの名無しさん:2008/10/13(月) 12:32:51
>>196
結局それに尽きる
198デフォルトの名無しさん:2008/10/13(月) 15:09:20
>>193 >>195
まったくそのとおりです。
>>196
確かに前に読んだ本に書いてあったような気がします。
199デフォルトの名無しさん:2008/10/13(月) 18:03:06
>>175
いわゆるラクダ本はPerlを基軸言語にしたいというやつ以外、不要。
内容的に古いし、プログラミングの基本が学べるわけでもない。
そんなもんに金と時間使うなら、自分本来の得意分野を伸ばすことに時間を使え。

どうしてもってなら下巻だけ買っとけ。
200デフォルトの名無しさん:2008/10/13(月) 20:41:17
リャマ本と続リャマ(動物の名前忘れた)は、単純に読み物として楽しめた。
201デフォルトの名無しさん:2008/10/13(月) 21:33:58
>>200
アルパカな
>単純に読み物として楽しめた。
たしかにそうだが正直なところ
ああいう欧米系ジョークを交える書き方は
日本人には難しそうだ
202デフォルトの名無しさん:2008/10/13(月) 22:20:19
>>201
確かに。

-------------------------
C++をを設計したストラウストラップの教本
  ↓
smalltalkの「メッセージ」を真似して「std::cout << "Hello, world!" 」なんて書けるようにしました。てへ。
  ↓
<< がCのビット演算子とかぶってるって?
しかも厳密な意味では演算子オーバロードですら無いって?
知ったこっちゃないね。重要なのは「メッセージ」だって言ってるだろ!
  ↓
最初の10数ページ以降「メッセージ」の概念が無くなってるって?
あーいいのいいの。これオブジェクト指向とやらを無理矢理実装した俺様仕様だからさ。気にすんなって。
-------------------------

おいらがC++を見限ったのは、このお笑いのツボが理解できなかったからだとさ。
203デフォルトの名無しさん:2008/10/13(月) 22:24:33
リャマ本の第5版って翻訳されないのかな?
204デフォルトの名無しさん:2008/10/14(火) 04:10:35
最近データーベースの勉強をしてるんだが、
perlのソースコードを一行一行、一行づつ全部
データーベースに格納したら面白いかな?
と考えたんだが、どうだろうか?
205デフォルトの名無しさん:2008/10/14(火) 05:27:51
>>204
ストラウストラップ教本 の方がまだ面白い
206デフォルトの名無しさん:2008/10/14(火) 06:11:35
google code search以上の物が出来るとは到底思えない
207デフォルトの名無しさん:2008/10/14(火) 09:55:11
>>204
インクリメンタルに検索できるやつにしてね。
208164:2008/10/14(火) 13:48:50
>>166>>167
レス、ありがとうございます。
モジュール名を聞くとド真ん中な感じですが、
自分では見つけられませんでした。。。

Net::InterfaceモジュールをCPANからダウンロード
して試してみました。

常用しているActivePerl5.8@Winにインストール
しようとしたところ、残念ながらうまくいきませんでした。
ちょっとソース(siteconf)を覗いたんですが、どうやら
UNIX系専用のようですね。超残念。

別環境として、Perl5.6@UNIX系もありましたので、
そこでインストールしてみると、ちゃんとインストール
できました。
スクリプトを書いて動作確認したところ、たしかに
期待どおりの情報(IP、Subnet Mask、MACアドレス)を
取得することができました。

本稼働はUNIX系で行うつもりだったので、これで
充分ではあるのですが、できればWindows環境でも
実行したいです。

Windows環境で同様の情報を取得する方法は
ないでしょうか?


209デフォルトの名無しさん:2008/10/14(火) 14:01:48
Net::Ifconfig::Wrapper - provides a unified way to configure network interfaces on FreeBSD, OpenBSD, Solaris, Linux, OS X, and WinNT (from Win2K).

はどうかな。説明文を読む限りでは使えそうだが試したことはない。
210デフォルトの名無しさん:2008/10/14(火) 22:25:58
XMLをあつかいたくて

use XML::Tidy;
my $tidy = XML::Tidy->new($_);

とやっております。
このとき、不完全なXMLのときは、mismatchエラーが発生しますが、
これを無視して、可能な限りXMLを解釈して読み込むことはできないのでしょうか?

バージョンは
perl : v5.8.8
XML::Parser : 2.34
XML::Tidy : 1.2.54HJnFa
です。
211デフォルトの名無しさん:2008/10/14(火) 22:41:55
XML::Tidyじゃなくなるけど、
XML::Liberal+XML::LibXMLなんて組み合わせは?
212デフォルトの名無しさん:2008/10/14(火) 23:18:27
>>211
ありがとうございます。
試してみます。
213デフォルトの名無しさん:2008/10/15(水) 12:54:22
古いPerlのコードで
&jcode'convert(*title,'jis');
というコードがあったんですが、これってどういう意味ですか。
&jcodeのあとの「'」がわかりません。
214デフォルトの名無しさん:2008/10/15(水) 12:59:01
>>213
http://www.kt.rim.or.jp/~kbk/perl5.005/perlmod.html

> 古いパッケージ区切り子はシングルクォートでしたが、
> 現在はダブルコロンを使うのが推奨されています。

> 古い構文も互換性のためにまだサポートされているので、
> "This is $owner's house"のようにすることもできます。
> これは$owner::sをアクセスします。
215デフォルトの名無しさん:2008/10/15(水) 15:14:35
>>210
それがDOMを構築しようとするものなら、
エラーが出るのはどうしようもないのでは。

かわりにSAX系のパーサーを使えば?
XML::Parserとか。
それなりにめんどくなりそうだけど。
216デフォルトの名無しさん:2008/10/15(水) 16:47:01
http://pc11.2ch.net/test/read.cgi/prog/1221545019/168
この人小学生からperlやってるってよ
217デフォルトの名無しさん:2008/10/15(水) 18:05:05
>>214
さんくす
Perlの古い書き方だったんですね
218デフォルトの名無しさん:2008/10/15(水) 20:12:37
Perlに古いも新しいもない。
219デフォルトの名無しさん:2008/10/15(水) 21:21:12
そうですね。
>>217で書いてるのはPerlの書き方が古いか新しいかですけどね。
220デフォルトの名無しさん:2008/10/16(木) 00:57:28
律儀な人ね
221デフォルトの名無しさん:2008/10/17(金) 01:04:15
クロージャーって意味がわからんな
カンタンに説明してくれないか?
222デフォルトの名無しさん:2008/10/17(金) 03:29:24
自分で調べようともしないお前に誰が教えるもんか!
223デフォルトの名無しさん:2008/10/17(金) 03:41:29
無名の関数ですね^^
224デフォルトの名無しさん:2008/10/17(金) 12:54:52
>>221
エロ画像フォルダで実感しろ。…普通に object 指向で書く方が楽だ罠。
use File::Find ;
use Data::Dumper ;
use Cwd ;
my $outer = sub{ return 1 if !( -d and /.[.][^.]*?$/) ; $File::Find::prune = 1 ; return ; } ;
my %hash ; my %hash2 ;
my $inner = sub{ return if ! m{\.(?:jpg|bmp|png|gif)$} ; $hash{$File::Find::name} = -s $_ ; } ;
my $inner2 = sub{ push @{$hash2{ uc unpack q{A7}, $_ }}, $File::Find::name ; } ;
my $code = sub {
 my $outer = shift ;
 sub { # コレが closure
  my $inner = shift ;
  sub { return if ! $outer->() ; $inner->() ; }
 }
};
my $base = $code->( $outer ) ;
find $base->($inner), getcwd ;
find $base->($inner2), getcwd ;
print Dumper \%hash, \%hash2 ;
225デフォルトの名無しさん:2008/10/17(金) 12:55:36
>>223
違うとマジレス。

ちゃんとした説明はなかなか大変だよなー。
226デフォルトの名無しさん:2008/10/17(金) 14:09:39
227デフォルトの名無しさん:2008/10/17(金) 19:05:02
スカラー変数の中身の種類(文字列とか、配列のリファレンスとか)を
調べるにはどうしたらいいですか?
228デフォルトの名無しさん:2008/10/17(金) 19:11:14
ref
229デフォルトの名無しさん:2008/10/17(金) 19:13:16
>>227
ref
230デフォルトの名無しさん:2008/10/17(金) 19:22:50
>>228-229
サンクス
231デフォルトの名無しさん:2008/10/17(金) 21:30:11
モジュールのバージョンをまとめて上げたら
MechanizeでBASIC認証がなぜか出来なくなった…
UserAgentオーバーライドしてもcredentialsでもだめ
http://id:[email protected]/とかやると繋がるけど
何が悪いんだろう…
同じような人が居たらヒントでもいいんで教えてもらえると有難いです。。
232デフォルトの名無しさん:2008/10/17(金) 21:36:23
>>231
デバッグフラグ立てて動作トレース
233デフォルトの名無しさん:2008/10/17(金) 21:48:51
>>232
ありがとうございます。
やってみます。m(_ _)m
234231:2008/10/18(土) 00:02:44
Basic.pmで初期化されていない値云々というメッセージがでるので
LWP/Authen/Basic.pmのauth_headerにある「$user, $pass」に
試しに値を入れてみたら問題なく繋がった
LWPでauthorization_basicを試してみたら此方も問題なく成功
Mechanizeでもauthorization_basicを呼び出すようにしたら此方も成功

吊ってきます…
235デフォルトの名無しさん:2008/10/18(土) 11:04:50
Linux 上で MS word の *.doc ファイルを読み出したいんですが、何かいい方法はありますか。
Spreadsheet::ParseExcel みたいなのがないかと CPAN を探したのですが、見当たりません。
236デフォルトの名無しさん:2008/10/18(土) 11:39:28
『LinuxでWord文書をテキストファイルに変換するには』
ttp://www.atmarkit.co.jp/flinux/rensai/linuxtips/943wvware.html

Antiword is a free MS Word reader
http://www.winfield.demon.nl/

OpenOffice.org
http://ja.openoffice.org/
237デフォルトの名無しさん:2008/10/19(日) 06:50:02
>>236
有難うございます。やはり、perl から呼べるものはないようですね。
文書全体の読み出しだけでなく、「XXページにXXX があったら、XX+n ページに対応するXXXXがあるかチェックする」といった処理もできれば、
と思っていたのですが。それにしても Spreadsheet::ParseExcel は偉大だ…
238デフォルトの名無しさん:2008/10/19(日) 07:26:47
ハッシュが詰まった配列から、一つずつ取り出して各々に処理をしたいんですがforeachじゃ出来ませんでした。
何か良い方法ありますか?
239デフォルトの名無しさん:2008/10/19(日) 12:05:47
while each
240デフォルトの名無しさん:2008/10/19(日) 12:11:04
foreachで出来るだろ?
241デフォルトの名無しさん:2008/10/19(日) 12:27:00
>>238
そういう意味じゃないんです…

>>240
foreach %hoge (@fuga)としたら、syntax error at Z:\script\test.pl line 9, near "foreach %hogeって言われました
242デフォルトの名無しさん:2008/10/19(日) 12:36:10
foreach $hash_ref (@foo) {
$hash_ref->{bar}
}
243デフォルトの名無しさん:2008/10/19(日) 12:40:57
それは…リファレンスですか?
試してみたら通りました。回答ありがとうございました
244デフォルトの名無しさん:2008/10/19(日) 12:43:16
そもそも「ハッシュが詰まった配列」と君が呼んでいるものの正体が
「ハッシュのリファレンスが詰まった配列」だから。
foreachで一つ一つ取り出す時も、当然それをリファレンスとして扱わなきゃダメ。
245デフォルトの名無しさん:2008/10/19(日) 12:50:50
……難しいorz
適当に入門サイト眺めただけだとやっぱり駄目ですね、今度らくだ本買ってじっくり読むことにします
246質問:2008/10/19(日) 16:56:31
ファイルに書き込まれている特定の文字列(ABC数字)を抽出するにあたってよい方法はありますか?

・取得したい文字列の例は、ABC+数字で構成される たとえばABC11やABC2543など
・ファイルによっては行数が異なる。
・各行に取得したい文字列は0個以上ある。
・各行で、取得したい文字列が位置する場所はさまざま。(先頭にあったり、途中にあったり、)

247デフォルトの名無しさん:2008/10/19(日) 17:00:19
>>245
本も良いがまずは perldoc に当たる習慣を付けた方がいい。
メジャーなドキュメントなら和訳も web を探せばある。

ttp://perldoc.jp/docs/

ttp://fleur.hio.jp/perldoc/

ttp://homepage3.nifty.com/hippo2000/perltips/index.htm
248デフォルトの名無しさん:2008/10/19(日) 17:10:30
>>246
ふつうに1行ずつ読んでパターンマッチして切り出していけばいいだけ。
249質問:2008/10/19(日) 17:20:17
>>248
各行に0〜数個(決まりはないけど最大10程度)あるので・・
if($_=~/ABC(\d+))/)
なら1つは取得できても、その他の文字列をどうやって取得すればいいのか・・

ファイルの例)
マツダ スバル
ABC111 ABC23 トヨタ
日産 本田 ABC2222


↑ここからABCxxxの文字列だけ抽出したい
250デフォルトの名無しさん:2008/10/19(日) 17:26:11
>>249
マニュアル見れ
251デフォルトの名無しさん:2008/10/19(日) 17:27:06
>>249
必要な数だけパターンマッチして切り出していけばいいだけ。
252デフォルトの名無しさん:2008/10/19(日) 18:32:45
マニュアル読まないヤツ大杉

>>241
>foreach %hoge (@fuga)
こんな無茶な構文あり得ないだろ

>>249
パターンマッチのオプションを調べれ
253デフォルトの名無しさん:2008/10/19(日) 20:46:49
>>249
# 一行ヒント野郎
perl -nle "$, = ' '; print $., /ABC\d+/g" < ファイル名
254デフォルトの名無しさん:2008/10/21(火) 23:09:08
いくつか教えてください。
Perlでブログ(RSSつき)みたいな機能って作れますか?
あと家計簿なんかも作れますか?

今勉強中なんですが、目標が無いと挫折しそうなんです(^^;)
255デフォルトの名無しさん:2008/10/21(火) 23:10:53
>>254
おまえならやれる。
256デフォルトの名無しさん:2008/10/21(火) 23:29:51
Perl単体じゃあ家計簿は無理じゃない?
Perl/Tk使うのかな。
257デフォルトの名無しさん:2008/10/21(火) 23:56:14
>>256
っ[Web]
258デフォルトの名無しさん:2008/10/22(水) 00:32:22
PerlMagickを使って画像を編集したいのですが、
$image_dataに画像データが入っていて、それを読み込み/編集/書き込みたい場合はどうやったらいいのでしょうか?
$image->Read($image_data);
$image->Flip;
$image->Write($image_data);
のようなことです。
259258:2008/10/22(水) 00:53:16
↓で出来ました。スレ汚しすいませんでした。
my $image = Image::Magick->new(magick=>'gif');
$image->BlobToImage($image_data);
$image->Flip();
$image_data = $image->ImageToBlob();
260デフォルトの名無しさん:2008/10/22(水) 13:06:56
家計簿なんてExcelでいいじゃん
261デフォルトの名無しさん:2008/10/23(木) 00:28:09
>>256
> Perl単体じゃあ家計簿は無理じゃない?

確かにそうだな。まともなシェルが必要だ。
262デフォルトの名無しさん:2008/10/23(木) 01:44:57
>>260
俺も最初そう思ったんだが、Excelは結局馬鹿だし、Excel用アドイン作ってる連中も馬鹿だから以下のようにした。

・入力はExcel
・Perl+Spreadsheet::ParseExceでウハウハ
・Perlで計算
・Perl+LaTeX系モジュールで帳票自動生成&改ページ自動編集&印刷

これで8年くらい確定申告の提出書類を作成してる。
いまだに国税庁のマルサは来ない。
まー奴らは俺みたいな貧乏人はスルーしてるだけだがw
263デフォルトの名無しさん:2008/10/23(木) 20:36:56
264デフォルトの名無しさん:2008/10/24(金) 14:43:04
PerlでCのプリプロセッサのように#ifdefでコンパイルするコードを切り替えたりとかってできませんか?
265デフォルトの名無しさん:2008/10/24(金) 14:50:59
>>264
できる
266デフォルトの名無しさん:2008/10/24(金) 14:58:18
>>264
つ-Pオプション

でもいろいろ問題あるから使わないほうがいいよ。
最終的に何をしたいのかわからないが、たいてい
使わないでできるもっといい方法がある。
267デフォルトの名無しさん:2008/10/24(金) 23:33:04
perlでアパッチのアクセスログを振り分けるってできる?
268デフォルトの名無しさん:2008/10/24(金) 23:35:36
きみの能力しだい。
269デフォルトの名無しさん:2008/10/24(金) 23:38:16
>>267
もちろんできる。できない理由はない。
270デフォルトの名無しさん:2008/10/24(金) 23:45:05
おまえらにやらせようと思ったんだけど、コード書く?
271デフォルトの名無しさん:2008/10/25(土) 01:24:17
>>270
そういうときは、報酬も書いておくと話が早く進むぞ。
272デフォルトの名無しさん:2008/10/25(土) 01:59:01
じゃあ1円
273デフォルトの名無しさん:2008/10/25(土) 07:03:27
進まねぇよ
274デフォルトの名無しさん:2008/10/25(土) 14:56:52
Perlで線形リストのようなデータの持ち方をしたいのですが、
どうすればいいでしょうか?
a->b,c a->b->d,e a->c->f,g
のような感じです
275デフォルトの名無しさん:2008/10/25(土) 16:02:27
リファレンス使えばいいのでは?
276デフォルトの名無しさん:2008/10/25(土) 16:17:22
あるいは古式ゆかしく配列を使うか
277デフォルトの名無しさん:2008/10/25(土) 22:40:17
UNIXマシンからとある機器arielに対してtelnetセッション
をはりっぱにし、arielから吐かれるメッセージをローカル
のディスクにロギングしたいとです。。。

arielの仕様では、無通信時間5分でtimeoutになるので
5分毎に"\n"を送信しようと思います。

自分の頭では以下の様に、whileループでarielからのデータ
を待ち続けるロジックしか思いつかず、これでは5分毎の
"\n"送信をどうして行えばよいのか解りませんとです。

エロい方、なんとか教えてください。。。

open (OUTLOG,">>./ariel.log");

$socket = IO::Socket::INET->new(
  PeerAddr => 'ariel',
  PeerPort => '23',
  Proto  => 'tcp',
);

if ( ! $socket ){ die }

while(1){
  $buf = <$socket>;
  print OUTLOG $buf\n";
}
278デフォルトの名無しさん:2008/10/25(土) 23:08:28
>>277
とりあえずNet::Telnet使えば?
279 ◆TWARamEjuA :2008/10/25(土) 23:10:30
cronで5分ごとに\nを送信してあげる別プロセスを作っておく。
280デフォルトの名無しさん:2008/10/25(土) 23:49:42
レスあんがあちょです

>>278
Net::telnetは

 @result = $telnet->cmd("ls -l");

の様な使用例しか無いので、>>277のケースではどうかなーって思って

>>279
別プロセスでなく、同一セッション中で"\n"送らないとダメな気がします
って、んん?別プロから何かシグナルをこのプロセスに対して5分間隔
送ればいいのかぁーー!? そんなのできるんかな、調べてみよう
281デフォルトの名無しさん:2008/10/25(土) 23:56:55
>>280
シグナルハンドリングを知っているなら、alarmで起こせばいいだろ。
282デフォルトの名無しさん:2008/10/26(日) 00:29:26
>>281
おおっ!何と言うことでしょう。
なんだか出来そうな予感がしてまいりました。
月曜に会社行くのが楽しみになってきたw
ヒントあんがちょ。多謝です。

こんなカンジかな?

略〜

$SIG{ALRM} = \&timeout; # timeout時の¥に実行する関数
alarm 280;       # 5分=300秒より小さい値でアラーム

while(1){
  $buf = <$socket>;
  print OUTLOG $buf\n";
}

sub timeout {
  print <$socket> "\n"; # 待望の"\n"送信!!
  alarm 280;      # アラーム再設定
}

283デフォルトの名無しさん:2008/10/26(日) 15:29:24
手元のIMAP鯖からGMailにメールを引っ越すスクリプトを書いてます。

Mail::IMAPClientベースで書いていたのですが、

$from->migrate($to, "ALL", "OUTBOX") or die "Could not migrate: $@ \n";
この行で手元サーバからGMailへメールを移行しようとしても、移行できていないようです。
$from は 手元サーバ, $to はGMailです。GMailへの接続login自体はうまくいっているようです。
OUTBOXラベルはGMail側で作って、IMAPから見えるように設定済みです。

アドバイスいただけますでしょうか?
284デフォルトの名無しさん:2008/10/26(日) 16:12:50
>>283
自己解決。migrateを使うのを諦めて、appendとfetchで処理しました。
お騒がせスマソ。
285デフォルトの名無しさん:2008/10/26(日) 17:43:20
通常、文字列の頭から適用される正規表現を後ろから見る方法はないでしょうか?

例えば、以下のように行った場合、
---------------------
my $str = 'a b c d';
$str =~ s/ //;
---------------------
a直後のスペースが消えますが、cの後ろのスペースを消すような正規表現は出来ないでしょうか?
abcdといった文字列は可変です。
事前に文字列を反転させるしか思い浮かばないのですが他に方法はあるのでしょうか?

宜しくお願いします。
286デフォルトの名無しさん:2008/10/26(日) 17:45:23
$str =~ s/(.*) /\1/;
287デフォルトの名無しさん:2008/10/26(日) 20:37:58
>>286
ありがとうございます!!
288デフォルトの名無しさん:2008/10/27(月) 15:12:37
Perl のオブジェクト指向がなんだか無理矢理って感じで、
直感的じゃなくて困っています。Pythonにしとけばよかた。
289デフォルトの名無しさん:2008/10/27(月) 15:30:10
>>288
うん、とっととPerlのことを忘れてPythonに移れ。
290デフォルトの名無しさん:2008/10/27(月) 15:37:36
おれなら、
$str=~/ ([^ ]*?)$/$1/;

どっちでもいいんだけど、>>286と比較したら
どっちの効率がいいんだろう?
291デフォルトの名無しさん:2008/10/27(月) 16:00:31
A.cgiにAformからアクセスしたときと、Bformからアクセスしたときで処理内容を変えるようなプログラムにするにはどうしたらいいですか?
Aから来たときはロケーション無し、Bからなら有り のような感じにしたいのですが
292デフォルトの名無しさん:2008/10/27(月) 16:06:30
リファラー見るとかhiddenで何か持たせるとかボタン名変えるとか
293デフォルトの名無しさん:2008/10/27(月) 16:28:05
>>291
次のどっちかで区別できる。
環境変数HTTP_REFERER
INPUT(TYPE=HIDDEN)要素


でもこれ、Perlの質問じゃないのでスレ違い。
Web系のとこにいけ。
294デフォルトの名無しさん:2008/10/27(月) 17:06:45
>>292-293
ありがとう、試してみます
そして、移動してログよんできます
ごめん
295デフォルトの名無しさん:2008/10/27(月) 22:05:58
$str =~ s/ (?=[^ ]*$)//;
とか
296デフォルトの名無しさん:2008/10/28(火) 09:09:50
>>295
先読みアサーションか。そういえばあったなー。
新しいせいか慣れないせいか、オレはどうしても忘れがち。
297デフォルトの名無しさん:2008/10/28(火) 16:53:15
質問です。
クラスA
クラスB
それぞれのオブジェクト指向モジュールがあったとします。
なかでの処理には変数が英数をチェックしたり文字数チェックしたりでエラーを
だすようにしるとします。

で、問題は英数や文字数をチェックするルーチンはどう実装するのが理想でしょうか?
簡単なルーチンだからそれぞれのクラスにサブルーチンとして最後の行にでも書いておけ!
っていうことでもいいでしょうか?
298デフォルトの名無しさん:2008/10/28(火) 17:56:07
日本語で
299デフォルトの名無しさん:2008/10/28(火) 20:45:57
300デフォルトの名無しさん:2008/10/28(火) 23:19:11
Tripletailを使用しています。
下記のように前のページからPOSTデータを取得してTemplateに書き出したいのですが、うまく行きません。
どう修正すればよいでしょうか?

#! /usr/bin/perl

use strict;
use warnings;
use Tripletail qw(/dev/null);
use CGI;

$TL->startCgi(
-main => \&main,
);

sub main {
my $t = $TL->newTemplate('template.html');
my $cgi = CGI::new();

#前ページからPOSTデータの取得
$a = $cgi->param('a');
$b = $cgi->param('b');

$t->expand(
STR => $a,
NUM => $b,
);
$t->flush;
}

301デフォルトの名無しさん:2008/10/28(火) 23:39:13
TripletaiLは使ったことないが、「うまく行きません」とやらの詳細を書くべきだな。
302デフォルトの名無しさん:2008/10/28(火) 23:45:21
>>301
ああ、ごめんなさい。

通常、Tripletailを使用せずにPOSTデータを取得する場合、
use CGI;
$cgi = CGI::new();
$data1 = $cgi->param('p_data1');

これで取得はできますが、
上記の sub mainの中で取得しようとすると、
取得できないようです。

まだわかりにくい説明かもしれませんが、お願いします。
303デフォルトの名無しさん:2008/10/29(水) 00:40:51
webprog池
304デフォルトの名無しさん:2008/10/29(水) 01:18:30
>>299
ありがとうございました。そのものずばりの参考ページのようです。
がんばって吸収したいと思います。
305デフォルトの名無しさん:2008/10/29(水) 02:18:09
>>304
> ありがとうございました。そのものずばりの参考ページのようです。

Perlの添付ドキュメントだけどな。おまえのPCにも入っているはず。
306デフォルトの名無しさん:2008/10/29(水) 17:52:59
use strict しているコードで $a $b を未宣言で使おうとしてもエラーにならないんだけど、どうして?
307デフォルトの名無しさん:2008/10/29(水) 18:02:12
$a $bはsortブロックで使われる定義済みの特殊変数だから。
308デフォルトの名無しさん:2008/10/31(金) 23:43:20
utf8で保存できるエディタで、使いやすいものがありましたら、
教えてくれると、大変助かります。
309デフォルトの名無しさん:2008/10/31(金) 23:55:58
>>308
emacs または meadow
310デフォルトの名無しさん:2008/10/31(金) 23:56:23
OSは?
311デフォルトの名無しさん:2008/11/01(土) 00:07:23
板違いすぎるだろ…
312デフォルトの名無しさん:2008/11/01(土) 15:06:35
>>308
Notepad++
313デフォルトの名無しさん:2008/11/02(日) 13:55:18
質問です。まだイブジェクト指向は新米なんですが、

継承とかの説明をみるに、継承のスパゲッティになりそうな 気がするんですが
その辺はエキスパートの実際ってどうなんでしょうか?


314デフォルトの名無しさん:2008/11/02(日) 14:00:30
>>313
質問してないでソースコード読め。
315デフォルトの名無しさん:2008/11/02(日) 18:17:25
イブジェクト指向
316デフォルトの名無しさん:2008/11/02(日) 18:21:46
英語でいうと、 ibject oriented
317デフォルトの名無しさん:2008/11/02(日) 19:05:20
イブジェマスジー?
318デフォルトの名無しさん:2008/11/02(日) 19:45:14
オブイェークト指向
319デフォルトの名無しさん:2008/11/02(日) 23:19:24
学校に

「CGI/Perl リファレンス」

こういう本があるんですがこの2つって同じようなもんなんですか?
CGI=掲示板 Perl=通信 ってイメージがあるんですが
320デフォルトの名無しさん:2008/11/02(日) 23:28:09
321デフォルトの名無しさん:2008/11/02(日) 23:47:14
perlで指定したURLのファイルをダウンロードするにはどうすればいいんですか?

system関数を使わないで実現したいです
322デフォルトの名無しさん:2008/11/02(日) 23:57:19
LWP::UserAgent
323デフォルトの名無しさん:2008/11/03(月) 00:27:35
>>321
URI::Fetch
324デフォルトの名無しさん:2008/11/03(月) 02:02:59
>>306
なぜエラーにならなければならないの?
325デフォルトの名無しさん:2008/11/03(月) 02:04:53
>>313
他言語同様、継承はなるべく使わない方向で。
他言語での経験があるなら無問題。
326デフォルトの名無しさん:2008/11/03(月) 02:07:45
>>319
CGIがPerlで書かれたものとは限らない
ていうかCGIとPerlじゃ比べる次元が違う
とりあえずページめくれよ
327デフォルトの名無しさん:2008/11/03(月) 02:08:47
>>321
CPAN LWP::Simple検索してサンプル試してみ
328デフォルトの名無しさん:2008/11/03(月) 23:12:57
ActivePerl 5.8.8を使ってます。PPMはGUIになったやつです。

PPMでリポジトリを追加したら、フリーズして、そのまま動かなくなりました。
追加したリポジトリは http://ppm.tcool.org/archives/ です。
何度起動しても、起動時にフリーズします。
多分追加したリポジトリを読みに行ってる時に固まってるんだと思います。
どうやったらこのリポジトリを削除できるでしょうか。
C:\Perlの中のどこかにリポジトリのURLが保存されてて、それを消したら良いんじゃないかと考えたんですが
フォルダ内をGREPしてもURLは見つかりませんでした・・・。

329デフォルトの名無しさん:2008/11/04(火) 00:38:30
C:\Documents and Settings\(user)\Local Settings\Application Data\ActiveState\ActivePerl\(build version)\
以下の、ppm〜なんちゃら.dbファイルを消す。

ってか、DOS窓からコマンドライン用のppmでやればいい。C:\Perl\htmlにマニュアルもあることだし。
330デフォルトの名無しさん:2008/11/04(火) 01:36:33
>>392
ありがとうございます。
言われて気づいてみたら、ppm-shellってのがあるんですね。
最近のActivePerlはGUI版PPMしか無いのかと思ってました。
331デフォルトの名無しさん:2008/11/07(金) 18:37:21
ActivePerlをインストールし、perlを採用したプログラミング入門書を見ながらやっているのですが、
ファイルを開くと一応コマンドプロンプトが起動し、実行されるのですが一瞬で消えてしまいます。

最初は、
print"やあ世界!\n;"

exit;
としか書いてなくて、一瞬で終わっちゃうからだなと思い(一瞬ですがやあ世界という表示はされてました)、
入門書の例文にあった
print"名前を入力してください。\n";
$onamae=<STDIN>;
chop $onamae;
print"\n";
print"あなたのお名前は$onamaeさんです。\n;
print"$onamaeさんこんにちは。";
exit;
という内容のファイルを作ってみました。
しかし、名前を打ち込むスキもなく終了してしまいます。

エスパーにしか答えようがない質問かもしれませんが宜しくお願いします。
OSはXPで、入門書は2000年頃の古いものです。
332デフォルトの名無しさん:2008/11/07(金) 18:48:53
>>331
まさかファイルをエクスプローラ上でクリックして動かしてる?
それじゃダメだ
まずコマンドプロンプトを起動してそこで

C:\> perl [ ファイル名 ] [ RETURN ]

で実行しないと
333デフォルトの名無しさん:2008/11/07(金) 18:55:09
>>331
定番の入門書リャマ本
ttp://www.oreilly.co.jp/books/4873111269/
334デフォルトの名無しさん:2008/11/07(金) 18:55:48
>>332
ありがとうございます。
さきほどhttp://www.site-cooler.com/kwl/perl/を読んでやってみたら色々できました
さっきの二番目の例文はなにかミスってるみたいでエラーがなんとかって英文で返されてしまいましたが。

なんだこの本・・・大事なことが書いてない。
335デフォルトの名無しさん:2008/11/07(金) 18:57:34
>>333
ありがとうございます。
また何かつっかえたら買い換えますw
336デフォルトの名無しさん:2008/11/07(金) 19:11:31
今は21世紀だぜ?なんでまた20世紀の古い本を・・・
337デフォルトの名無しさん:2008/11/07(金) 21:14:29
>>336
じゃあ、2008年6月発売のを

http://oreilly.com/catalog/9780596520106/
338デフォルトの名無しさん:2008/11/08(土) 01:45:17
>>331
>print"あなたのお名前は$onamaeさんです。\n;
文字列を閉じてない。「\n」の後に「"」が必要。

ところで、文字列のクォートにはqq{}もおすすめ。
339デフォルトの名無しさん:2008/11/08(土) 17:11:08
質問です。

my %hash = @arr;
$hash{'SendTE'} = 0;
@arr = %hash;

ハッシュのように扱われてる特殊な配列に
重複しないキーを与えるには上記のように
書いていました。
これを一発で書くにはどう書けばいいでしょうか?
(配列をハッシュのように扱いたい。)
340デフォルトの名無しさん:2008/11/09(日) 00:51:07
for(my i=0; i<@arr;i+=2){ $arr[$i+1] = 0 if $arr[$i] eq 'SendTE' }
341デフォルトの名無しさん:2008/11/09(日) 08:02:11
>>339
普通に
my %hash = ( @arr, 'SendTE' => 0 ) ;
じゃダメなのか?サブルーチンとかでの常套手段だけど?

sub hoge {
 my %hash= ( foo => 'bar', @_ ) ;
 return $hash{foo} ;
}
printf "%s\n", hoge( foo => 'foo' ) ;
342デフォルトの名無しさん:2008/11/09(日) 08:37:45
ハッシュにリストを代入するときキーに相当するところに同じ値が複数あると
どれが優先されるかは決まってたっけ?

%h = (a => 1, a=> 2);
print $h{a}

試せば今の処理系でどっちかはわかるけど、仕様としてマニュアル等に明記
されているかどうかを知りたい。
343デフォルトの名無しさん:2008/11/09(日) 10:27:31
マニュアル代読サービスに頼めよ
344デフォルトの名無しさん:2008/11/09(日) 10:46:01
>>342
programing perl のhashの説明、冒頭にそのまんまの記載があるじゃん。
my %h = ( a => 1, a=> 2 ) ;
は、以下のコードと同じ効果がある。
my %h = () ;
${a} = 1;
${a} = 2;
同じキーだと通用しないとでも思うのはあなたの勝手。

345デフォルトの名無しさん:2008/11/09(日) 16:54:02
>>342
上書きされるってことになるんだから()内がどっち向きに処理されるか考えりゃ良い
346デフォルトの名無しさん:2008/11/09(日) 18:03:31
いや、少なくとも考えて分かる類のものじゃないでしょ。
347デフォルトの名無しさん:2008/11/09(日) 18:34:34
@arrには、$arr[0] = 0 しか実行されないような気がするのですが、何故以下のような結果に
なるのでしょうか?

use Data::Dumper;

$i = 0;
$arr[$i] = $i++;

print Dumper \@arr; #=> [undef, 0]
348デフォルトの名無しさん:2008/11/09(日) 19:20:11
むかしPerlクイズで結城さんも混乱してたな。
俺のイメージでは、
= (代入するよー)
$i (右辺の$iは0だなー)
++($iをインクリメントするよー)
$arr[$i] ($arr[$i]に0代入するんだなー。$iはなんだろなー。1だなー)
ってことで、$arr[1]が0になる。
349デフォルトの名無しさん:2008/11/09(日) 19:37:55
俺なんかの説明じゃあれなので、Perlクイズの該当箇所のバックナンバー
ttp://archive.mag2.com/0000015670/19990811001000000.html?start=160
350デフォルトの名無しさん:2008/11/09(日) 19:45:50
351デフォルトの名無しさん:2008/11/09(日) 20:03:53
なるほどねぇ。クイズとしては面白けど、
そんなクソなコードは間違っても書かないから、どうでもいい。
まったく何の役にも立たないし、他の言語への応用も利かないムダ知識やん。
352デフォルトの名無しさん:2008/11/09(日) 20:31:38
>>344
perldataあたりざっと見てそれらしい記述を見つけられなかったのですが、
ラクダに書いてあるんなら仕様だと思っていいのかな。ありがとう。
353デフォルトの名無しさん:2008/11/09(日) 20:37:06
そもそも「ハッシュ」の意味が分かってないだろ?
分かってたらそんな疑問は持たないはず。
354デフォルトの名無しさん:2008/11/09(日) 20:38:34
>>351
クイズのリンク先を読むと仕様ではっきり決まってないってあたりまで
説明されてるのでそういうコードは書いちゃいけないというところまで
理解すれば無駄ではないと思うよ。
355デフォルトの名無しさん:2008/11/09(日) 20:42:51
更に考えると、そもそも重複したキーを配列に持つときにどれを優先したいか、って話だな。
だから実際には問題になることがない問題なのだ。
356デフォルトの名無しさん:2008/11/09(日) 20:46:12
>>353
リストを連想配列に変換するときにどれを優先するかなんて必ずしも自明じゃないだろ。

ごく自然な仕様として、
* 前を優先する
* 優先順位は決めない
の二つがある。
357デフォルトの名無しさん:2008/11/09(日) 21:07:04
自明だよ。
* 最後を優先する
に決まってるだろ。
右辺側は順序を保持するリストなんだから。
これはLISPでも、Cのカンマ演算子でも同じ、「最終評価値」の概念。

お前さんは以下のような仕様だと嬉しいにか?
$a = 1;
$a = 2; # $aの値は 1 のまま
358デフォルトの名無しさん:2008/11/09(日) 21:21:07
バッドノウハウ地獄
359デフォルトの名無しさん:2008/11/09(日) 21:23:45
だがperlは常に信用できない。気持ち的に。
360デフォルトの名無しさん:2008/11/09(日) 21:33:28
そして今日もPythonやRubyの入門サイトをチラ見するけど本腰を入れることはない……
361デフォルトの名無しさん:2008/11/09(日) 21:36:45
>>357
後者はそのとおりだが。前者は全く自明じゃない。
変な思い込みをする癖は直した方がいいよ。
362デフォルトの名無しさん:2008/11/10(月) 00:13:56
>>361
( )の処理が右から左だと思う根拠は?
363デフォルトの名無しさん:2008/11/10(月) 00:20:23
日本語が通じないらしい
364デフォルトの名無しさん:2008/11/10(月) 00:36:38
左から右だという根拠を私は残念ながら知らないので勝手にそう思い込むのは危険
という主張です。根拠があるのなら示してもらえばそうでしたかで済みます。

もちろん右から左だという根拠も同じぐらいありません。

365デフォルトの名無しさん:2008/11/10(月) 01:15:32
つーか %hash = @rray ってときに、何か例外があるんじゃないかという畏れ。
366デフォルトの名無しさん:2008/11/10(月) 01:22:58
本来ならリストから連想配列への変換関数を使わないといけないところを、
ただの代入文で済ませてしまえる言語仕様が、諸悪の根源な気がする。
367デフォルトの名無しさん:2008/11/10(月) 01:55:02
諸悪の根源は、

「Perlはもうそろそろ終わり。Perlの経験を踏まえたあたらしいスクリプト言語へ
シフトしましょう……って、え? CGIってなに? あ、使うな!」

となってしまったこと。
368デフォルトの名無しさん:2008/11/10(月) 02:02:16
正論側の根拠なんぞ簡単だろ。ほれ。
----
%a = (1,2,3,4,1,'a',2,'b',3,'c',4,'d');
print %a;
----
結果→4d1a3c2b # ハッシュだから順不同。
これ即ち (1=>'a' , 2=>'b' , 3=>'c' , 4=>'d')

馬鹿側が根拠を示すのも簡単だ。上記以外の結果を示せば良い。
馬鹿には無理だろうがな。
369デフォルトの名無しさん:2008/11/10(月) 03:06:03
いや、言語仕様と実装の話だよ。
370デフォルトの名無しさん:2008/11/10(月) 06:31:49
>>368
自尊心だけは十分育ってるようだから、次は知能と知識だね。
頑張って!
371デフォルトの名無しさん:2008/11/10(月) 08:55:32 BE:141505128-PLT(54321)
ネタだろ…
372デフォルトの名無しさん:2008/11/10(月) 10:20:20
まぁそういうことにしたいよな。
373デフォルトの名無しさん:2008/11/10(月) 12:47:06
__END__リテラルを含むfoo.plからexecを使うと
execしたプロセスが全部終了するまで
foo.plはロックされるものなのだろうか
374デフォルトの名無しさん:2008/11/10(月) 13:34:04
>>373
関係ないと思うよ
375デフォルトの名無しさん:2008/11/10(月) 17:10:32
>>349
現在の結城さんだったら把握してそうだけど。
>私が調べた限りでは、代入演算子の右と左でどちらを先に評価するかは、
>Perlの本には言及されていませんでした。
perltrap にばっちり記載されてる。
右辺を先に評価。
# perl の 5.005_02/ 1998-Aug-08 でも。

LHS vs. RHS of any assignment operator

LHS vs. RHS of any assignment operator. LHS is evaluated first in
perl4, second in perl5; this can affect the relationship between
side-effects in sub-expressions.

@arr = ( 'left', 'right' );
$a{shift @arr} = shift @arr;
print join( ' ', keys %a );

# perl4 prints: left
# perl5 prints: right
376デフォルトの名無しさん:2008/11/10(月) 19:20:54
>>374
__END__リテラルって意味わからんので、__DATA__セクションのことなんじゃないだろうか?

ただ、プロセス寿命の話なら、ちゃんとした仕様は
たぶんなくて、実装次第+環境次第だろと思う。
だいたい、UNIXとWindowsでかなり違うよな。
377デフォルトの名無しさん:2008/11/10(月) 19:31:32
>>376
ごめんリテラルじゃないね、セクションかトークンと言うべきだった。
うちの環境はWindows XP SP3 + ActivePerl v5.8.8 built for MSWin32-x86-multi-thread
Binary build 817 [257965] Built Mar 20 2006 17:54:25
らしい。

execしたプログラムが走ってる状態のままスクリプトを上書き修正しようとしたら
拒否されて不便だったんだけど、__END__削ったら上書きできた。
なにゆえなのか、よくわからない…
378デフォルトの名無しさん:2008/11/10(月) 20:46:37
>>375
初心者ですが、これは襲撃でした。
自然な思考法なら、perl4の結果を期待するのではないでしょうか?
(それは、初心者だけか)
379デフォルトの名無しさん:2008/11/10(月) 20:47:15
>>378
襲撃でなく、衝撃です。
380デフォルトの名無しさん:2008/11/10(月) 21:09:12 BE:212256083-PLT(54321)
襲撃wwww
381デフォルトの名無しさん:2008/11/10(月) 21:35:40
常識で判断しないのがperlプログラマーだ。
perlの全てを知ってるのが訓練されたperlプログラマーだ。

ほんとperlは地獄だぜ。HAHAHAHAHA
382デフォルトの名無しさん:2008/11/10(月) 22:06:11
perl -le '$i=0;$arr[$i++]=$i;print $arr[0]'
これは1なんだな。わけわかんね。
383デフォルトの名無しさん:2008/11/11(火) 01:36:13
perl = CGI

CGI = perl
384デフォルトの名無しさん:2008/11/11(火) 07:33:41
>>382 モチツケ
385デフォルトの名無しさん:2008/11/11(火) 07:40:28
初心者ですが、どこかのスレでperlの進化型が
ruby,pythonと言う説を見かけました。
これは本当と言えますか?
386デフォルトの名無しさん:2008/11/11(火) 07:59:06
もしそうなら引っ越す
387デフォルトの名無しさん:2008/11/11(火) 08:46:36
>>385
言える
388デフォルトの名無しさん:2008/11/11(火) 09:10:17
>>385
きれいなPerl=Ruby
Perlを捨てて0からシンプルかつ強力に作ったもの=Python
389デフォルトの名無しさん:2008/11/11(火) 09:24:08
>>385
解釈による。

オレ的には認めない。
「進化」ではないだろ。
390デフォルトの名無しさん:2008/11/11(火) 09:31:33
>>377
>__END__削ったら上書きできた。
もう一度落ち着いて、__END__セクションを追加してから
動作を確認するべき。
391デフォルトの名無しさん:2008/11/11(火) 10:12:12
つまり、
サルが進化したものが人間。
perl が進化したものがruby/python
そゆこと?
392デフォルトの名無しさん:2008/11/11(火) 10:16:25
>>391
> サルが進化したものが人間。
> perl が進化したものがruby/python

スクリプト言語/インタプリタ言語の後発のものだということだから、
「perlが進化した」というように、単一の系列に押し込めるのは明らかな間違いだろう。
393デフォルトの名無しさん:2008/11/11(火) 10:19:04
>>386-389
レス有難うございます。
仮に、この三つを全然知らない場合、どれを会得しようと思いますか?
394デフォルトの名無しさん:2008/11/11(火) 10:52:56
>>393
初心者はPythonがお勧め。
395デフォルトの名無しさん:2008/11/11(火) 11:12:48
>>393
Python
396デフォルトの名無しさん:2008/11/11(火) 11:42:20
% perl -le '$i=0;$arr[$i++]=$i++;print $arr[1]'


ますますわけわかめ
397デフォルトの名無しさん:2008/11/11(火) 12:21:43
>>396 モチツケ

398デフォルトの名無しさん:2008/11/11(火) 12:56:02
>>396
それはええやろw
399デフォルトの名無しさん:2008/11/11(火) 13:00:42
>>393
Perl。

念のために言っとくが、ここはPerlスレだからな!w
400デフォルトの名無しさん:2008/11/11(火) 13:55:08
いまからPerlをやるって人って自虐者?
401デフォルトの名無しさん:2008/11/11(火) 13:58:02
>>382
これ左辺から評価してる?
402デフォルトの名無しさん:2008/11/11(火) 14:39:45
>>398
ちがうよ!全然ちがうよ!
>>382>>396を見比べるとすごく気持ちわるいんだよ!
403デフォルトの名無しさん:2008/11/11(火) 15:21:21
>>402
$i=0; $arr[++$i]=++$i; print $arr[2]
404デフォルトの名無しさん:2008/11/11(火) 15:49:19
馬鹿すぎて死にたい。

演算子の優先順位
左結合 項 リスト演算子 (左方向に対して)
左結合 ->
非結合 ++ --

ずーっと下に

右結合 = += -= *= などの代入演算子
405デフォルトの名無しさん:2008/11/11(火) 18:34:59
>>377
環境依存の可能性が高いので、Activeperl 5.8 + WinXP 限定の話として...
perlは__END__(又は__DATA__)を見つけると、ソースファイルをcloseせずに処理を開始する。
そしてexecしたプロセスに開いたファイルが引き継がれる。

ただしperlは単にファイルをリードオープンしているだけであり、何もロックしていないので、
ファイルの中身を書き換える事は可能。
Winでは開かれたファイルのリネームや削除が失敗するので、それに引っかかっているのでは?


>>382,396
perlの中では参照渡しだし、ポストインクリメント演算子は元の値を保持するための一時変数を作る。
配列用の代入処理部へは \配列,\要素番号,\値 が渡される
前者(382)では \@arr,\${古い$iの値(0)を保持している一時変数},\$i を渡すのに対して、
後者(396)だと \@arr,\${古い$iの値(1)を保持している一時変数},\${古い$iの値(0)を保持している一時変数}
を渡すという違い。
406デフォルトの名無しさん:2008/11/11(火) 18:55:14
質問です。
Storableを使ってハッシュをバイナリデータに書き出す際、
上書きではなく追加書き込みで保存する方法はあるのでしょうか。


test.pl
---
use strict;
use Storable qw(nstore);

%hash = (
"a" => '1',
"b" => '2',
);

nstore [%hash], "hash.dat";
----

test.plを一度実行し、hash.dat生成
407デフォルトの名無しさん:2008/11/11(火) 18:55:47
(続き)
その後test.pl内の%hashを

----
%hash = (
"c" => '3',
"d" => '4',
);
----

に書き換えて保存、再度test.plを実行

…するとhash.dat内には
c=>3 と d=>4 のペアしか存在していません。
つまり上書き保存されていることになります。
自分は追加保存の形にしたいのですが、
何かいい案がありましたらご教授ください。
よろしくお願いします。
408デフォルトの名無しさん:2008/11/11(火) 19:11:12
>>407
まず元のを読んでから要素を追加して書けばいいと思うよ
409デフォルトの名無しさん:2008/11/11(火) 21:56:02
質問です
外部プログラムを起動して、そのプログラムの実行中にperlから値を渡すといったことはできないでしょうか
あるCのプログラムを実行しscanfで入力待ちになり、そこへ値を渡すといった感じなのですが
410デフォルトの名無しさん:2008/11/11(火) 21:56:41
ソケット使えばできる。
411デフォルトの名無しさん:2008/11/12(水) 23:35:47
大学の宿題誰かおながいします・・・
>>>>>>>>>>>>>>>>>>>>>>>>>>>
配列,2次元配列を用いて, santaku.pl を以下のようにグレードアップせよ.
○ 3択の問題を4題出題し,正解数を最後に表示.
$mondai を @mondai にして配列化
@sentakuを 2次元配列化 $santaku[A][B]の形
$kotaeを @kotaeにして,配列化

これを santaku2.pl という名前で保存して動かす
412デフォルトの名無しさん:2008/11/12(水) 23:36:52
santaku.plっってのはこれです
# santaku.pl
# 問題
$mondai="東京ディズニーリゾートがあるのは次の内,どこか?";
# 選択肢
$sentaku[1]="東京県";
$sentaku[2]="千葉県";
$sentaku[3]="神奈川県";
# 答え
$kotae=2;
#
$user=0;
printf ("%s\n", $mondai); # 問題の表示
for ($i=1; $i<=3; $i++) { # 選択肢の表示
printf ("[%d] %s\n", $i, $sentaku[$i]);
}
printf ("答えを1〜3から選んでください ");
$user=<>;
if ($user==$kotae) {
printf ("正解\n");
} else {
printf ("不正解\n");
}
exit;

よろしくお願いします(;へ;)
413デフォルトの名無しさん:2008/11/12(水) 23:47:42
どこまで考えて、どこが分からないの?
414デフォルトの名無しさん:2008/11/12(水) 23:55:39
最初からわかりません・・・
1つずつやったら面倒だから二次元配列にするというのはなんとなくわかるのですが
どこから手をつけていいのか;;;

forを2重でつかったりもするんでしょうか・・・頭が痛いです;
415デフォルトの名無しさん:2008/11/13(木) 00:04:41
0番使えよ……
416デフォルトの名無しさん:2008/11/13(木) 00:16:04
$[=1;
417デフォルトの名無しさん:2008/11/13(木) 00:29:28
大学の教養でそういう講義があるのかな?

とりあえず、問題と答えを4問分2次元配列にして、
正解数をカウントする変数をつくればできると思う
418デフォルトの名無しさん:2008/11/13(木) 01:05:45
printf ……
419デフォルトの名無しさん:2008/11/13(木) 01:11:16
そうです、情報機器の操作っていう講義です

どうですか??正解数をカウントする変数はさっぱりです><
# =================== データ部分 ==========================
# 問題
$mondai[1]="東京ディズニーリゾートがあるのは次の内,どこか?";
$mondai[2]="東京大学があるのは次の内,どこか?";
$mondai[3]="横浜があるのは次の内,どこか?" ;
# 選択肢
$sentaku[1]="東京県"; $sentaku[2]="千葉県"; $sentaku[3]="神奈川県";
# 答え
$kotae[1]=2;
$kotae[2]=1;
$kotae[3]=3;
# =========================================================
#
# =================== 手続き部分 ==========================
#
$user=0;
printf ("%s\n", $mondai); # 問題の表示
for ($i=1; $i<=3; $i++) { # 選択肢の表示
printf ("[%d] %s\n", $i, $sentaku[$i]);
}
printf ("答えを1〜3から選んでください ");
$user=<>;
if ($user==$kotae) {
printf ("正解\n");
} else {
printf ("不正解\n");
}
exit;
420デフォルトの名無しさん:2008/11/13(木) 01:36:31
情報機器の操作とやら でperlなんだね

どちらかというとアバウトな言語だと、教える方も大変だろうに。

rubyとかpythonの方がよさそうだが
421デフォルトの名無しさん:2008/11/13(木) 01:39:28
>rubyとかpython
さっぱりです><
basic c javaなら講義中に名前を見ましたが。。
その教授はperlが使いやすいといっていたので、、よくわかりませんが


どなたかよろしくお願いします;明日の朝提出なので><
422デフォルトの名無しさん:2008/11/13(木) 01:58:02
明日の朝提出なのになんで今頃もってくるんだか。。。
毎日わかったところまでをここで聞いていればよかったのに。

printfだけなおして友達のを写した方が早いよ


423デフォルトの名無しさん:2008/11/13(木) 02:11:29
この程度のがわからないのならあきらめた方が良いんじゃね?
424デフォルトの名無しさん:2008/11/13(木) 02:27:03
明日の朝なら、まだ30時間くらいあるじゃない。
425デフォルトの名無しさん:2008/11/13(木) 08:04:28
# =================== データ部分 ==========================
# 問題
my @mondai=();
$mondai[0]="東京ディズニーリゾートがあるのは次の内,どこか?";
$mondai[1]="東京大学があるのは次の内,どこか?";
$mondai[2]="横浜があるのは次の内,どこか?";
# 選択肢
my @sentaku=();
$sentaku[0][0]="東京県"; $sentaku[0][1]="千葉県"; $sentaku[0][2]="神奈川県";
$sentaku[1][0]="東京県"; $sentaku[1][1]="千葉県"; $sentaku[1][2]="神奈川県";
$sentaku[2][0]="東京県"; $sentaku[2][1]="千葉県"; $sentaku[2][2]="神奈川県";
# 答え
my @kotae=(2,1,3);
# =================== 手続き部分 ==========================

my @input=();
for(my $cnt=0;$cnt<scalar(@mondai);$cnt++){
printf("%s\n", $mondai[$cnt] ); # 問題の表示
for(my $cnt2=0;$cnt2<3;$cnt2++) { # 選択肢の表示
printf("[%d] %s\n",$cnt2,$sentaku[$cnt][$cnt2] );
}
printf("答えを1〜3から選んでください");
my $user=<>;
push @input,$user;
}
exit;

とりあえず、問題表示部分だけ。正誤判定は自分で考えてください。
…ところで、「@sentakuを 2次元配列化 $santaku[A][B]の形」が嫌だなぁ。
リファレンス($santaku->[A][B])使っちゃ駄目なのかな?
426デフォルトの名無しさん:2008/11/13(木) 08:13:52
# =================== データ部分 ==========================
# 問題
my @mondai=("東京ディズニーリゾートがあるのは次の内,どこか?",
"東京大学があるのは次の内,どこか?","横浜があるのは次の内,どこか?");
# 選択肢
my @sentaku=(["東京県","千葉県","神奈川県"],["東京県","千葉県",
"神奈川県"],["東京県","千葉県","神奈川県"]);
# 答え
my @kotae=(2,1,3);
# =================== 手続き部分 ==========================
my @input=();
for(my $cnt1=0;$cnt1<scalar(@mondai);$cnt1++){
 printf("%s\n", $mondai[$cnt1] ); # 問題の表示
 for(my $cnt2=0;$cnt2<scalar(@{$sentaku[$cnt1]});$cnt2++) { # 選択肢の表示
  printf("[%d] %s\n",$cnt2,$sentaku[$cnt1][$cnt2] );
 }
 printf("答えを1〜3から選んでください");
 my $user=<>;
 push @input,$user;
}
exit;

この方がスッキリしてて良いかな?
427デフォルトの名無しさん:2008/11/13(木) 09:22:27
みんな、なんでいつものゴルフバージョンを作らないの?
428デフォルトの名無しさん:2008/11/13(木) 09:35:48
>>427
おまえが率先して作らないからだろ。司令官どの。
429デフォルトの名無しさん:2008/11/13(木) 10:50:48
419は「2次元配列」の意味がわかってない
430デフォルトの名無しさん:2008/11/13(木) 10:52:18
>…ところで、「@sentakuを 2次元配列化 $santaku[A][B]の形」が嫌だなぁ。
>リファレンス($santaku->[A][B])使っちゃ駄目なのかな?

よく、質問を質問で返す人がいるよね。
しかも、「・・・じゃダメなの?」という言い方する人が結構多い。
なんか頭悪そう。
431デフォルトの名無しさん:2008/11/13(木) 10:57:07
自信が無いから、質問を質問で返すのかな。とにかく頭悪そうに見える。
432デフォルトの名無しさん:2008/11/13(木) 11:05:00
頭の悪さ判定師が集結中のスレはここですか?
433デフォルトの名無しさん:2008/11/13(木) 11:27:51
課題にレスしちゃうところがなんか頭悪そう。
434デフォルトの名無しさん:2008/11/13(木) 11:28:49
配列変数で添え字が0から始まるのに、1、2、3…と使うのは気持ち悪い。
$[ = 1 とすればいいが、そんなの私は実際に使ったことない(使う必要ない)。
それに、問題、選択肢、回答と別々の配列変数に入れて、添え字でくくるのも
気持ち悪い。私なら無名ハッシュの配列を作るが。
my @mondai = (
"東京ディズニーリゾートがあるのは次の内,どこか?",
"東京大学があるのは次の内,どこか?",
"横浜があるのは次の内,どこか?",
);
my @sentaku = (
["東京県","千葉県","神奈川県"],
["東京県","千葉県","神奈川県"],
["東京県","千葉県","神奈川県"],
);
my @kotae = (2,1,3);
for my $q(0..@mondai-1) {
print $mondai[$q], "\n";
for my $i(1..@{$sentaku[$q]}) {
printf("[%d]%s\n", $i, $sentaku[$q][$i-1]);
}
my $input;
while (1) {
printf "答えを1〜3から選んでください: ";
chomp($input = <STDIN>);
last if $input =~ /^[1-3]$/;
}
print $input == $kotae[$q] ? "○正解" : "×不正解";
print "\n\n";
}
print "終わり\n";
435デフォルトの名無しさん:2008/11/13(木) 11:29:04
「東京県」に誰も突っ込まないのは頭悪すぎ
436434:2008/11/13(木) 11:30:21
>>435
しまったorz
437デフォルトの名無しさん:2008/11/13(木) 11:31:14
東京大学は東京都にも千葉県にも神奈川県にもあるのに頭悪すぎ
438デフォルトの名無しさん:2008/11/13(木) 11:33:41
埼玉都ですね。わかります。
439デフォルトの名無しさん:2008/11/13(木) 11:34:14
ttp://www.campuscity.jp/misscampus/todai/kawakami/
神戸県ですね、わかります。
440デフォルトの名無しさん:2008/11/13(木) 11:38:27
本質的な部分での発言ができないので
コメントや文字列リテラルの中のスペルミスやtypoに
突っ込まざるを得ない人たちが集まるスレはここですか?
441デフォルトの名無しさん:2008/11/13(木) 11:41:17
>>430
そういう言い方しちゃダメなの?
442デフォルトの名無しさん:2008/11/13(木) 11:43:21
ここで本質とは何を指していますか?
頭が悪いので教えてください。

443デフォルトの名無しさん:2008/11/13(木) 11:45:36
>>440
「本質的」とか言い出すあたり、すごく頭悪そう。
444デフォルトの名無しさん:2008/11/13(木) 11:47:23
ここは乗っかっとくとこだろw
445デフォルトの名無しさん:2008/11/13(木) 11:47:32
>>442
議題は横浜がどこにあるか です
446デフォルトの名無しさん:2008/11/13(木) 11:47:43
顔真っ赤だよw
そんなに恥ずかしかった?
447デフォルトの名無しさん:2008/11/13(木) 12:06:20
["東京県(都?)","千葉県","神奈川県"] が重複してるのがなんか嫌だね。

my @sentaku = (["東京県","千葉県","神奈川県"])x3;

とか短くできんのかな?
448デフォルトの名無しさん:2008/11/13(木) 12:11:53
449デフォルトの名無しさん:2008/11/13(木) 12:16:13
選択肢は広がる可能性があるからそれぞれ指定できるようにしておいたほうがいいと思う。
俺なら47都道府県を別配列で持っておいて、インデックスの配列で指定する。
my $sentaku = [
[1,2,3],
[1,2,3],
[1,2,3],
];
450デフォルトの名無しさん:2008/11/13(木) 12:16:17
>>441
「質問に質問で返す」ことはなぜよくないこととされているのでしょうか。
ttp://q.hatena.ne.jp/1144955089

451デフォルトの名無しさん:2008/11/13(木) 12:26:58
これさ、問題つくってるヤツアホだよな。
452デフォルトの名無しさん:2008/11/13(木) 12:32:45
?が付いただけで質問返しと認識するってどうよ…
って430までで唯一「・・・じゃダメなの?」を使ったオレが
顔を真っ赤にしてカキコ。

>>447
my @arr = ( ([1,2 ]) x 2 ) ;
453デフォルトの名無しさん:2008/11/13(木) 12:34:56
>>439
埼玉都はネタだけど、神戸県は明治初期に実在した。
454デフォルトの名無しさん:2008/11/13(木) 12:35:15
あ、問題見てなかった
リファレンス使わない2次元配列なんて、逆にわからんわ
455デフォルトの名無しさん:2008/11/13(木) 12:43:29
>>447
2問目の選択肢が変更になったらどうするのかねアンダーソン君
456デフォルトの名無しさん:2008/11/13(木) 13:00:06

リファレンス使わない2次元配列なんてない、
てことはリファレンスは使っていいのか、
となると2次元配列じゃない方がやりやすくね?

ってなるんだが。
457デフォルトの名無しさん:2008/11/13(木) 13:11:47
↑ こいつ最高に頭悪い
458デフォルトの名無しさん:2008/11/13(木) 13:35:50
>>2-458
すごく頭悪そう。
459デフォルトの名無しさん:2008/11/13(木) 15:09:10
>>458 チョトワロタ
460デフォルトの名無しさん:2008/11/13(木) 16:20:56
ヒマだったんで二次元配列縛りなしでやってみた。

my $ok = 0;
TEST: for ( @qz ) {
print $_->{'質問'} . "\n";
print "\t$_\n" for ( @{$_->{'選択肢'}} );
while (1) {
print '正しい選択肢の番号を入力してください(中止:q): ';
chomp ( my $c = <STDIN> );
last TEST if $c =~ /q/i;
if ( $c =~ /^\d+$/ && 1 <= $c && $c <= @qz ) {
$c == $_->{'答'} ? ( print "正解" and $ok++ ) : print "不正解";
last;
}
}
print "。\n\n";
}
print "$ok 問正解しました。\n";
461407:2008/11/13(木) 16:33:58
>>408
レスありがとうございます。
規制に巻き込まれてしまい、返事が遅くなってしまいました

やはり一度読み込み直すしかありませんか…
外部データが増えるとそれだけ読み込み・追加・書き出しに時間がかかってしまうので
何とか追加だけでやりくり出来ないかと考えていたのです。
アドバイスと合わせ、色々模索してみたいと思います
462460:2008/11/13(木) 16:48:31
誤 $c <= @qz
正 $c <= @{$_->{'選択肢'}}

余計なことするといつも恥をかく...orz


463デフォルトの名無しさん:2008/11/13(木) 18:20:36
>>461
> やはり一度読み込み直すしかありませんか…

いや。
普通、DBM類を使う。
464デフォルトの名無しさん:2008/11/13(木) 19:39:19
>>461
全ての面倒を読み込み側に押し付けるって手もある。
保存用フォルダに "${^T}.${$}" 等のファイル名で書き出すとか。
465デフォルトの名無しさん:2008/11/13(木) 20:08:32
この度、WindowsサーバーのPerlを5.6.1から5.8.8にバージョンアップ
する事になりました。
バーチャルサーバーを立ててWEBチームにテストしてもらっていたのですが、
動かない部分がいくつかある模様です。
WEBチームからPerlのバージョンアップによって
命令がどう変わったか等を調べて欲しいと頼まれたのですが、
どのようにして調べれば良いのでしょうか?

ご教授お願いいたします。
466デフォルトの名無しさん:2008/11/13(木) 20:21:12
467デフォルトの名無しさん:2008/11/13(木) 20:47:19
「質問を質問で返すな」って、そんな場面は、結構あると思うし、
そもそも(発端になった)>>435は質問に、まったく答えてない訳でも
無いのに…。

「夕飯何にしようか?」
「肉が良いなぁ。焼肉としゃぶしゃぶどっちが良い?」
「質問を質問で返すなm9(^Д^)プギャー」

とか言っちゃうのかな?(w
468デフォルトの名無しさん:2008/11/13(木) 20:51:27
いうだろ
469デフォルトの名無しさん:2008/11/13(木) 21:00:57
これがゆとり大学生の実態である。
470デフォルトの名無しさん:2008/11/13(木) 21:03:53
>>465
>命令がどう変わったか
「命令」は変わってないよな。w

マジレスすると、変更内容を調べるよりも、
ダメなところを特定して調整するほうがきっとマシ。
それがイヤなら、Perlのバージョンを戻せ。

つか、両方インストールして使いわけろよ。ふぁ。
471デフォルトの名無しさん:2008/11/13(木) 21:12:38
>>461
キーの重複はかまわないのか?

☆かまわない
別のファイルに出力してから、もとのファイルに
くっつければいいんじゃね。

☆ダメ
前のファイルを読み込まずに、重複を調べる
方法を教えろ。
続きはそれからだ。
472デフォルトの名無しさん:2008/11/13(木) 21:51:49
× 続きはそれからだ。
○ 続きはよそでやれ。
473デフォルトの名無しさん:2008/11/13(木) 21:56:22
「夕飯何にしようか?」
「普通に焼肉じゃいけないの?」
474デフォルトの名無しさん:2008/11/13(木) 21:56:52
「夕飯何にしようか?」
「普通にしゃぶしゃぶじゃいけないの?」
475デフォルトの名無しさん:2008/11/13(木) 21:57:56
「夕飯何にしようか?」
「普通にカレーじゃいけないの?」
476デフォルトの名無しさん:2008/11/13(木) 21:59:48
「夕飯何にしようか?」
「ラーメンじゃダメなの?」
477デフォルトの名無しさん:2008/11/13(木) 22:32:54
「夕飯何にしようか?」
「俺が決めていいの?」
478デフォルトの名無しさん:2008/11/14(金) 01:30:11
夫「今日の夕飯なに?」
妻「何が食べたいの?」
夫「質問に質問で返すなっ!!」

……これが>>430の結婚生活(もしあったとして)
479デフォルトの名無しさん:2008/11/14(金) 05:35:27
「夕飯何にしようか?」
「晩飯じゃないの?」
480デフォルトの名無しさん:2008/11/14(金) 06:10:57
単一ファイル内で複数packageを定義した場合、
継承がうまく動かないのですが、どうすれば良いでしょうか。

$foo = Foo->new(); # OK
$bar = Bar->new(); # NG

package Foo;
sub new { bless {}; }

package Bar;
@ISA = qw(Foo);


これだと Bar->new() が失敗します。
package Bar 部分を Bar.pm というファイルにして、ファイル先頭で use Bar すると
問題ないのですが、単一ファイル内で継承させる場合はどう書けば良いのでしょうか。
481デフォルトの名無しさん:2008/11/14(金) 06:42:23
{package Foo;
sub new { bless {}; } }
{package Bar;
@ISA = qw(Foo);}

$foo = Foo->new(); # OK
$bar = Bar->new(); # OK
482480:2008/11/14(金) 07:00:38
>>481
おおお。助かりました。thanks!
483デフォルトの名無しさん:2008/11/14(金) 08:40:19
package Foo;
sub new { bless {}; }

package Bar;
@ISA = qw(Foo);

package main;
$foo = Foo->new(); # OK
$bar = Bar->new(); # OK

じゃねえの
484デフォルトの名無しさん:2008/11/14(金) 14:24:45
夫「今日の夕飯なに?」
妻「スキヤキじゃダメなの?」
夫「・・・」
485デフォルトの名無しさん:2008/11/14(金) 14:26:27
夫「赤ちゃん産まれた?男の子?女の子?」
妻「男じゃダメなの?」
夫「・・・」
486デフォルトの名無しさん:2008/11/14(金) 19:10:29
>>485
その流れはヤバい!w
もう離婚するしかないな。
487デフォルトの名無しさん:2008/11/14(金) 20:42:25
ゴメン理解できない
童貞の俺にも分かるように詳しく
488デフォルトの名無しさん:2008/11/14(金) 20:53:25
童貞じゃないけど、俺もわからん!
489デフォルトの名無しさん:2008/11/14(金) 21:03:13
女だったら、夫がロリコンでいたずらすると思ったんだろう。
490デフォルトの名無しさん:2008/11/14(金) 21:50:28
な〜る
491デフォルトの名無しさん:2008/11/14(金) 21:58:27
深読みしすぎてた
トン
492デフォルトの名無しさん:2008/11/14(金) 22:46:06
>>489
それは俺も考えたけど、
それだとスキヤキが説明できない。
493デフォルトの名無しさん:2008/11/15(土) 05:16:10
>>485
もう嫁ケンカうってるじゃんw
494デフォルトの名無しさん:2008/11/15(土) 09:03:03
ツンなだけだろw
495デフォルトの名無しさん:2008/11/15(土) 10:19:13
生まれる段階に至っても性別を知らなかった夫
496デフォルトの名無しさん:2008/11/15(土) 19:02:17
産まれた?って訊いてる時点でダメだろ
497デフォルトの名無しさん:2008/11/15(土) 19:58:51
後のオブジェクト指向である
498デフォルトの名無しさん:2008/11/16(日) 02:32:11
同じ文字列を使ってもDigest::MD5で得られる16進とmd5sumの結果が違うのはなぜでしょうか
499498:2008/11/16(日) 02:36:14
自己解決しました。
一方には改行コードが含まれていないだけでした。
500デフォルトの名無しさん:2008/11/16(日) 10:31:38
perlのマッチ演算子で変数が使えますけど
$pat = "foo"; $str =~ /$pat/; # この場合 /foo/ と同じ
変数に含まれる文字を全て普通の文字としてマッチさせるにはどうしたらいいでしょうか。

たとえば $pat = "foo[0]"; だと、/$pat/では[0]の部分を文字クラスとして処理するよう
ですが、単純に "foo[0]" という文字にマッチしてほしいのです。
501デフォルトの名無しさん:2008/11/16(日) 10:36:15
/\Q$unko\E/
502デフォルトの名無しさん:2008/11/16(日) 13:14:45
dmain.cpp
Note: including file: d:/projects/game/include\common.h
Note: including file: d:/projects/game/include\product.h
Note: including file: d:/projects/etc/psdk/include\WindowsX.h
Note: including file: d:/projects/etc/psdk/include\windows.h

こういうファイルを

dmain.obj: \
/cygdrive/d/projects/game/include/common.h \
/cygdrive/d/projects/game/include/product.h \
/cygdrive/d/projects/etc/psdk/include/WindowsX.h \
/cygdrive/d/projects/etc/psdk/include/windows.h \
dmain.cpp

こんな風にするスクリプトってどうやるの?
503デフォルトの名無しさん:2008/11/16(日) 13:57:44
perl -ple 's/$/\\/; s/cpp/obj/; s/Note: including file: d:/\/cygdrive\/d/; END{ print "dmain.cpp";} '
504デフォルトの名無しさん:2008/11/17(月) 20:02:29
質問です。掲示板のプログラムなのですが、データファイル(1行1投稿内容のテキストファイル)
を掲示板のCGIのサーバーとは異なるサーバーに置きたいのですが、その場合どのように
すればよいでしょうか? できればmySQLサーバーはインジェクションの関係で使いたくあり
ません。

サーバー1 掲示板cgiや画像データなどを担当
サーバー2 掲示板テキストデータ(掲示板cgiから読み書きされる)

なにかアドバイスをお願いします。
505デフォルトの名無しさん:2008/11/17(月) 20:11:26
>>504
NFSマウント。とネタレス。
WebProg行け。とマジレス。
その質問だとperl無関係だから、いきなりperlのスレに行くなよ…。
506デフォルトの名無しさん:2008/11/18(火) 19:27:48
http://www.drk7.jp/MT/archives/001422.html
に記載されている通りにやったのですが、
C:\strawberry\cpan\build\DB_File-1.817-XRfyBQ>perl Makefile.pl
Parsing config.in...
Looks Good.
Note (probably harmless): No library found for -llibdb
Writing Makefile for DB_File

C:\strawberry\cpan\build\DB_File-1.817-XRfyBQ>dmake
cp DB_File.pm blib\lib\DB_File.pm
AutoSplitting blib\lib\DB_File.pm (blib\lib\auto\DB_File)
gcc -c -I/usr/local/BerkeleyDB/include -s -O2 -DWIN32 -DHAVE_DES_FCRYPT
-DPERL_IMPLICIT_CONTEXT -DPERL_IMPLICIT_SYS -fno-strict-aliasing -DPERL_MSVCRT_
READFIX -s -O2 -DVERSION=\"1.817\" -DXS_VERSION=\"1.817\" "-IC:\strawberry
\perl\lib\CORE" -D_NOT_CORE -DmDB_Prefix_t=size_t -DmDB_Hash_t=u_int32_t versi
on.c
version.c:30:16: db.h: No such file or directory
dmake: Error code 129, while making 'version.o'

と出てしまい、DB_Fileが結局インストールされません。
INCLUDEもLIBも自分の環境に沿って変えているのですが出来ません。

どなたかよろしくお願いします。
507デフォルトの名無しさん:2008/11/18(火) 20:14:56
長文すみません
以下のjavaを

// 平均パケット到着レートの算出&ヒストグラム構成
if (preTimeList.size() >= pktNumForCalcRateAverage) {
sampleAveRate = pktNumForCalcRateAverage / (nowTime - preTimeList.remove(0));
int point = (int)(sampleAveRate / gap);
histgram[point] += 1;
total += sampleAveRate;
lineNum += 1;
}

をperlに書き変えたいのですが

# 平均パケット到着レートの算出&ヒストグラム構成
if ($preTimeList.size() >= $pktNumForCalcRateAverage) {
$sampleAveRate = $pktNumForCalcRateAverage / ($nowTime - $preTimeList.remove(0));
    $point = ($sampleAveRate / $gap);
    $histgram[$point] += 1;
    $total += $sampleAveRate;
    $lineNum += 1;
  } 

ではエラーが出てしまいうまくいきません。
nowTimeが間違っているのでしょうか?
どなたかアドバイスお願いします。
508デフォルトの名無しさん:2008/11/18(火) 21:14:27
エラーメッセージは?
509デフォルトの名無しさん:2008/11/18(火) 21:56:41
それ以前の問題だろ…

javaの文章に適当に$つけりゃperlになるとでも思ってんのかねえ?
510デフォルトの名無しさん:2008/11/18(火) 21:58:07
Perl 6で動かしてるとか
511デフォルトの名無しさん:2008/11/18(火) 22:36:19
  エラーメッセージを読む。

そういうクセをつけてあげないと、本人のために良くないだろ。
512デフォルトの名無しさん:2008/11/18(火) 22:57:13
すげえ正論っぽいし、事実>>507に対するレスじゃなきゃ
完全同意なんだけどねえ。
車を運転しようとしてる9歳児に「交通規則は守れるか?」
って問うくらいには見当違いだと思う。
513デフォルトの名無しさん:2008/11/18(火) 23:17:55
まあまあ、推測に推測を重ねていないで、ここは本人のレスポンスを
待とうじゃないか。
514デフォルトの名無しさん:2008/11/19(水) 00:13:09
>>505
ありがとうございます。別にきいてみようとおもいます。
515デフォルトの名無しさん:2008/11/19(水) 00:44:16
>>507
- java の . と perl の . の違い
- int の意味
- java の size メソッドと perl の scalar @arr で何が得られるか
- java の remove メソッドと perl の shift ( or splice )
- 更には各変数と配列に何が入っててどういう状態なのか
- 前後にどういう処理が行なわれているか
これが直に答えられないなら移植なんか考えない方が良いよ。
516506:2008/11/19(水) 03:43:41
No library found for -llibdb じゃなくて
No library found for -ldb でした…。
どなたかよろしくお願いします…。
517デフォルトの名無しさん:2008/11/19(水) 07:47:34
>>516
dbは正常にインストールされているのか
518デフォルトの名無しさん:2008/11/19(水) 19:35:21
>>512
じゃあ何と言うべきなの?
キミにはまだ早い、オトナになるまで待ちなさい、とでも?
519デフォルトの名無しさん:2008/11/19(水) 19:45:50
ゆとり乙

でおk
520506:2008/11/20(木) 00:21:04
>>517さん
dbというとちょっと分からないのですが、
Berkeley DB 4.6.21 をインストールして、
http://www.drk7.jp/MT/archives/001422.html
に書いてある通りに全ての手順を踏んだのですが、
No library found for -ldb
となって出来ないんです…。
521デフォルトの名無しさん:2008/11/20(木) 04:46:40
ぜんぜん詳しくないけど、あてずっぽうで・・・

gcc -c -I/usr/local/BerkeleyDB/include -s -O2 -DWIN32 -DHAVE_DES_FCRYPT
-DPERL_IMPLICIT_CONTEXT -DPERL_IMPLICIT_SYS -fno-strict-aliasing -DPERL_MSVCRT_
READFIX -s -O2 -DVERSION=\"1.817\" -DXS_VERSION=\"1.817\" "-IC:\strawberry
\perl\lib\CORE" -D_NOT_CORE -DmDB_Prefix_t=size_t -DmDB_Hash_t=u_int32_t versi
on.c

-L オプションが見当たらないけど、なんで?
-IC:\strawberry\perl\lib\CORE" って正しいのかな?lib のディレクトリを -I で指定してるけど。
  lib ディレクトリにヘッダファイルが入ってるの??
-ldb が無い、って言ってるんだから、ほんとうに無いのか、あるのか、自分の目で確かめたかな?
-ldb と省略せずに、\hoge\hage\libdb.l みたいにフルパスで指定してみてはどうか?
522デフォルトの名無しさん:2008/11/20(木) 20:16:22
require 'ファイル名';
とするときに、1つ前のディレクトリにあるファイルを指定したいのですが、どうすればいいでしょうか?
require '../ファイル名';
だとエラーがでてしまい、できません。
523デフォルトの名無しさん:2008/11/20(木) 21:40:27
>>522
1つ前の前に現在地がどこかを考えるんだ
../ や ~/ はシェルの機能なんだ
524デフォルトの名無しさん:2008/11/21(金) 02:09:21
>>522
スクリプト保存場所と実行場所が同じならそれで動く。
(多分このケースだろうけど)違って場所固定ならスクリプトに
use FindBin;
require "$FindBin::Bin/../hoge.pl" ;
但し、FindBin はケースによってスクリプト保存場所を
示さない場合があるので、そんな場合には FindBin::Real
だか CPAN から引っ張って来て使う。

(蛇足)スクリプト内でカレントディレクトリに動的変化があり、
require する対象も連動変化があるなら、
use Cwd ;
しといて
require getcwd . q{/../hoge.pl}しなきゃならん。
525デフォルトの名無しさん:2008/11/21(金) 02:16:40
あ。説明一行目正確じゃねえな。
「保存場所に関係無く、実行場所の ../ にあるならそれで動く。」
に訂正。
526デフォルトの名無しさん:2008/11/21(金) 03:33:20
まぁたいてい、マウスでクリックして動作させるだろうから
カレントディレクトリをスクリプトのあるディレクトリに移動させておく、とか
そういう処理が必要だろうな。
527デフォルトの名無しさん:2008/11/21(金) 06:37:05
>>522 エラーメッセージは?


528506:2008/11/21(金) 13:19:05
>>521さん
返信ありがとうございます。
libdb.a
というのは前述したURLに書いてある通りに作成しました。
-Lオプションに関してはわかりません…。
確認したところ
\strawberry\perl\lib\CORE
にヘッダファイルがたくさん入ってました。
-ldbに関しては検索しているのですが、どうしてもわからないんですよね。
やはりWindowsでperl環境は無茶があるのでしょうか。
529デフォルトの名無しさん:2008/11/21(金) 17:18:30
>>528
なんか>>506のエラーは
エラー情報(version.cないよ、コンパイルエラーみたいな)っていうのは、
そのページの「CPAN で DB_File をインストール → 必ず失敗する。」のところだから
そのまま次の「config.in を修正して DB_File を手動で dmake してインストール」
にいけばいいんじゃないの? そこでLIBパス設定してるし
530506:2008/11/22(土) 01:11:58
>>529さん
返信ありがとうございます。
修正して、dmakeしたところ
C:C:\strawberry\cpan\build\DB_File-1.817-aAwZC0>dmake
dlltool --def DB_File.def --output-exp dll.exp
g++ -o blib\arch\auto\DB_File\DB_File.dll -Wl,--base-file -Wl,dll.base -mdll -s
-L"C:\strawberry\perl\lib\CORE" -L"C:\strawberry\c\lib" version.o DB_File.o -Wl,
--image-base,0x2d2e0000 C:\strawberry\perl\lib\CORE\libperl510.a \strawberry\c\
lib\libmsvcrt.a \strawberry\c\lib\libmoldname.a \strawberry\c\lib\libkernel32.a
\strawberry\c\lib\libuser32.a \strawberry\c\lib\libgdi32.a \strawberry\c\lib\lib
winspool.a \strawberry\c\lib\libcomdlg32.a \strawberry\c\lib\libadvapi32.a \stra
wberry\c\lib\libshell32.a \strawberry\c\lib\libole32.a \strawberry\c\lib\libolea
ut32.a \strawberry\c\lib\libnetapi32.a \strawberry\c\lib\libuuid.a \strawberry\c
\lib\libws2_32.a \strawberry\c\lib\libmpr.a \strawberry\c\lib\libwinmm.a \strawb
erry\c\lib\libversion.a \strawberry\c\lib\libodbc32.a \strawberry\c\lib\libodbcc
p32.a dll.exp
version.o:version.c:(.text+0x7a): undefined reference to `db_version'
DB_File.o:DB_File.c:(.text+0x10d5): undefined reference to `db_create'
collect2: ld returned 1 exit status
dmake: Error code 129, while making 'blib\arch\auto\DB_File\DB_File.dll'
となりました…。
blib\arch\auto\DB_File\
には.existsファイルしかありませんでした。
531デフォルトの名無しさん:2008/11/22(土) 21:00:21
>>530
libdb.a はちゃんと C:\strawberry\c\lib\ にあるのかい?ってのと
↑には libdb.a という文字が登場しないなってのがあやしいかと。
532デフォルトの名無しさん:2008/11/22(土) 22:41:13
さくらインターネットの環境のせいかどうかわからないのですが、LWP::UserAgent mirrprの挙動がおかしいってことはありますか?
mirror呼ぶと$tmpfile作るみたいなのだけど、そのstatのrdeb, size, blocksが0になって以下のエラーがでます。
Transfer truncated: only 0 out of 9446 bytes received

何かわかれば教えてもらえますか?

LWP::UserAgent 5.819
FreeBSD 6.1-RELEASE-p23
This is perl, v5.8.8 built for i386-freebsd-64int
533デフォルトの名無しさん:2008/11/22(土) 23:43:51
x64のppmリポジトリってまだないのね。
リポジトリ追加してもパッケージ数が0で何かと思ったらそういうことか…。
534506:2008/11/23(日) 01:56:00
>>531さん
解決しました!
531さんに指摘されて、libdb.aという文字が出ないのかを考えたところ、
ファイル名だけ変えていて、拡張子が変わっていませんでした。
要はlibdb.a.libというファイルでした。
なので拡張子変換ソフトを使ったところ上手くいきました!
本当ありがとうございます!
535デフォルトの名無しさん:2008/11/24(月) 01:41:41
ちょっと前に、WWW::Mechanizeを1.34から1.50にupしたんですが、この1.50の挙動についての質問です。

1.50になってから、$mech->get('http://example.com/')なんかでgetsしてきたページの内容を
$mech->content()で書き出すと、utf8フラグ付の文字列に自動でdecodeされたものが出力されます。
($mech->response->contentでは、そのまま変換なしで返ってきます。)
さらにこの状態で、$mech->find_linksやfind_images,$mech->form->inputsなどの戻り値オブジェクトから
$_->textや$_->valueなども、utf8_decodeされたものが返ってくるようになりました。

これはこれで、戻り値を正規表現等で検知するのに便利になった部分もあるのですが、
今少しばかり困ったことになっております。

実は、とあるサイトをクロールしていて、そのページ自体はsjisで書いてあるのですが、
ページのheaderに、<meta http-equiv="content-type" content="EUC-JP">とかの記述があって、
どうもこの記述を鵜呑みにして、元の文字列をEUC-JPとしてdecodeをしてしまって、化けバケになりました。
536535:2008/11/24(月) 01:42:13
そこで、$mech->get()した時に、自動でutf8デコードさせないようなオプションやメソッドを
探したんですが、それが見当たりません。

ドキュメントやソースファイルを読んでみて、Mechanize.pm内部で、$content = $res->decoded_content()
が呼ばれているようで、それではとHTTP::MessageやHTTP::Headerにある、Encodingヘッダーやcontent_encoding
あたりで制御するのかなと色々やって見ましたが、やっぱりutf8デコードされてしまいます。
(と言うか、イマイチこれらの使い方が合ってるのかよくわかりません。)

どなたかこれらの制御方法をご存知の方はおりませんか?

現在のところ、WWW::Mechanizeを1.34以下に戻すか、実行スクリプトの中で
*HTTP::Message::decoded_content = sub { shift->content };
と書く、などで回避しておりますが、もっとスマートな方法がないのかなと思っております。
537デフォルトの名無しさん:2008/11/24(月) 17:23:57
Perl 5.8.6なんですが
sysopen(TPL, $file, O_RDONLY)
のとこで
Argument "O_RDONLY" isn't numeric in sysopen
というerrorを毎回吐きます。

動作は見たところ正常ですが、Apacheのerror_logにたまるのが気持ち悪くて…。
どこのサンプルにもマニュアルにも上の通りにかいてありますが、
O_RDONLYじゃいかんのですか?
538デフォルトの名無しさん:2008/11/24(月) 17:33:00
O_RDONLY が定義されてないからじゃないの?
>どこのサンプルにもマニュアルにも上の通りにかいてありますが、
いったい、どこのサンプルやマニュアルを見たんだい?

おぢさんがひとつ、いいことを教えよう。
google 「perl O_RDONLY」
パソコンを買ったら、まず最初に google を覚えよう。
539537:2008/11/24(月) 19:46:17
レスありがたふ
そのキーワードで何度もぐぐったんですが
ttp://perldoc.jp/docs/modules/CGI-Session-3.11/Tutorial.pod
ttp://perldoc.jp/docs/perl/5.8.4/perlfunc.pod
こんなんや、他の個人ブログやチュートリアルサイトでも
sysopen(HANDLE, path, O_RDONLY); の例が出てくるんですよね
540537:2008/11/24(月) 19:49:25
自己解決しました
改めてよく読んだらperldoc.jpに「標準モジュール Fcntl 経由で」って書いてありましたね
use Fcntlで解決しました
>>537 ありがとうございました
541デフォルトの名無しさん:2008/11/24(月) 21:43:42
3×3のクロスワードを作ろうと思います。
3文字の辞書ファイルは既にあって
3×3の真ん中には「か」という文字列が入っています。
このとき、3×3のクロスワードを作成するにはどうすればよいでしょうか。

542デフォルトの名無しさん:2008/11/24(月) 21:55:33
ここって宿題の依頼もありだっけ?
543デフォルトの名無しさん:2008/11/24(月) 21:57:31
Perlにカスってもいねえし
544デフォルトの名無しさん:2008/11/24(月) 22:06:30
ゆとりは宿題はやってもらうものと考えてるからな。
545デフォルトの名無しさん:2008/11/24(月) 23:26:48
学業も仕事も他人に任せてゆとりの時間を楽しむのがゆとりの正しい姿
宿題をやる仕事を貧しい人達から奪うほど情が無いわけではありません
546デフォルトの名無しさん:2008/11/25(火) 00:33:23
やってくれって言ってないじゃん!
547デフォルトの名無しさん:2008/11/25(火) 01:34:49
メール鯖からパイプで渡された標準入力を
上手い事いじらせてくれるモジュールってあったっけ?
Net::POP3〜MIME::Parserなら分かるんだが
標準入力しか触れないの扱わんとならんorz
テキストをチマチマと拾ってくしかないのか・・・?
548デフォルトの名無しさん:2008/11/25(火) 02:15:47
日本語でおk
549デフォルトの名無しさん:2008/11/25(火) 05:36:06
>>535
WWW::Mechanizeはよく知らないんだけど
$res->decoded_content(charset => 'none');
この辺りヒントになるかも
550532:2008/11/25(火) 13:39:13
mirrorじゃなくてそもそもrequest($url, $file)で$fileに取得できてないってことに気づいた。
おかげでCPANコマンドでも
Transfer truncated: only 0 out of 149396 bytes received
が出て死んでしまう。
ググっても他に同じような人出てこないし何いじってこうなったんだろう。。
551535:2008/11/25(火) 13:39:41
>>549
レスありがとうございます。
確かに、LWP::UserAgentからは、$res->decoded_content(charset=>'none')で
decodeされないcontentsが返って来るのを確認しました。

しかしながら、Mechanize.pm内では、このdecoded_contentに引数を渡す方法がなく、
またソース内のコメントに、
"Do we need to expose the options there?"
みたいなことが書いてありますので、現状では必ずdecoded_content()が呼ばれてしまうみたいです。

そのため、リクエストのレスポンスヘッダやページ内の<meta>タグに、charset指定がある場合は、
それに従った Encode::decode($charset,$html) が返って来ます。
(このdecodeがコケた場合は、変換なしの元々のbyte文字列が返ってきます)

http://code.google.com/p/www-mechanize/issues/list に要望でも出したら対応してくるのかな。
552デフォルトの名無しさん:2008/11/25(火) 14:22:15
ヘッダの情報に合わせて自分で変換してしまう
553デフォルトの名無しさん:2008/11/25(火) 17:05:16
>>551
ああ、なるほど。
deflate対応と文字コード変換がセットになってるのがややこしいんですよね。
decoded_content自体に罪は無いけど世の中のページはstrictじゃないページも沢山あるので
デフォルトオフか最低でも設定でオフに(WWW::Mechanizeから)出来るように考慮されてるべきだと思います。
>"Do we need to expose the options there?"
もちろん! というか主要な部分の挙動変えるなよって感じですが。
こういうPHP的なハマり方は耐えられません。
554デフォルトの名無しさん:2008/11/27(木) 02:04:29
>>535
WWW::Mechanizeなんてサブクラス化して使うのが当たり前だから
サブクラスで好きなように自分好みのcontentメソッド再実装したらいいよ
最近Perl使ってないので的外れなこといってるかもしれないけど
少し前まではMechanizeはそういう使い方が当たり前だった

生のWWW::Mechanizeを使うという考えを発想転換したら?
555535:2008/11/27(木) 18:19:54
>>552
その発想は..(ry
でも確かに、元ページのcharsetが既知ならば、それもありかもです。

>>553
そうなんです。decompress絡みとcharset変換が同じメソッド内で
同時に処理されてるのがなんだかなあと言う気もします。

まあ同意も得られたことですので、>>551のレポートフォームに
要望でも出そうかと思ってるんですが、ascii文字主体の言語圏の人々に
いかにしてこの思いを伝えようかと苦慮しているところです。
(その前に、英語も全然得意でないので、結構ビビッているんですが)
556535:2008/11/27(木) 18:22:05
>>554
>WWW::Mechanizeなんてサブクラス化して使うのが当たり前だから
うーん、そんなもんなのですか?

自分はあんまり継承とかサブクラス化を使わないので、こちらこそ的外れな
意見かもしれませんが、私の個人的な認識(印象?)では、クラスを継承したり
サブクラス化するってことは、そのベースクラスの機能を最大限利用しつつ、
それプラス自分なりのメンバ(?)やメソッドを追加したり加工したり
するために使うものかと思うのです。
(もしくは、イベント駆動型のmoduleにハンドラを追加する時など)

ひょっとして>>536,551での書き方か悪かったのかもしれませんが、
今私が不便だと感じているのは、$mech->contentの動作自体ではなく、
$mech->get()した時点で、そこから連鎖的に内部のメソッドが実行され、
linkやformなどの$mech絡みのオブジェクトが、自動でutf8フラグ付に
decodeされてしまったものがセットされる、とういうもです。
で、これを抑制したい、回避できないか、と。
557535:2008/11/27(木) 18:22:37
つづきです。

確かに仰るとおり、気に入らない動作や挙動の関数なら、自前の関数でも
書いて上書きでもしてしまえっ、という考えは自分にもありますので、
どれを上書きすべきかと探索し、decoded_content()に行き着きました。
そこで>>536の一行を追加し、とりあえずその場しのぎをしたんですが、
他の制御方法(mechの外からメソッドや、オプションを渡すなどで)
をご存知の方がおられないかと思い、書き込みさせて頂きました。

ちなみに今回の例を、クラスメソッドを再定義して対処するとなると、
_update_page()と言う事になりますが、このメソッド全体をコピペして、
対象の一行だけ削除なりコメントアウトなりすれば目的は達成できますが、
ベースとなるクラスメソッドを再利用しないで一から再定義するような
やり方が、mech使いの方には一般的なのでしょうか。

(自分的には、この_update_pageに伴って生成されるlinkやformオブジェクト
は大変重宝しており、出来ればそのまま利用したいです。ですが今回の場合、
元の動作の一部をスキップするのが目的のため、$self->SUPER::(base_method)
が利用できないので、あまり継承する意味が無いような気がするのですが)

長文、連投になってしまい、どうもすいません。
558デフォルトの名無しさん:2008/11/27(木) 19:13:28
今入ってるレンタルサーバでmod_perlが使えると知り、
バージョンを調べたら1.9916となっていました。
この番号はどう読めばいいんでしょうか。
バージョン1にパッチ9916があてられている・・・のかな?

自宅の制作環境(Win)にも近いバージョンのものを入れたいのですが
そのものズバリは見つかってなくて、どう選んだものか迷っています。
アドバイスよろしくお願いします。
559デフォルトの名無しさん:2008/11/28(金) 01:21:41
>>556
失礼
content()はアクセサーだからget()で内部メソッドを辿る必要があったわ
で、問題はもう自分でも解決してるみたいだけど、
_update_page()内のdecoded_content()の呼び出し
ここの引数リストが空なので、メンバ変数なりクラス変数なりで渡すように
サブクラスで再定義するといい

>ベースとなるクラスメソッドを再利用しないで一から再定義するような
>やり方が、mech使いの方には一般的なのでしょうか。
別にサブクラスじゃなくてもいいけど、サブクラスに定義した方が再利用性が高い
コンパイル時に確定するので、順番とか気にしなくていい
などのメリットがあると思われる

ていうかオブジェクトクラスはサブクラス化することに意義があるし、そのように使われる
ことを意識して書かれてることが多い
例えば、サブクラスで実装されることを意識して空のサブルーチンを置いたりする
560デフォルトの名無しさん:2008/11/28(金) 23:28:35
画像編集だとImageMagickあたりが定番かなと思いますが、
動画だったらffmpegあたりでしょうか?
561デフォルトの名無しさん:2008/11/29(土) 06:54:09
質問です。PerlでリモートのIISにWEBDAVの基本認証で接続し、
ファイルをアップロードしたいのですがうまくいきません。

#!/usr/bin/perl
use HTTP::DAV;
$d = new HTTP::DAV;
$url = "http://192.168.0.100/dav/";

$d->DebugLevel(3);

$d->credentials( -user=>"user_name",-pass =>"pass",
-url =>$url);

$d->open( -url=>"$url")
or die("Couldn't open $url: " .$d->message . "\n");
#処理

というソースなのですがオープンで失敗します。
>Couldn't open http://192.168.0.100/dav/: Unauthorized.

長いので一旦切ります。
562561:2008/11/29(土) 06:55:28

/tmp/perldav_debug.txtを見ると
<?xml version="1.0" encoding="utf-8"?><D:propfind xmlns:D="DAV:"><D:allprop/></D:propfind>
PROPFIND RESPONSE>>
HTTP/1.1 401 Access Denied
Connection: close
Date: Fri, 28 Nov 2008 21:18:18 GMT
Server: Microsoft-IIS/5.1
WWW-Authenticate: Basic realm="192.168.0.100"
Content-Length: 4395
Content-Type: text/html
Content-Type: text-html; charset=shift_jis
Client-Date: Fri, 28 Nov 2008 21:18:29 GMT
Client-Peer: 192.168.0.3:80
Client-Response-Num: 1
Client-Warning: Redirect loop detected (max_redirect = 7)
Title: このページを表示する権限がありません
X-Meta-ROBOTS: NOINDEX

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<html dir=ltr>

以下HTML

と返ってきてるようです。
IIS側の認証方法の設定としては基本認証のみチェック、既定のドメインと領域は空、
匿名アクセス、統合Windows認証のチェックは共に外してあります。
563561:2008/11/29(土) 06:56:08
同じ設定でWindowsのDAVクライアントCarotDAVから接続した場合はうまくいきます。
そのときのログは

Request To 192.168.0.100
> PROPFIND /dav/ HTTP/1.1
> User-Agent: Rei.WebDAV/1.5.3
> Depth: 1
AuthorizationMethod = Basic
<HTTP/1.1 207 Multi-Status
< Transfer-Encoding: chunked
< Content-Type: text/xml
< Date: Fri, 28 Nov 2008 21:19:18 GMT
< Server: Microsoft-IIS/5.1
< [MESSAGEBODY LENGTH:9957]

こうなってます。ブラウザFirefoxから接続した場合もdavフォルダを閲覧することができます。

また、IIS側の設定を変え、匿名アクセスにチェックを入れた場合はPerlからも普通に接続できます。
ログから見るに
いろいろ調べたところHTTP::DAVからの接続が
AuthorizationMethod = Basic
になればいいような気がするのですがその書き方がわからない、という状況です。

HTTP::DAVモジュールでの基本認証(?)の設定の仕方がわからないので
LWP::UserAgentで基本認証で接続するとうまくいくのですが、
今度はPUT(アップロード)の仕方がわかりません。
最終的にはPerlでアップロードできればいいのですが、なにかいい方法ご存知でしたら
ご教授いただきたく思います。

引き続きこちらでも調べて見ます。
564デフォルトの名無しさん:2008/11/29(土) 13:46:35
Perlプログラミング初心者です。
困っていますので、助けてください。
以下のようなデータを持っています。
-----------------------------------
xおだ
56 80 90

xとよとみ
90 85 45

xとくがわ
90 90 100
-----------------------------------
1行目は名前のまえにxという印がついている
2行目に各教科の点数(0から100)がスペースで区切られている。
たとえば、左から国語、算数、理科
3行目は殻行
-----------------------------------
このデータから、それぞれの教科の点数による分布表をつくりたいのですが、どのように書いたらいいのか教えてください。
具体的には、
国語の100点は何人で、99点は何人で、、、、0点は何人。
同じように、算数と理科です。

どうぞよろしくお願いします。
565デフォルトの名無しさん:2008/11/29(土) 14:03:52
「初心者です」って免罪符つけないほうが良いぞ
嫌う奴も居るから
566デフォルトの名無しさん:2008/11/29(土) 15:22:14
>565
この場合は微妙だが、短絡的すぎないかw
そりゃ「初心者なので教えてください」は死ねって思うけど、例えば

  1ヶ月くらい前にPerlの勉強を始めた初心者です。
  Perl/CGIの入門書に載っている、簡単なBBSくらいは作れるようになりました。

とかなら、教える側にしても重要な情報だべ?
567デフォルトの名無しさん:2008/11/29(土) 15:53:12
「困ってます。助けてください」
も誰にもメリットのない無意味な免罪符。
568567:2008/11/29(土) 16:08:50
まぁいっか。ただし、記述では書いてやらん。
以下の説明を元に自分で作れないならもう諦めてくれ。

その前に--------
ファイル保存形式は変更可能なら変更したほうが読みやすい。(プログラムがな)。
perlの場合、順番に〜、とか他のプログラムで扱ってるのと同じでもいいけど、
いちいち名前つきデータにしたほうが便利になる。
無意味な空行もなくしていいならなくしたほうがいい。
----------------

1:ファイルを開いて変数に移す。
どうゆう構造で格納すればいいのかは使う人が考えてくれ。
リファレンスを使うと望みどおりに格納できる。

2:sortを使ってデータを意図したとおりに揃える。

3:出力して終了


ただし、$name{'おだ'}->[0];
みたいな形式で格納してしまった場合に特定の点数の者が何人いるかを調べるとき、
たぶんデータをループにかけて全チェックせねばならない。

そんだけの用途なら、
$marks[0]->[90] = ('name_1', 'name2'); #つまり国語90点の人全員の名前
と格納したほうが良い
569567:2008/11/29(土) 16:11:52


まちがた。
$marks[0]->[90] = ['name_1', 'name2']; #つまり国語90点の人全員の名前
こうか
どうでもいいか
570デフォルトの名無しさん:2008/11/29(土) 16:21:14
gmplayerに配信元を渡す為に、
ブラウザでasxファイルをクリックしたら起動するように関連付けた
以下のようなものを作ってみました。

#!/usr/bin/perl

use strict;
use warnings;

my $mplayer = 'gmplayer';
my @media ;

while (<>) {
/=\s?\"((?:http|mms):\/\/.*(?:wmv|wsx|wma|asf|mp3|mp4))\"/;
push @media, $1 if ($1 ne '');
}

@media ? exec $mplayer, pop @media
: die "There is no streaming lines in this asx file!\n";

チェックの為にシェルからasxファイルを引数にして起動したところ、
わざとマッチする行が無いasxファイルでチェックした時には

Use of uninitialized value in string ne at ./mp_wp line 11, <> line 1.
Use of uninitialized value in string ne at ./mp_wp line 11, <> line 2.
(以下略)
There is no streaming lines in this asx file!

という風に警告を表示されてしまいました。
この警告を出さなくするにはどうしたらいいのでしょうか?
571デフォルトの名無しさん:2008/11/29(土) 16:42:37
>>570
use warnings;の一行を取っ払えば解決
572570:2008/11/29(土) 16:51:02
>>571
いえ、use warningsのままどうにかならないものかと…。
573デフォルトの名無しさん:2008/11/29(土) 17:02:05
<>を使うのをやめる
574デフォルトの名無しさん:2008/11/29(土) 17:02:50
>>570
defined $1
575デフォルトの名無しさん:2008/11/29(土) 17:03:18
パターンマッチしたならその結果を見てやれよw
576デフォルトの名無しさん:2008/11/29(土) 17:08:33
>>570
>Use of uninitialized value in string ne at ./mp_wp line 11, <> line 1.
ちゅうのはあれだ、$1 を ne で扱って評価しとるからで、
($1 ne '') は ($1) じゃいかんのかね。
パターンマッチからして undef 以外の 0 や '0' が来る筈ない場所だしなあ。
577デフォルトの名無しさん:2008/11/29(土) 18:55:57
>>564
勉強中なんで、腕試し。こんなもんかな?(未検証)

open (IN, "Seiseki.txt");
while(<IN>){
if (/(\d+) (\d+) (\d+)/) {
$Kokugo[$1]++;
$Sansuu[$2]++;
$Rika[$3]++;
}
}
close(IN);

print "点数 国語 算数 理科\r\n";
for(0..100){
printf("%4d %4d %4d %4d\r\n", $_, $Kokugo[$_], $Sansuu[$_], $Rika[$_]);
}
578570:2008/11/29(土) 19:06:42
>>573-576
ご教示ありがとうございます。
色々やり方があるんですね。if文の()内を(defined($1))にしたら警告が消えました。
579デフォルトの名無しさん:2008/11/29(土) 20:53:53
>>564
勉強中の自分も作ってみた。

my @subjects = qw(国語 算数 理科);
my %names_of;

open my $in, "seiseki.txt" or die "can't open : $!";
while (<$in>) {
if ( /^x(.+)/ ) {
chomp(my @marks = split / /, <$in>);
for (0..$#subjects) {
push @{$names_of{$subjects[$_]}{$marks[$_]}}, $1;
}
}
}
close $in;

for my $subject (@subjects) {
print "≪$subject≫\n";
for my $mark ( sort {$a<=>$b} keys %{$names_of{$subject}} ) {
printf "%3d : %3d人\n", $mark, scalar @{$names_of{$subject}{$mark}};
}
}
580デフォルトの名無しさん:2008/11/30(日) 00:12:06
ここ宿題スレじゃないんだけど
581デフォルトの名無しさん:2008/11/30(日) 13:03:38
1ファイルの変換なら
perl henkan.pl page1.html > mypage1.html

じゃなかったら

open ( IN , "page1.html" ) or die;
open ( OUT , ">mypage1.html" );
while( <IN> ){

s/こぬにちは/こんにちは/;
print OUT;
}
close(OUT);
close(IN);

で出来るんですけど、フォルダにhtmlファイルが60個もあるので
まとめてやりたいのですが、
My_folder---page1.html,page2.html ………page60.html
の全部に一括して処理するにはどう書けばよいでしようか
582デフォルトの名無しさん:2008/11/30(日) 13:07:12
for ( @ARGV ){
 open IN, $_ ;
 # 略
 close IN ;
}
583デフォルトの名無しさん:2008/11/30(日) 13:12:18
for ( @ARGV ){
 open IN, $_ ;

while( <IN> ){
s/こぬにちは/こんにちは/;
print $
}

close(IN);
こうでしょうか?
済みません 馬鹿なんで 略無しで書いてくれると嬉しいです
584デフォルトの名無しさん:2008/11/30(日) 13:24:41
>>581
system("perl henkan.pl page$_.html > mypage$_.html") for(1..60);
585582:2008/11/30(日) 13:28:24
甘えんなよ、自分で考えろよ…。
後、「初心者スレ」てーのが WebProg にあるからそっち逝ってくんね?
「誘導してください」なんて言ったら切れるぞ?
586デフォルトの名無しさん:2008/11/30(日) 13:32:23
henkan.plは変わりないままで
コマンドプロンプトのところで
henkan.pl page1.html > mypage1.html
のかわりに
system("perl henkan.pl page$_.html > mypage$_.html") for(1..60);
と書いてリターンでしょうか?

すみません バカで。
587デフォルトの名無しさん:2008/11/30(日) 14:26:34
わからない七大理由
1. 読まない ・・・説明書などを読まない。読む気などさらさらない。
2. 調べない ・・・過去スレ、ググるなど最低限の内容も自分で調べようとしない。
3. 試さない ・・・めんどくさいなどの理由で実行しない。する気もない。
4. 理解力が足りない ・・・理解力以前の問題で理解しようとしない。
5. 人を利用することしか頭にない ・・・甘え根性でその場を乗り切ろうとする。
6.感謝しない・・・教えてもらって当たり前。事がすんだらさようなら。
7.逆切れする・・・自分の思うようにならないと逆切れする。
588デフォルトの名無しさん:2008/11/30(日) 14:45:12
>>586
henkan60.plとかの名前で上の1行を保存
perl henkan60,pl
で、実行。
試してないんで、うまくいかなくてもかんべんな。
589デフォルトの名無しさん:2008/11/30(日) 14:57:09
過去ログにもうあったらごめんなさい。
HTTP::Requestで画像ファイル(gif)を取得して、サーバに保存したいのですが、
$response->content()をそのまま保存しても画像になりません。

コード
my $req = new HTTP::Request("GET",$url);
local $response = $ua->request($req);

print "Content-type: text/html\n\n";
print $response->code();
print $response->message();
print $response->content();

open OUT,">> ./maptest.gif";
print OUT $response->content();
close OUT;

環境はwindowsXP perl v5.10.0 Apache2.2です
誘導でもかまいませんので、ヒントをください。
590588:2008/11/30(日) 15:02:02
ひとつにまとめるななら、

for(1..60){
my $n = $_;
open ( IN , "page$n.html" ) or die;
open ( OUT , ">mypage$n.html" );
while( <IN> ){

s/こぬにちは/こんにちは/;
print OUT;
}
close(OUT);
close(IN);
}
591デフォルトの名無しさん:2008/11/30(日) 15:10:35
>>589
Windows なら
binmode OUT;
で成功するかも
592デフォルトの名無しさん:2008/11/30(日) 15:13:33
591さん
早速の回答ありがとうございました。

書き込みの部分を
open OUT,"> ./maptest.gif";
binmode OUT,":raw";
print OUT $response->content();
close OUT;

として、教えていただいた、binmode を付けることで解決しました。

ありがとうございました。
593581:2008/11/30(日) 16:10:29
本当に助かりました。ありがとうです!
594デフォルトの名無しさん:2008/12/02(火) 18:40:44
my $q = new CGI;



my $q = CGI->new();

ではどっちがカッコイイ書き方なんでしょうか?
595デフォルトの名無しさん:2008/12/02(火) 21:12:20
new CGI は後方互換な「間接オブジェクト記法」
間接オブジェクト記法にはトラップがあるのが明記されてる
が故に CGI->new() の方が良いとされる。
が、現実では頻繁にコンストラクタを呼ぶ時にだけ
間接オブジェクト記法は使われている。

つーことで、new の時はどっちでもいいじゃね?method 呼ぶ時に
間接オブジェクト記法したら「変態さんがいる!」って言われるかも
しれんけどさ。
596594:2008/12/02(火) 21:18:55
>>595
なんと!ありがとうございます。
Perlのオブジェクト関係はもっとキチンと勉強せねば…。
597デフォルトの名無しさん:2008/12/02(火) 21:20:58
感嘆詞のニュアンスが微妙な気がしなくもないこともなくはないんだが。
598デフォルトの名無しさん:2008/12/02(火) 21:34:11
変態さんにびっくりしたのでは
599デフォルトの名無しさん:2008/12/02(火) 22:21:54
{ package Foo ; sub new { bless {}, shift } sub get { "hoge\n" } }
print Foo->new->get ; # 直接ならあっさり
# 間接が一個でも混ると
#print get new Foo ; # ダメ
#print get { new Foo } ; # ダメ
print STDOUT get { new Foo } ;
print STDOUT get { Foo->new } ;
print do{ new Foo }->get ;
600デフォルトの名無しさん:2008/12/02(火) 22:24:05
確かにこれならMな変態さんと呼ばれても仕方ないな
601デフォルトの名無しさん:2008/12/02(火) 23:34:03
なんと!スープです
602デフォルトの名無しさん:2008/12/03(水) 07:46:58
>>595
「後方互換」てーのは語弊がある書き方だな、、と自己レス
perlobj の "Indirect Object Syntax" の項に説明がある。
603デフォルトの名無しさん:2008/12/03(水) 12:49:12
関数呼び出しの時に & つけたりつけなかったり
なんなんですか?
604デフォルトの名無しさん:2008/12/03(水) 13:26:44
605デフォルトの名無しさん:2008/12/03(水) 13:54:41
>>604
ありがとうございました。

よくわかりませんでしたが・・・。付けるに超したことはないのかな。
606デフォルトの名無しさん:2008/12/03(水) 15:36:25
>>605
組込み関数を全て覚えてて関数名ダブらない自信があるんなら付けてなくてもいいけど、
それまでは付けた方が良いってリャマの人が言ってた!
アンパーサンドなしじゃ関数名がダブったら組込み関数の方を呼びに行っちゃうからね。
607デフォルトの名無しさん:2008/12/03(水) 17:05:47
PBPでは付けるなって言ってるな。
(サブルーチンのリファレンスが欲しい時以外)
608デフォルトの名無しさん:2008/12/03(水) 17:33:41
CPANあたりみても"&"つけてない方が圧倒的に多いし、使えるからといって
組み込み関数とだぶった名前つけたら読みにくくなるだけじゃないか。

あと、サブルーチン呼び出しの&の有無は完全に等価ではなくて、プロトタイプ
まわりや引数を省略したときの振る舞いなんかが違うので注意な。


sub f(\@) {
my($x) = @_;
print join(",", @$x), "\n";
}

@array = (1, 2, 3);
f(@array);   # 1,2,3
&f(@array); # 空文字列

sub g {
my(@x) = @_;
print join(",", @x), "\n";
}

sub g1 {g;}
sub g2 {&g;}

g1(1,2,3); # 空文字列
g2(1,2,3); # 1,2,3
609デフォルトの名無しさん:2008/12/03(水) 17:43:06
いや普通は付けないが
Perl初心者は慣れるまでは付けるようにしておけ、
という事だよリャマ本
610デフォルトの名無しさん:2008/12/03(水) 18:52:12
バッドノウハウ論議って楽しいよな
611デフォルトの名無しさん:2008/12/03(水) 21:10:02
初心者っぽく見えるから俺はつけない
612デフォルトの名無しさん:2008/12/03(水) 22:10:49
シンタックスハイライトのついたエディタ使えば組み込みとダブるなんて
意識して書かない限りやらないだろ・・・
613デフォルトの名無しさん:2008/12/04(木) 12:16:49
>>608

> sub f(\@) {
> my($x) = @_;
> print join(",", @$x), "\n";
> }
>
> @array = (1, 2, 3);
> &f(@array); # 空文字列

この結果、ひどいな。。。
いや、昔の perl だと普通か。。。
614デフォルトの名無しさん:2008/12/04(木) 12:40:56
>>613
プロトタイプ指定は「組込関数のように振る舞える」のが肝なので、
わざわざ & を付けて区別するのは何を意図してるの?って感じだ。
ヘンな言葉遣いをすればヘンに解釈されるってだけじゃん。
615デフォルトの名無しさん:2008/12/04(木) 14:10:34
>>614
初心者が
「慣れないうちは&をつけとこっと」
って思って勉強が進む。そのうち関数プロトタイプのことを知り、試す。
「あれ?」
っていうストーリー。
616デフォルトの名無しさん:2008/12/04(木) 16:17:28
&も()も必ず付ける。それが俺のジャスティス。
617デフォルトの名無しさん:2008/12/04(木) 16:19:21
必ずつける人はPythonにでも行った方が幸せになれる
618デフォルトの名無しさん:2008/12/04(木) 17:02:44
ppm install DBD-mysql
するとないって言われるんだが・・俺だけ??
情報求むm(_ _)m
619デフォルトの名無しさん:2008/12/04(木) 18:12:16
――なにが幸せかわからないのです。本当にどんな辛いことでもそれが正しい道を
進む中での出来事なら、峠の上り下りもみんな本当の幸いに近づく一歩ずつですから。
620デフォルトの名無しさん:2008/12/04(木) 18:33:06
>>618
「DBD-mysql PPM リポジトリ」でググッて好きなページを参照して。
621デフォルトの名無しさん:2008/12/04(木) 21:58:48
1から99までに含まれる奇数を出力するプログラムを書いてみたんですけど
これ以上短くすることは可能ですか?

print$_%2?"$_ ":()for 1..99
622デフォルトの名無しさん:2008/12/04(木) 22:08:38
$_%2&& print for 1..99
623デフォルトの名無しさん:2008/12/04(木) 22:22:24
print $_*2+1,' 'for 0..49
624621:2008/12/04(木) 22:46:56
>>622
即レスありがとうございます
なるほど!!
でもそれだと半角スペースがないですよね?
できれば半角スペースは入れたかったんですけど…

>>623
ありがとうございます
普通に足していく方法ですか
確かに短くなりますねw
うまく説明できないんですけど演算を上手くつかって短くしたいんですよね
説明不足ですみませんでした
625デフォルトの名無しさん:2008/12/04(木) 23:03:57
print$_%2?$_:' 'for 1..99
626デフォルトの名無しさん:2008/12/04(木) 23:59:40
>>620
ありがとうございますm(_ _)m
627621:2008/12/05(金) 00:59:21
>>625
ありがとうございます
偽の場合の式をうまく使ってますね
何か書かないといけないから空のリストを置いてたんですけど
これだと無駄がない感じになりますね
628デフォルトの名無しさん:2008/12/05(金) 02:11:14
$,=" ";print 1..99
629デフォルトの名無しさん:2008/12/05(金) 02:14:04
痛たたた……
630デフォルトの名無しさん:2008/12/05(金) 02:16:48
あ、奇数か。スマソ

$,=" ";print grep{$_&1}0..99

短くないな…
631デフォルトの名無しさん:2008/12/06(土) 20:39:27
ちょっと挑戦してみた
短くするのは難しいな
print(map{$_%2?$_:" "}1..99);
632621:2008/12/06(土) 22:48:51
>>631
mapは最初使ってましたけどforのほうが短くできることに気付いてforにしました
あと一行だけの場合はセミコロンなしでも動くので省いてますw
633デフォルトの名無しさん:2008/12/06(土) 22:54:53
{print$i++&1?" ":$i;redo if$i<99}
↑くらい狂ったコードとか書いてくんなきゃ突っ込み所も何も無い。
コードゴルフで遊ぶなら最低FizzBuzzくらいのお題にしてくんなきゃ、やる気も出ない。
634デフォルトの名無しさん:2008/12/06(土) 22:56:32
>>633
そういうときは、やらないといいです!
635デフォルトの名無しさん:2008/12/06(土) 22:58:48
>>634
ま、そうだねw
本当のレスは「食傷気味なんだよ空気読め!」だったんだけど
それじゃキツイかなと思って適当に書いただけだから。
636デフォルトの名無しさん:2008/12/06(土) 23:01:10
広がりも何も無いしねえ。
637デフォルトの名無しさん:2008/12/06(土) 23:08:37
フォルダ内の全txtファイルの
書き間違えを修正するのに、
ファイル名に統一性がない場合は
どうすればいいですか?
日本語のファイルも英語のファイルもあります。
メモ.txt メモ1.txt soccer_news.txt
とかいろいろあります。

メモ.txt → メモ_perl.txt
とか、全てに_perlをつけて出力したいです。

↓こんな感じのを opendir とかで
挟むのかなとまでは調べましたが
そのあとが解りません。

open ( IN , "メモ.txt" ) or die;
open ( OUT , ">メモ_perl.txtl" );
while( <IN> ){

s/にちゃんねる/2ch/g;

print OUT;
}
close(OUT);
close(IN);
638デフォルトの名無しさん:2008/12/06(土) 23:20:00
>>637
>>581からの流れを読めば?
639デフォルトの名無しさん:2008/12/06(土) 23:39:19
>>637
日本語の文字置き換えが少し面倒だな
while(<*.txt>)でテキストファイル名を読み出してopen
ファイル名変えるのはrename使えば出来る
640デフォルトの名無しさん:2008/12/06(土) 23:40:56
>>637
use File::Slurpして
@files = read_dir(ディレクトリ)して
条件に合うファイル名に対し、renameすればいい。
641デフォルトの名無しさん:2008/12/06(土) 23:56:05
>>637
俺も勉強の為にちょっとやってみたよ
とりあえず動くとは思うけど良いソースかどうかは分からん

while(<*.txt>){
my $old_name = $_;
my $new_name = $_;
my @text;
open IN,"$_" or die "$!";
@text = <IN>;
close IN;
open OUT,">$_" or die "$!";
for(@text){
s/にちゃんねる/2ch/g;
}
print OUT @text;
close OUT;
$new_name =~ s/([\d\D]+)\.txt/$1_perl.txt/;
rename $old_name,$new_name;
}

642デフォルトの名無しさん:2008/12/07(日) 12:54:11
>>641
やってみたら、元のファイルが無くなってました
元のファイルも新ファイルも両方残す設定にはどうすればいいでしょう?
643641:2008/12/07(日) 13:02:53
>やってみたら、元のファイルが無くなってました
>元のファイルも新ファイルも両方残す設定にはどうすればいいでしょう?
無くなったというか元のファイルの名前を変えただけなんだけど
複製したいなら
ues File::Copy;
も追加してrenameだったところをcopyに変えればいいよ
644デフォルトの名無しさん:2008/12/07(日) 13:30:43
>>643
645デフォルトの名無しさん:2008/12/07(日) 15:28:28
>>643
ありがとうございました できました。
646デフォルトの名無しさん:2008/12/07(日) 15:31:04
アレでいいのかよ?元ファイルは上書きされてんだぞ?
647641:2008/12/07(日) 16:01:05
>>646
あっ!しまった 
648641:2008/12/07(日) 16:06:33
ごめん直した
while(<*.txt>){
my $old_name = $_;
my $new_name = $_;
my @text;

$new_name =~ s/([\d\D]+)\.txt/$1_perl.txt/;
open IN,"$old_name" or die "$!";
@text = <IN>;
close IN;
open OUT,">$new_name" or die "$!";
for(@text){
s/にちゃんねる/2ch/g;
}
print OUT @text;
close OUT;
}
ちなみにuse File::Copy;は必要ないです
649デフォルトの名無しさん:2008/12/07(日) 22:29:47
[\d\D]ってなんか意図あるの?

あと普通の人は1ライナーで処理するよね、これ
650デフォルトの名無しさん:2008/12/07(日) 23:04:53
だな。

普通は
$ perl -i.bak -ple 's/foo/bar/g' *.txt
とかする
651デフォルトの名無しさん:2008/12/08(月) 01:28:22
mysql なんですけど、

use DBI;
my $db = DBI->connect("DBI:mysql:unkodb:unkohost", $user, $pass) or do{warn DBI::errstr;exit 0};
  $db->do('SET NAMES UTF8');

my $sth = $db->prepare("SELECT name,title FROM unkotable WHERE id=?");
$sth->execute($id) or die DBI::errstr;
$sth->bind_columns(undef, \(my($name,$title))) or die DBI::errstr;
my $rc = $sth->fetch();
  utf8::decode($name); #これ
  utf8::decode($title); #これ

みたいなコードなんですけど、
utf8::decode($ほげ) をいちいちやらずに済む方法ってありますか?
ついうっかりミスっちまいそうなので。
652デフォルトの名無しさん:2008/12/08(月) 02:47:14
>>651
ちゃんとdocumentくらい読もうぜ。
http://search.cpan.org/dist/DBD-mysql-4.010/lib/DBD/mysql.pm
653デフォルトの名無しさん:2008/12/08(月) 03:28:21
>>652
ありがとうございます。やっぱ無理でしたか。あきらめます。
654デフォルトの名無しさん:2008/12/08(月) 09:35:04
>>651
適当にラップするサブルーチンをつくったら?
655デフォルトの名無しさん:2008/12/08(月) 09:47:53
perlのオブジェクト指向でCGIを組もうとしているのですが
具体的に良い例などが載っているサイトとかありませんか
656デフォルトの名無しさん:2008/12/08(月) 12:17:52
フォームで「0」を入力したときに、Perlで空か0か判断する方法あります?
657デフォルトの名無しさん:2008/12/08(月) 13:00:48
$ENV{'QUERY_STRING'} または STDINの値を読み、0か何も値がないかを判断すればよい
658デフォルトの名無しさん:2008/12/08(月) 13:13:36
>>657
こんな感じ?

my @a = <STDIN>;

if($a[0] == ""){
print "何も入力されていない";
}elsif($a[0] == "0"){
print "0が入力されている";
}
659デフォルトの名無しさん:2008/12/08(月) 13:58:36
==
660デフォルトの名無しさん:2008/12/08(月) 16:45:18
>>653
だから、ちゃんと読もうぜ! って(w)

DBD-mysqlのversionいくつか知らないけど、4.001以降なら、

$dbh->{mysql_enable_utf8} = 1;

で、$sth->fetchrow() の戻り値にutf8フラグ付きの文字列を取得でける。
661デフォルトの名無しさん:2008/12/08(月) 19:40:05
"$var" って書く奴、文字列比較と数値比較が分ってない奴。
自称回答者でも初心者スレにすら値しない。
質問者共々、みんな纏めてこっち行け。

くだすれPerl(超初心者用)2
ttp://pc11.2ch.net/test/read.cgi/php/1204488452/


662デフォルトの名無しさん:2008/12/08(月) 19:48:21
>print "$a".".txt\n";

これのことか。これはひどいな。
663デフォルトの名無しさん:2008/12/08(月) 19:55:14
>>660
ありがとうございます。2年前に書いたコードをメンテナンスしてるのですが、
mysql_enable_utf8 については、2年前にさんざん調べて、
結局ガセネタだとわかったので、今回もdocumentを読めと言われて
「またmysql_enable_utf8か・・・それ、もうとっくに試した。」とハヤトチリしてしまいました。
DBD-mysql のバージョン4.005が出ているのでアップデートしたら、すんなりOKでした。
664デフォルトの名無しさん:2008/12/08(月) 20:14:30
「2006年12月24日リリースの DBD-mysql4.0XX 系」を
「二年前にさんざん調べた」とかは瑣末な事だからどーでも良いけど
( mysql_enable_utf8 は 4.0XX 系から)
cpan の View Bugs で
- バグかどうか。
- それが解消されたかどうか。
くらいは把握したら?
665デフォルトの名無しさん:2008/12/08(月) 20:53:58
int に関してちょっとわからないことがあるので質問です。

for ($n = 0; $n < 1; $n += 0.01) {
$_ = $n * 100;
$i = int($_);
if ($_ != $i) {
print "int($_) != $i\n";
}
}

これって何も出力されないって思ってたんだけど、
6,7,11 ...
といっぱい出力されるんだけど何でだろう?
666デフォルトの名無しさん:2008/12/08(月) 21:29:04
intの問題では無い。浮動小数点の丸め誤差
perl -le ' print 7 == ( 0.05 +0.02) * 100'
これは1が帰ってこない。
667デフォルトの名無しさん:2008/12/08(月) 21:46:48
>>667
バーカ、リリースされたのは2007年7月だよ。しね
668デフォルトの名無しさん:2008/12/08(月) 22:22:22
669デフォルトの名無しさん:2008/12/08(月) 23:03:03
笑い死にしそう
670デフォルトの名無しさん:2008/12/09(火) 00:24:36
>>656
definedでよくない?
671デフォルトの名無しさん:2008/12/09(火) 01:44:12
>>656 >>670
#!/usr/bin/perl -w
use strict;
for (0, '0', '', undef, '1E2', ' 3a', '.4 ') {
  my $defined = defined $_ ? 'defind' : 'undef';
  my $len = length $_;
  my $num = $_ + 0;
  print "[$_] is $defined, length $len, num $num\n";
}
__END__
[0] is defind, length 1, num 0
[0] is defind, length 1, num 0
Argument "" isn't numeric in addition (+) at test.p line 6.
[] is defind, length 0, num 0
Use of uninitialized value $_ in length at test.p line 5.
Use of uninitialized value $_ in addition (+) at test.p line 6.
Use of uninitialized value $_ in concatenation (.) or string at test.p line 7.
[] is undef, length 0, num 0
[1E2] is defind, length 3, num 100
Argument " 3a" isn't numeric in addition (+) at test.p line 6.
[ 3a] is defind, length 3, num 3
[.4 ] is defind, length 3, num 0.4
672デフォルトの名無しさん:2008/12/09(火) 03:32:42
673デフォルトの名無しさん:2008/12/09(火) 05:03:10
モダンパールとやらはどこにいったら覚えられるのでしょうか

http://perl-users.jp/modern_introduction_perl/
ここもいくら待っても目次しかないんだけど
674デフォルトの名無しさん:2008/12/09(火) 06:06:55
>>673
そこはね、おまえが書くために用意されているんだよ。
675デフォルトの名無しさん:2008/12/09(火) 11:32:04
>>673
この辺からたぐってみるといいかもね。
http://b.hatena.ne.jp/entrylist?url=http://perl-users.jp/
676デフォルトの名無しさん:2008/12/09(火) 13:59:31
オブジェクト内で連想配列の値を保持したまま、
他のメソッドから呼び出す方法はないでしょうか?

ローカルの連想配列が利用したいという意味事です

sub new{
my($self) = shift;
my(%allvalue) = ("one", 1, "two", 2, "three", 3);

my($hash) = {
hid => $hid,
allvalue => %allvalue ←連想配列の受け渡しが出来ていない???
};
bless $hash, $self;
}

sub read{
my($self) = shift;
my(%allvalue) = $self->{allvalue}; ←%allvalue には先頭の値しか残っていない
}
677676:2008/12/09(火) 14:42:05
>>676
自己解決しました

sub new{
        my($self) = shift;
        my(%allvalue) = ("one", 1, "two", 2, "three", 3);

        my($hash) = {
                hid => $hid,
                allvalue => \%allvalue ←参照渡しして
        };
        bless $hash, $self;
}

sub read{
        my($self) = shift;
        my(%allvalue) = %{$self->{allvalue}}; ←連想配列で型キャスト
}
678デフォルトの名無しさん:2008/12/11(木) 12:44:47
@入力ファイルを読みこむ
A特定の文字列があったら、その行のそれ以降の文字を出力ファイルに出力
BAをしたら次の行の大文字を出力ファイルに出力
B特定の文字列があったら、その行のそれ以降の文字を出力ファイルに出力
CBをしたら次の行の大文字を出力ファイルに出力

どうすればいいか教えて下さい
679デフォルトの名無しさん:2008/12/11(木) 12:50:30
間違えたorz
@入力ファイルを読みこむ
A特定の文字列があったら、その行のそれ以降の文字を出力ファイルに出力
BAをしたら次の行の大文字を出力ファイルに出力
C特定の文字列(Aとは別の)があったら、その行のそれ以降の文字を出力ファイルに出力
DCをしたら次の行の大文字を出力ファイルに出力
Eさらに何行か読み込んで、特定の文字列(ACとは別の)があったら、その行のそれ以降の文字を出力ファイルに出力

お願いします
680デフォルトの名無しさん:2008/12/11(木) 14:27:26
まんまやれ
681デフォルトの名無しさん:2008/12/11(木) 14:30:37
>680
確かにそれしか答えようが無い…ッ
682デフォルトの名無しさん:2008/12/11(木) 17:01:02
×どうすればいいか教えて下さい
○宿題をやって下さい
683デフォルトの名無しさん:2008/12/11(木) 17:44:47
>>682
宿題じゃないです
STAのタイミングレポートからStartpoint、送り手側、Endpoint、受け側、slackの文字列を抜き出して編集したいだけです
684デフォルトの名無しさん:2008/12/11(木) 18:20:27
とりあえずがんばれ
685デフォルトの名無しさん:2008/12/11(木) 19:07:19
>679
自分がやりたいことをそこまで細分化できるなら、
もーちょっと細かく分けてみるといいんでないかい。

そーすると、まさに>680の言う「まんまやれ」になる。
686デフォルトの名無しさん:2008/12/11(木) 20:45:18
まんまやれ、っていい言葉だな。
プログラミング中に机の前に張っておきたい。
687デフォルトの名無しさん:2008/12/11(木) 20:59:53
>>679
じゃあ、勉強中の自分がしてみます。

my @key_words = qw(foo bar buz);
my $input_file = "input.txt";
my $output_file = "output.txt";

open my $in, $input_file or die "can't open : $!";
open my $out, q{>}, $output_file or die "can't open : $!";

for my $key_word (@key_words) {
while (<$in>) {
if (/$key_word(.*)/s) {
print $out $1;
unless ( $key_word eq $key_words[-1] ) {
(my $line = <$in>) =~ s/[^A-Z\n]//g;
print $out $line;
}
last;
}
}
}

close $in;
close $out;
688デフォルトの名無しさん:2008/12/11(木) 22:23:39
>>685
やることは何とかわかってきたけど、やらないといけないことが多すぎるし、自分にわかりやすいサイトがないから勉強しにくいし、具体的にどう記述すればいいのかがよくわからないんだorz

入力ファイルを全行読み込んで出力とか、文字列の中から特定の文字を抜き出すとかのサンプルプログラムはあるけど組み合わせたら途端にわからなくなる・・・

その上入力ファイルも大量にあるし、階層も2つある
階層移動してsetupやholdなどの名前を含むファイルを指定して開く必要があるからめんどくさすぎる・・orz


>>687
勉強中でそこまで書けるのかよ・・・
すげぇww何書いてるのかさっぱりわからないwww

689デフォルトの名無しさん:2008/12/11(木) 22:32:15
>>688
ほんとに勉強したの?
本屋さんに行って本を買うとか、したの?
690デフォルトの名無しさん:2008/12/11(木) 23:03:36
>>689
1から勉強しながら解いてるんだぜ
本は買うお金がもったいないし、家に帰ってまで勉強できるほど気持ちにゆとりがない
691デフォルトの名無しさん:2008/12/11(木) 23:56:56
本買いなよ。長い目で見ればお得だよ。
英語読めるんだったらダウンロードでもいいけど。
692デフォルトの名無しさん:2008/12/12(金) 00:23:59
本くらい買え
プログラミングの本は高いけどネットよりずっと効率的
693デフォルトの名無しさん:2008/12/12(金) 01:11:31
>家に帰ってまで勉強できるほど気持ちにゆとりがない

つまり、勉強しないで楽したいってことですね。
694デフォルトの名無しさん:2008/12/12(金) 03:27:11
プログラム一般について知ってるなら、リャマ本読めば充分。
あとは、適当にperldocすれ。
695デフォルトの名無しさん:2008/12/12(金) 07:45:01
>>690
やる気がないならやるなよ。
誰のためにもならないことして楽しい?




696デフォルトの名無しさん:2008/12/12(金) 10:05:45
1から学ぶ必要なんて無いと思うけど。
Hollow World
ファイルの読み書き
パターンマッチ
こんなもんじゃね?
697デフォルトの名無しさん:2008/12/12(金) 12:26:44
Hollow :)
698デフォルトの名無しさん:2008/12/12(金) 13:02:05
しにたい・・・
699デフォルトの名無しさん:2008/12/12(金) 14:40:14
今からPerlを学ぶなんて変態だろ。
PythonかRubyにしなさい。
700デフォルトの名無しさん:2008/12/12(金) 16:38:04
まあでも日本語処理的にはperlがねぇ
701デフォルトの名無しさん:2008/12/12(金) 20:08:35
日本語処理ってrubyの方が得意って認識だったけど…
日本生まれだし。sperlの方が上?
702デフォルトの名無しさん:2008/12/12(金) 20:19:29
>>4みたいなオマジナイがいるのにPerlが日本語得意なわけないだろ……
どっちみちPerlじゃWindowsでUnicodeなファイルとか開けねえし
703デフォルトの名無しさん:2008/12/12(金) 22:42:38
日本語を処理するためだけにRubyを習得しました!!
704デフォルトの名無しさん:2008/12/12(金) 23:11:48
普通に開けるけど・・・
705デフォルトの名無しさん:2008/12/12(金) 23:21:12
>>704
ん?Latin-1なアルファベット類だのハートマークだの含んだ
ファイル名のファイルだぞ?
706デフォルトの名無しさん:2008/12/13(土) 00:22:18
8.3形式でなら開けたけどそのままだと開けなくなかったかなぁ…
それとも5.10で改善されたのか?
707デフォルトの名無しさん:2008/12/13(土) 00:38:50
Perl初心者なんですが、初歩的なことかも知れませんが
お教え下さい。

入力ファイルから、数字の書いてある部分を抽出し、
ある閾値以上か、それより小さいかで振り分けて
処理をしたいと思っているのですが、上手くいきませんでした。

で、閾値-抽出した結果を表示してみた所、
計算結果の絶対値(マイナスになるはずの結果もプラス表示)
・・・となっていました。
抽出した結果に、何か加工しないといけないのでしょうか?

ご教示していただけたら幸いです。

708デフォルトの名無しさん:2008/12/13(土) 00:49:01
コード晒せよ…
709デフォルトの名無しさん:2008/12/13(土) 00:51:08
>>705-706
昔は開けた。いまは開けない。
710デフォルトの名無しさん:2008/12/13(土) 01:22:36
>数字の書いてある部分を抽出し
>計算結果の絶対値(マイナスになるはずの結果もプラス表示)

数字だけ拾って、「−」符号を拾ってないと予想してみた。
711デフォルトの名無しさん:2008/12/13(土) 01:51:19
>>709
適当にリネームすりゃ開けんじゃねぇの?
712デフォルトの名無しさん:2008/12/13(土) 02:04:02
ファイル周りの関数はANSI文字列しか受け付けないから、リネームもできない。
713デフォルトの名無しさん:2008/12/13(土) 02:48:06
ログファイルをcsvファイルに書き換えたものを、ユーザーやstateごとに
ソートをするプログラムを作っているんですが、ユーザーなどは値が無い
ことがあるので、ユーザーに関連付けてソートする時に
Use of uninitialized value
というwarningが出てしまいソートがうまくいきません。
どうぞご指導ご鞭撻をm(__)m
714デフォルトの名無しさん:2008/12/13(土) 02:49:18
何かテケトーな値でもぶっ込んどきゃええやん
715デフォルトの名無しさん:2008/12/13(土) 02:56:16
はやっ!!
でもですねえなるべくデータ本体をいじりたくないんで
@data = map {$_->[0]}
sort {$a->[2] <=> $b->[2]}
map {[$_, split /,/]} @data;
こんな感じでやってるんですけど、一時的に仮想的にみたいな
値の入れ方ってありますかねえ?意味わかんない質問で恐縮です。
716デフォルトの名無しさん:2008/12/13(土) 03:16:09
>>715
splitしたあと変数をスキャンして適当な値を入れておけばよいのじゃ
717デフォルトの名無しさん:2008/12/13(土) 05:40:43
warningなんだからウザけりゃno warningsで止めりゃいいんじゃねーの?
718デフォルトの名無しさん:2008/12/13(土) 08:03:25
>>715
A => map{ [ $_, ( split /,/ ), 0 ] }
B => sort{ ($a->[1] || 0) <=> ($b->[1] || 0) }
折角のシュワルツ変換なんだから、最初のmapで丁寧にAの様に値を代入すれば?
Bの様にして、(多段ソートの場合とかで)ソート条件毎に値を制御する方法もあるけど。
719デフォルトの名無しさん:2008/12/13(土) 14:11:10
>>718
ありがとうございます!!Bの方法で無事ソートすることが出来ました!!
そのほかのみなさんも丁寧に質問に答えていただきありがとうございました。
M(__)M
720デフォルトの名無しさん:2008/12/13(土) 18:25:24
>>705
ん? OSに英語版のWindowsとか使っているってこと?

>>4 には
# ※2.OSに渡す文字列(ファイル名,dosコマンドのオプションなど)は、
# この例のようにcp932でエンコードする必要があります。
と書いてあるけど、同じようにLatin-1にエンコードすればいいような気がするが。
721デフォルトの名無しさん:2008/12/13(土) 18:43:49
>>720
なぜ英語版のWindowsが出てくるの?
英語版だろうが日本語版だろうがWindowsのファイル名はUTF-16なんだが
722デフォルトの名無しさん:2008/12/13(土) 18:48:31
ユニコードとUTF-8、UTF-16の違いが分かってない人、ちゃんと勉強しようね。
723デフォルトの名無しさん:2008/12/13(土) 18:55:14
>>720
PerlはA系APIを使っているので、システムに渡すファイル名は
カレントコードページ(日本語WindowsならCP932)でエンコードされて
いなければならないんだよ

PerlはたとえUTFフラグがついている文字列であっても、必要な手当てを
「全く」行わないがな
724デフォルトの名無しさん:2008/12/13(土) 19:23:45
Latin-1なアルファベット類って表現が紛らわしいだけだろ。
725デフォルトの名無しさん:2008/12/14(日) 13:34:16
'あ'はshift-jisで\x82a0ですが、
$a = \x82a0;
な状態で、'あ'と出力したい時は、
どう変換したらいいですか?
active perlを想定しています
726デフォルトの名無しさん:2008/12/14(日) 17:41:28
>>725
勉強中の者ですが、こんなんではなくて?

print pack("H4", (substr $$a, 1));
727デフォルトの名無しさん:2008/12/14(日) 18:17:34
>>725
'x82a0'が未定義だから、定義してやればいい。

use strict;
use warnings;
use constant x82a0 => 'あ';

$a = \x82a0;
print ${$a};
728デフォルトの名無しさん:2008/12/14(日) 19:31:29
>>726
期待通りの動作をしますが、異様に複雑です

例えば、82a0から82afまでの32バイトを出力したいとすると、
どう書くのが楽ですか
729デフォルトの名無しさん:2008/12/14(日) 19:37:31
これがおかしいってことを指摘されてるのに気づけ。
$a = \x82a0;
730デフォルトの名無しさん:2008/12/14(日) 19:49:01
非常に回りくどいです
頭悪いですね
731デフォルトの名無しさん:2008/12/14(日) 19:51:03
>>725
もし本当に $a = \x82a0; としているのなら
print pack '(H2)*', unpack '@1(A2)*', $$a;

$a = '\x82a0'; なら
print pack '(H2)*', unpack '@2(A2)*', $a;

$a = "\x82a0"; なら
print substr($a, 0, 1), pack '(H2)*', unpack '@1(A2)*', $a;

$a = "\x82\xa0"; なら
print $a;

>>728
print map sprintf("\x82%c", $_), 0xA0 .. 0xAF;

http://perldoc.jp/docs/perl/5.10.0/perldata.pod
http://perldoc.jp/docs/perl/5.10.0/perlfunc.pod
http://perldoc.jp/docs/perl/5.8.8/perlpacktut.pod
732デフォルトの名無しさん:2008/12/14(日) 23:53:58
こう書いてあげればわかりやすい?

my $high_byte = 0x82;
for my $low_byte (0xa0..0xaf) {
printf "%x%x -> %s\n", $high_byte, $low_byte, chr($high_byte).chr($low_byte);
}
733デフォルトの名無しさん:2008/12/15(月) 01:51:07
packは奥が深いんだぜ。

print pack('n*', 0x82a0..0x82af);
734デフォルトの名無しさん:2008/12/15(月) 02:50:09
森永パックンチョ
735デフォルトの名無しさん:2008/12/15(月) 20:51:20
Perlの本って沢山あると思うのですが、洋書、和書問わず
みなさんのオススメの一冊を教えて下さい。
736デフォルトの名無しさん:2008/12/15(月) 20:55:49
737デフォルトの名無しさん:2008/12/15(月) 21:45:58
そーいえば、アルパカが癒し系動物としてマイナーブームらしいな
738デフォルトの名無しさん:2008/12/15(月) 23:40:09
質問です。
変数にundefを入れる場合、以下どちらを使うべきですか。
(1)$val=undef;
(2)undef($val);

どちらも全く同じこと?違いがありましたら教えて下さい。
739デフォルトの名無しさん:2008/12/16(火) 01:11:10
(1)って表記方法を初めて見たんだけど、これちゃんと動くの?
740デフォルトの名無しさん:2008/12/16(火) 01:23:03
「自分で試すのは、下層民のやること」
741デフォルトの名無しさん:2008/12/16(火) 02:03:28
>>738
http://perldoc.jp/docs/perl/5.10.0/perlfunc.pod#item_undef_EXPR_undef_undefine

「変数にundefを入れる」場面なら $val = undef; だろう。
「変数を初期化する」場面なら undef $val; だろう。
文脈に沿って選べばいいよ。
742デフォルトの名無しさん:2008/12/16(火) 03:35:44
>>741
文盲?
743デフォルトの名無しさん:2008/12/16(火) 06:16:20
>702
Windowsがカスなだけ
744738:2008/12/16(火) 09:08:31
>>739
動きますね。
しかし、(1)は一般的ではないということでしょうか。

>>741
「変数にundefを入れる」=「変数を初期化する」
だと思うのですが違いがあるのでしょうか。
(内部的にメモリの使い方が違う等??)
745デフォルトの名無しさん:2008/12/16(火) 09:16:47
俺は気分的に

変数の値をundefに設定したいときは代入

変数の値を捨てたいときはundef

かな。後者はでかい一時文字列とか巨大データ構造への
リファレンスが入ってていらなくなったときのイメージ。
746デフォルトの名無しさん:2008/12/16(火) 18:49:58
>>738
見た目から意味の違い感じる人もいるかもしれないが、
スカラー変数に限って言えば、その二つは全く等価。
747デフォルトの名無しさん:2008/12/16(火) 20:02:26
Visual Basic に慣れた人は $v = undef に違和感が無いかもな。
748デフォルトの名無しさん:2008/12/16(火) 22:35:52
(2)を使ってたのはPerl4までだな。
まともにスコープ切って素直な処理書いてりゃ必要にならない。
749デフォルトの名無しさん:2008/12/17(水) 20:38:19
Perl Best Practiceのサンプルコードは
(1)で書かれてるね
750デフォルトの名無しさん:2008/12/17(水) 21:29:46
pixivにアクセスして解析しようとしています
しかし、ログインが必要なので単純にアクセスしても期待通りのものが得られません
ログインとかクッキー周りのことをなるべく簡単に済ますには、
何を使うのがお勧めですか
751デフォルトの名無しさん:2008/12/17(水) 21:53:04
>>750
LWP
752デフォルトの名無しさん:2008/12/17(水) 23:04:35
Perlでシリアル通信するのに、モジュールは必要ですか?
753デフォルトの名無しさん:2008/12/17(水) 23:40:27
754デフォルトの名無しさん:2008/12/18(木) 16:53:25
>>751
やはりLWP以上のものはありませんか

普通にGETしたりする程度にならLWPは使えているのですが、
クッキー周りがさっぱりです
何かサンプルはありませんか?
755デフォルトの名無しさん:2008/12/18(木) 17:06:16
>今後のフォローアップについて
ttp://www.matsusaka-marm.com/info02.html

>今後も近隣の主要な病院とコンタクトをとり、今回の事故に関連した特定の事象集積がな
>いか等の情報収集を継続的に行いフォローアップすることが望まれる。

>2008年12月15日 
>  専門委員会
>  委員長 藤田 某 
>      精神科医
        ̄ ̄ ̄ ̄ ̄

精神科医
  精神科医
     精神科医
       精神科医
         精神科医・・・

もし何かあったら、精神科のお医者さんが診てくれるそうです。
安心ですね。
756デフォルトの名無しさん:2008/12/18(木) 17:06:47
誤爆すまそ
757デフォルトの名無しさん:2008/12/18(木) 17:37:49
>>754
HTTP::Cookies

LWPに含まれてるよ。初期化さえすればあとはほとんど自動的に
やってくれる。SYNOPSISの例を見ればわかるだろ。
758デフォルトの名無しさん:2008/12/18(木) 18:06:08
HTTP::Cookiesの基本的な使い方は判るんですが
(それでもかなりブラックボックス的な使い方をしてるけど)
クッキーファイルも更新されるのでクッキーのやりとりもしているように見えるのに、
ログインしてくれというメッセージが帰ってくる

そもそも、pixivのCookiesの内容を見ても、
__utma __utmv __utmz という変数しかなくて、ID等が含まれているように思えない

そのへんも含めて、pixivに特化した、これなら動くというサンプルがあると助かります
759デフォルトの名無しさん:2008/12/18(木) 18:22:34
>>758
それCookie以前にログインができてないじゃん
ログインの時にhidden属性のinputのデータもちゃんと渡してる?
760デフォルトの名無しさん:2008/12/18(木) 18:26:21
>>758
そんな都合の良いものがそうそう落ちてるんだろうかと思ってぐぐったら

ttp://memogaki.soudesune.net/PixivCooliris.html

なんてのがひっかかりましたが。

wiresharkとか使ってブラウザでうまくログインできるときの通信内容と
違いがないか地道に調べるのが正攻法だと思うけど。
761デフォルトの名無しさん:2008/12/18(木) 18:46:02
ログインの処理を飛ばして、ブラウザでログインしといて、
その時のクッキーの情報をそのまま送ってやれば、
騙されてくれないかなー、という目論見なんですが、
やっぱり通信内容とか調べないと駄目ですか

そのへんを全部面倒見てくれるパッケージが無いかな、というのが
最初の質問です(>>750)
762デフォルトの名無しさん:2008/12/18(木) 18:55:06
面倒見るって言っても、どのurlにどういう内容をどういう名前でpostするか、
みたいなのはバラバラだから、結局調べることになるのか
763デフォルトの名無しさん:2008/12/18(木) 19:10:40
>>761
ブラウザが持ってるクッキー情報をどうやってperlから読んでるわけ?
何もしないと勝手には読んじゃくれませんよ。
764デフォルトの名無しさん:2008/12/18(木) 19:14:09
それは、
Documents and Settings\user\Cookies
のとこにある奴を
手作業で
765デフォルトの名無しさん:2008/12/18(木) 19:20:57
ちゃんとloginする、という正攻法であっけなく成功

肝部分は、
my $res = $ua->post( "http://www.pixiv.net/index.php",
[
mode => "login",
pixiv_id => $pixivUserID,
pass => $password,
skip => 1
]);
こんな感じ
っていうか、>>760の丸コピー
766デフォルトの名無しさん:2008/12/18(木) 22:26:48
そろそろ誰かWWW::MixiみたいにWWW::Pixivとか書いたらいいのに
767デフォルトの名無しさん:2008/12/18(木) 22:46:26
>>766
おまえがやってヒーローになれ
768デフォルトの名無しさん:2008/12/19(金) 02:17:12
Hoge/Fuga.pm な奴に package Fuga; と書いても package Hoge::Fuga; と書いても動作が同じでしたが、
これは前者が後者の省略した記述に過ぎないという事なのでしょうか?
それとも、何か動作上の違いがあるのでしょうか?
769デフォルトの名無しさん:2008/12/19(金) 04:06:09
>>768
http://perldoc.jp/docs/perl/5.10.0/perlmod.pod

use Hoge::Fuga; は Hoge/Fuga.pm を探して require するが、
Hoge/Fuga.pm に何が書かれているかまでは関知しない。

#--- ./Hoge/Fuga.pm ---
package Piyo;
sub piyo { print join 'piyo', @_ }
1;
#__END__

#--- script ---
use strict;
use Hoge::Fuga;
Piyo::piyo(1, 2, 3, 'yo');
__END__
770デフォルトの名無しさん:2008/12/19(金) 05:35:27
別のスレ(Perlに詳しい人に質問!)できいてみたのですが、こちらでも質問させてください。

perlでメールの添付ファイルの処理をしようとして、
ttp://homepage3.nifty.com/hippo2000/perltips/rcvmail.htm
を参考にプログラムを書こうと思っているのですが、
上記ページのWordDecoderを使ったサンプルプログラムを実行すると、
保存されたファイル名がURLエンコードされている状態になってしまいその原因が分かりません。

実はURLエンコードされている方が扱いやすくてうれしいのですが、
原因が分からないのが気持ち悪くて…。

どなたか教えていただけないでしょうか。
動作環境はFreeBSD6.0で、Jcode, MIME-Toolsはportsでインストールしました。

別のスレで答えが頂けなかったのは、私が根本的に勘違いしているのが原因かも、とも思っています。
(ファイル名はもともとURLエンコード…パーセントエンコード?するように作られているだけ、とか。)

よろしくお願いいたします。
771デフォルトの名無しさん:2008/12/19(金) 06:26:16
「自分で調べるのは、下層民のやること」
772デフォルトの名無しさん:2008/12/19(金) 20:22:38
>>770
質問の趣旨は、「原因が分からないのが気持ち悪い」ということだろ?
じゃぁ答えはこうだ。「気にするな」
773デフォルトの名無しさん:2008/12/20(土) 07:15:15
>>772
実にPerlerっぽい答えだw
774デフォルトの名無しさん:2008/12/20(土) 15:19:40
MIME::Words::decode_mimewords がちゃんと動いてるかどうか確認しる
775デフォルトの名無しさん:2008/12/20(土) 19:14:12
以下で、Foo::funcとFoo->funcの違いは何ですか?

package Foo;
sub func { print "foo\n" }

package main;
Foo::func;
Foo->func;
776デフォルトの名無しさん:2008/12/20(土) 19:23:28
>>775
それなら動作に違いはないが、
Foo->funcは内部でFoo::func('Foo')になる。
777デフォルトの名無しさん:2008/12/20(土) 19:24:08
>>776
s/動作/結果/
だった
778デフォルトの名無しさん:2008/12/20(土) 19:55:37
>>776
なるほど
d
779デフォルトの名無しさん:2008/12/23(火) 18:39:12
【速報】
ラリー・ウオールがperl6の開発を無期限延期し、
PHPの開発に合流するという、衝撃的な発表。
780デフォルトの名無しさん:2008/12/23(火) 18:52:18
>>779
sorce
781 ◆TWARamEjuA :2008/12/23(火) 20:02:44 BE:3267465-2BP(7089)
source
782デフォルトの名無しさん:2008/12/23(火) 21:31:41
783デフォルトの名無しさん:2008/12/23(火) 21:34:03
>>779
事実ならRubyかPythonに移行決定してしまうんだが…
784デフォルトの名無しさん:2008/12/23(火) 21:39:14
確かに、PHP使うくらいならな・・・
785デフォルトの名無しさん:2008/12/23(火) 21:56:02
盛大な釣られっぷりに吹いた
786デフォルトの名無しさん:2008/12/23(火) 22:44:42
さほど盛大でもない
787デフォルトの名無しさん:2008/12/24(水) 01:07:40
perlで新聞記事の出現単語を調べてます。

記事が少ないと正常に動くんですが、
記事の量を増やしまくって出現単語の種類が増えると
茶筅が起動できなくてエラーでるんだけど。。。
ハッシュがでかくなりすぎたせいでメモリ不足が原因?
勝手にHDにでも退避してくれんのかね??
788デフォルトの名無しさん:2008/12/24(水) 06:35:58
>>787 別に一度に読み込む必要ないのでは?
789デフォルトの名無しさん:2008/12/24(水) 08:28:53
エラー隠蔽者の出現です
790デフォルトの名無しさん:2008/12/24(水) 13:04:07
>>788
確かに・・・
そっちでやってみるわ!
てんくす!
よいお年を!
791デフォルトの名無しさん:2008/12/25(木) 01:22:54
質問させてください。
$fooという変数に、"bar"という文字列が含まれているか判断したいのですがどうすればいいでしょうか?
grepを使ってみたのですが、$fooの値が書き換えられてしまいます。

行いたいことは、if()の条件分岐で$fooのなかに"bar"が含まれているときと、含まれていないときで処理を変えたいです。
ですが、条件分岐後にも$fooの値を使用するので$fooの内容は変更したくありません
792デフォルトの名無しさん:2008/12/25(木) 01:30:19
>>791
if ($foo =~ /bar/) {
}
else {
}
793デフォルトの名無しさん:2008/12/25(木) 01:32:00
>>791
index
794デフォルトの名無しさん:2008/12/25(木) 05:21:48
>grepを使ってみたのですが、$fooの値が書き換えられてしまいます。

795デフォルトの名無しさん:2008/12/25(木) 07:50:00
>>790
改行またがりとかきをつけるよろし
796デフォルトの名無しさん:2008/12/26(金) 02:03:30
正規表現の最短マッチについての質問です。
フォルダの中にあるテキストファイルの「拡張子を除いたファイル名」を取得したいのですが、
階層の部分まで拾ってきてしまいます。


my $place="/test/1234.txt";   #この例では「1234」を抽出したい
$place=~ m|/(.*?)\.txt$|;      #最短マッチで/(1234).txt 括弧部分を取得
my $name=$1;            
print $name;

ところが出力結果は「test/1234」となってしまいます。
正しくファイル名だけを抽出するためには、どのように記述したら良いのでしょうか。
ご存知の方、どうかよろしくお願いします。

簡易検証用コピペ
perl -e '$i="/test/1234.txt"; $i=~ m|/(.*?)\.txt$|; $j=$1; print $j;'
797796:2008/12/26(金) 02:13:22
文字クラスと^の存在を忘れていました。
m|/([^/]*?)\.txt$| でOKですね…ごめんなさい。
正規表現の"."は"/"に対応していないのでしょうか、よく分かりません。
798デフォルトの名無しさん:2008/12/26(金) 04:00:05
>>796
File::Spec
799デフォルトの名無しさん:2008/12/26(金) 10:38:36
すみません。全部、一番下の$i=''に飛ばされてしまうみたいなんですが、こういう場合、どう書き替えればいいのでしょうか。

if ($a){
 if ($b){
  if ($c){
  $i='abc'; # $a $b $c 全部あれば (のつもり)
  }else
  {$i='ab';} # $a $b あれば (のつもり)
 }else
 {$i='a';}# $a あれば (のつもり)
}else
{$i='';}# $a $b $c なければ (のつもり)
800デフォルトの名無しさん:2008/12/26(金) 11:05:33
「if ($a)」

「$a あれば」
について考えてみるのだor説明してみるのだ
801デフォルトの名無しさん:2008/12/26(金) 11:08:40
$a $b $c の内容がわからないからなんとも
802デフォルトの名無しさん:2008/12/26(金) 11:11:35
>>796
最短マッチは「前から」調べて、一致したら(それ以上チェックせずに)、そこでおしまい。

最短一致マッチで誤解しやすいこと
http://d.hatena.ne.jp/hiratara/20081101/1225504613

> my $place="/test/1234.txt";   #この例では「1234」を抽出したい

正規表現でやるなら m|([^/]*)\.txt$|; でいいんじゃないの。

> 正規表現の"."は"/"に対応していないのでしょうか、よく分かりません。

対応とは??
803デフォルトの名無しさん:2008/12/26(金) 11:21:19
>797
Perl の正規表現マッチングアルゴリズムでは対象文字列の左側でマッチする方がよりよいマッチとして判断される。
これは最短マッチ(短い方優先)よりも強いルール。
従って最初の / にマッチするものの方が優先される。
804デフォルトの名無しさん:2008/12/26(金) 23:55:32
「対応」 ね・・・言いたいことはなんとなく分かるが、
まったくジャンルの違うものを頭の中でごった煮してしまったんだな。
805デフォルトの名無しさん:2008/12/27(土) 14:27:53
>>797 は、シェルやDOSのワイルドカード(ファイル名展開)と
混同してるんだと思う

ファイル名展開の場合、対象がファイルだから / はまたがない
だから正規表現でファイル名を抜き出す場合も、そういうのを期待したんじゃないかね
806デフォルトの名無しさん:2008/12/28(日) 11:40:10
perl本体をソースからbuildする時、makeってかConfugure時にセットされるcflagsやcppflagsのオプション
(-DTHREAD_HAVE_PIDSとか-D_REENTRANTとか)の一覧とか説明ってどこかにある?

CPAN(やtarを展開したdir内)のREADMEやInstallのDocumentにも
一部(-DDEBUGGINGや-Duseithreadsとか)は記載があるけど、./Confugure --helpしても出ててこないし、
その他のOptionの内容(どんな値があるか、どうセットするorしない)とかが知りたんだけど・・・。
807デフォルトの名無しさん:2008/12/28(日) 14:45:21
PerlのConfugureは対話形式だから、その都度説明が出るだろ
808デフォルトの名無しさん:2008/12/28(日) 21:45:56
>>806
perl -V
809デフォルトの名無しさん:2008/12/29(月) 04:25:45
chompとか置換とかって、その結果を別の代入する方法はあるでしょうか。

普通に書くと、

$x = $text1;
chomp($x);
$text2 = $x;

こんな風に3行になると思うのですが、こういうのを1行で書けるような技はないでしょうか。

810デフォルトの名無しさん:2008/12/29(月) 04:37:38
chomp(my $text2=$text1);
811デフォルトの名無しさん:2008/12/29(月) 17:44:24
perl -wl e- 'print 10;'
とか実行すると、Linuxでは上手く動作するのに、WindowsXP
のDOSプロンプトだと
Can't find string terminator "'" anywhere before EOF
at -e line 1.
と表示されてしまい、エラーとなってしまうのですが、どうすれば
良いのでしょうか?
812デフォルトの名無しさん:2008/12/29(月) 17:47:04
perl -wl e- "print 10;"

これはそもそもシェルの使い方の問題であって、
perlとは何も関係ない。
813デフォルトの名無しさん:2008/12/30(火) 09:42:47
これは25日目で終了ですか?

JPerl Advent Calendar 2008
http://perl-users.jp/articles/advent-calendar/2008/
814デフォルトの名無しさん:2008/12/30(火) 13:24:21
それはそもそも日程の問題であって、
perlとは何も関係ない。
815デフォルトの名無しさん:2008/12/30(火) 20:47:06
(,),[,]が文字列の中に1個以上あった場合、それぞれ\(,\),\[,\]に変換するしたいのですが
例)
(test)perl]→\(test\)perl\]みたいに感じ
これをスマートに書きたいのですが、うまく書くことができません
ヒントをください
816デフォルトの名無しさん:2008/12/30(火) 21:08:02
>>815
ヒント:
http://perldoc.jp/docs/perl/5.10.0/perldata.pod の「Scalar value constructors」
http://perldoc.jp/docs/perl/5.10.0/perlop.pod の「Quote and Quote-like Operators」
および「Regexp Quote-Like Operators」
http://perldoc.jp/docs/perl/5.10.0/perlretut.pod 全部

答:
$str =~ s/(?=[()\]])/\\/g;
817816:2008/12/30(火) 21:10:59
あー。
× (?=[()\]])
○ (?=[()[\]])
818815:2008/12/30(火) 21:18:18
>>816
ありがとうございます
頑張ってやってみます
819デフォルトの名無しさん:2008/12/31(水) 20:07:01
>>815
\Q
820デフォルトの名無しさん:2009/01/01(木) 13:36:50
ちょっと教えてください。
以下のようなログがあります。

-------ここから----------------------
hydraoc(188)Entering OC_PREINITIALIZE
hydraoc(189)Component=terminalserver,
hydraoc(188)Entering OC_INIT_COMPONENT
hydraoc(189)Component=terminalserver, SubComponent=(null)
state.cpp(1006)Setup Parameters
state.cpp(1007)We are running on Wks
state.(1008)Is this adv server No
state.cpp(1009)Is this Personal (Home Edition) No
state.(1010)Is this SBS server No
state.(1011)IsStandAloneSetup = Yes
state.cpp(1012)IsFreshInstall = No
state.(1013)IsTSFreshInstall = No
---------ここまで----------------------------
821820:2009/01/01(木) 13:43:22
すみません。>>820のログは間違いです。正しくは、
-------ここから----------------------
hydraoc(188)Entering OC_PREINITIALIZE
hydraoc(189)Component=terminalserver,
hydraoc(188)Entering OC_INIT_COMPONENT
hydraoc(189)Component=terminalserver, SubComponent=(null)
state.cpp(1006)Setup Parameters
state(1007)We are running on Wks
state(1008)Is this adv server No
state.cpp(1009)Is this Personal (Home Edition) No
(1010)Is this SBS server No
(1011)IsStandAloneSetup = Yes
IsFreshInstall = No
state.cpp(1013)IsTSFreshInstall = No
---------ここまで----------------------------
です。>>820は無視してください。
822820:2009/01/01(木) 13:45:24
このログは「hydraoc」と「state」という2種類のログが
合わさったものと考えてください。(上4行がhydraocログ、下8行がstateログ)

質問ですが、Perlを使って、"cpp"のある行だけを抜き出すスクリプト
は書けるのですが、5行目から下全部の合計8行をファイル出力する
Perlスクリプトを作成することは可能でしょうか?
823デフォルトの名無しさん:2009/01/01(木) 13:50:44
sed なら 1,4d だけど・・・
perl だと、そのファイルを open して、不要な行を読み飛ばせばいいんじゃないかな。
824デフォルトの名無しさん:2009/01/01(木) 13:51:12
可能です。
私には
>(1010)Is this SBS server No
>(1011)IsStandAloneSetup = Yes
>IsFreshInstall = No
がどちらのログか判断する根拠がありませんが、あなたにはあるのですよね?
それをプログラムに教えてあげましょう。
825820:2009/01/01(木) 14:20:25
>>824
私はPerl初心者ですが、職場の先輩から上記に類似した宿題を
出されていて困っています。もしかして課題の内容がおかしいのでは?
と思っています。

>(1010)Is this SBS server No
>(1011)IsStandAloneSetup = Yes
>IsFreshInstall = No

↑この3行もstateログです。
これをcpp行と一緒に出力させるのは、共通の"Is"もパターンマッチ
させれば良いのでしょうか?でもそうすれば、例えばhydraocログ内に
"Is"が存在すれば一緒に出力されてしまいます。出力は↓のようにしたいです。
--------------------------------------
state.cpp(1006)Setup Parameters
state(1007)We are running on Wks
state(1008)Is this adv server No
state.cpp(1009)Is this Personal (Home Edition) No
(1010)Is this SBS server No
(1011)IsStandAloneSetup = Yes
IsFreshInstall = No
state.cpp(1013)IsTSFreshInstall = No
-------------------------------------

やっぱり課題がおかしいと思うんです.....何かすみません。変な質問してしまって。

826デフォルトの名無しさん:2009/01/01(木) 16:11:24
hydraocログって、先頭が'hydraoc'から始まるってこと?なら、
print unless /^hydraoc/;
で終わりだが。
827820:2009/01/01(木) 18:48:21
>>826
ありがとうございます。上のログでは、hydraocログの部分は
各行に"hydraoc"が含まれるので、print unless /^hydraoc/;と
やれば"hydraoc"が含まれる行以外の行を出力、となるのは
初心者の私にもわかります。ただ実際に先輩から出された課題は
"hydraoc"ログ部分に"hydraoc"が存在しない行も含まれます。
上で出した私の事例が不適切でした。ネットや書籍でも調べましたが、
やはり「キーワード"state"を見つけたら、そこから後のすべての行を出力」
みたいな処理は書けませんかね?
828デフォルトの名無しさん:2009/01/01(木) 19:06:13
>>827
プログラム言語なんだから、書けないわけないだろ。一体何を言ってるんだ?
829デフォルトの名無しさん:2009/01/01(木) 19:54:41
while(<DATA>) {
print if /^state/ .. '';
}

__DATA__
hydraoc(188)Entering OC_PREINITIALIZE
hydraoc(189)Component=terminalserver,
hydraoc(188)Entering OC_INIT_COMPONENT
hydraoc(189)Component=terminalserver, SubComponent=(null)
state.cpp(1006)Setup Parameters
state(1007)We are running on Wks
state(1008)Is this adv server No
state.cpp(1009)Is this Personal (Home Edition) No
(1010)Is this SBS server No
(1011)IsStandAloneSetup = Yes
IsFreshInstall = No
state.cpp(1013)IsTSFreshInstall = No
830デフォルトの名無しさん:2009/01/01(木) 23:41:22
ようするにぃ、820 はぁ、perl の文法を全く知らないっ・・・と。
ファイルのopenの仕方、読み込み方、closeのしかた。
全て何も知らない。全く知らない。
もちろん、本を買って勉強する気などサラサラ無い。
ネットで検索する気もぜ〜んぜん無い。
教えてくれ、教えてくれ!を連発するだけで問題が解決すると考えている。
もしかしたら perl どころか、他のプログラミング言語を全く知らない可能性もあるな。
831デフォルトの名無しさん:2009/01/01(木) 23:45:09
Perl始めるなら「Perl言語プログラミングレッスン」がオススメ。
それ読んだら「ラクダ本」にいけば良いよ。
832820:2009/01/01(木) 23:53:43
>>830
まだ勉強始めたばかりだけど少しなら知ってる。
C#勉強中。
open(OPENFILE >>"xxx.txt")とか、ファイルハンドル使用して
ファイルを読み込んだりファイルに書き込んだりは出来る。
本はリャマ本を半分くらい読んだ。
>>829だと、hydraocが4行分出力されてるので×。
なあ、鼻くそチンカス、>>830、テメーしばくぞカスが。
誰にモノ申しとんじゃワレ。
833デフォルトの名無しさん:2009/01/01(木) 23:56:06
>>829
DATAセクションってマイナーだよね?
あんまり人に通じない気がする。
834デフォルトの名無しさん:2009/01/01(木) 23:58:26
マイナーというかDATAはあまり使用しない気がするんだが。。。
書く人の好みによると思うけどさ
835デフォルトの名無しさん:2009/01/02(金) 00:00:26
>>824で全てだと思うんだがなあ

「hydraoc」のログの特徴か
「state」のログの特徴を徹底的に調べること

両方無いとなれば原理的に分離するのは不可能
おおよその傾向しかないのであればおおよそしか分類できない
それだけ
836デフォルトの名無しさん:2009/01/02(金) 00:03:01
つーか>>820(>>832)は素人じゃないんだろ?
だったらこんな簡単な処理くらいすぐ書けるだろ
なんで書けないのかが不思議なんだが
837デフォルトの名無しさん:2009/01/02(金) 00:31:50
>>827の下二行で書いてるのがまさに>>829だろ。
838デフォルトの名無しさん:2009/01/02(金) 00:33:05
>>834
サンプルコードだから使ってるだけだろw
839デフォルトの名無しさん:2009/01/02(金) 01:18:08
>>832

> なあ、鼻くそチンカス、>>830、テメーしばくぞカスが。
> 誰にモノ申しとんじゃワレ。

直接顔あわせたらこんなこといえるわけ無いんだけど。

もう何も答えなくていいでしょ
840デフォルトの名無しさん:2009/01/02(金) 01:37:38
分かる人がいらっしゃったら教えてください

・perlのモジュール探索パス@INCがありますよね?
これに対して動的にパスを追加するのではなく、
常に@INCにあるパスを追加しておきたいのです

どこかにテキストファイルかバイナリファイルのようなものがあって
そこに追記すればいいとかありますでしょうか?

・具体的にはcygwinのperlを使用していますが
CPANから追加するモジュールを/usr/local/libに追加しています。
(デフォルトの/binにLWPモジュールを追加すると,
headが上書きされてしまうため)
841833:2009/01/02(金) 01:44:42
>>838
それもわかるんだけど、初心者くさい人向けの
サンプルとしてはいかがなものかと思ったんで
ちょっと言ってみた。

だって、__DATA__とは何ですかとか聞かれたら
またメンドクサいでしょ?
842デフォルトの名無しさん:2009/01/02(金) 03:32:04
>>832

>C#勉強中。
>本はリャマ本を半分くらい読んだ。

嘘じゃんwww書籍読んでる人の質問じゃないし
仮に読んでたとしても理解できてないなら読んでないのと同じだしなw
おまいはもっと簡単な入門書的位置付けの本から始めるべきだったんじゃねぇの?www
843デフォルトの名無しさん:2009/01/02(金) 07:40:42
>840
環境変数 PERL5LIB に設定しとくのがお勧め。
844デフォルトの名無しさん:2009/01/02(金) 08:08:05
>>841
監査役お疲れです。
845デフォルトの名無しさん:2009/01/02(金) 15:11:59
ちょっと質問させて下さい。
cgi掲示板を連ねてレンタル掲示板を作ろうかと検討しています。

そこで、全てのフォルダにある掲示板cgiに広告を表示させたいのですが、
MTみたいなモジュールを使って表示させることを掲示板cgiで可能なのでしょうか?

サーバー内
┏bbs1(レンタル)フォルダ
┣bbs2(レンタル)フォルダ
┣bbs3(レンタル)フォルダ
┣bbs4(レンタル)フォルダ
┣bbs5(レンタル)フォルダ
┣bbs6(レンタル)フォルダ
┣bbs7(レンタル)フォルダ
以下どんどん追加

全てに共通した広告を出す。
また、広告の修正なども、1つを修正すれば全てに反映されるようにしたい。

846デフォルトの名無しさん:2009/01/02(金) 15:27:42
> CGIについての質問は板違いです。WEBプログラミング板でどうぞ。
> CGIとPerlの区別がつかない人もWEBプログラミング板に行ってください。
> ( WEBプログラミング板 http://pc11.2ch.net/php/ )

いちおう答えとくと
require '../ad.cgi';
とかすればいいんじゃね?
上記に対して質問があってもここでは受け付けないのでWebProg板に行ってくれ
847デフォルトの名無しさん:2009/01/02(金) 16:51:58
>>832
> C#勉強中。
> open(OPENFILE >>"xxx.txt")とか、ファイルハンドル使用して
> ファイルを読み込んだりファイルに書き込んだりは出来る。

ワロタ・・・ことしの初笑い!
勉強と言うのはは、ただ単に「記憶・暗記」するだけじゃダメだ。
「理解・応用」ができなくては意味がない。
ハードディスクという機械を知ってるか?あれにはいろんな情報を詰め込む事が出来る。
だが、ハードディスクは「記憶」するだけ。「理解」はしていない。
データの中身が何であろうと、ただ 覚えただけ なんだよ。
まさに今のキミと同じだ。「理解」して「応用」する力を身につけよう。
848デフォルトの名無しさん:2009/01/02(金) 18:22:33
なんか他人を馬鹿にするのが楽しいだけみたいな奴が跋扈する、嫌な雰囲気のスレになっちゃったな。
849デフォルトの名無しさん:2009/01/02(金) 18:31:41
昔からだろ
850デフォルトの名無しさん:2009/01/02(金) 18:35:33
>>832
>>829だと、hydraocが4行分出力されてるので×。

あれ?
自分の環境だと出力されないけどなー
851820:2009/01/02(金) 18:58:44
>>850
ゴメン。__DATA__ 以下が出力結果だと勘違いしました。
>>829さんのレスに感謝です。
852デフォルトの名無しさん:2009/01/02(金) 19:22:19
>>851
> ゴメン。__DATA__ 以下が出力結果だと勘違いしました。

× 勘違いしました
○ 決めつけました
853デフォルトの名無しさん:2009/01/02(金) 19:40:01
>>841 を読んで、「何言ってんだろう」と思ったけど、
>>851 見ると、大当たりだな。
それにしても820よ。本当にこれでいいのかい。
>>829 は「>>827 に書かれた要望」には忠実だが、
本当にこれが欲しかったものなのかどうか、
よく意味を考えて自分で判断しないとな。
854デフォルトの名無しさん:2009/01/02(金) 19:52:46
いいんじゃない?本人が納得したんだから。
どうせ、な〜〜んにも考えてないやろ。
855デフォルトの名無しさん:2009/01/02(金) 21:13:08
Perl使う奴は心の捻じ曲がった奴が多いんだろうな。
言語仕様から捻じ曲がってるし。
856デフォルトの名無しさん:2009/01/02(金) 21:23:55
>>855
まったくその通りだと思う。Perlなんかさっさと忘れた方がいいよ。
857デフォルトの名無しさん:2009/01/02(金) 21:38:53
をいをい。Perl使いがどれだけ親切なのか知らないのか。
そうだな。>>820の言葉が足りない分は察して補いつつ、しかも
上司に提出したら、>>856が言うようにPerlのことをさっさと忘れられるように
なるスクリプトをタダで作ってやったぞ。

$ref = \@hydraoc;
while(<DATA>){
  $ref = \@{$&} if /(^hydraoc)|(^state)/;
  push @$ref, $_;
}
print "hydraoc log:\n", @hydraoc, "\n";
print "state log: \n", @state, "\n";

__DATA__
hydraoc(188)Entering OC_PREINITIALIZE
hydraoc(189)Component=terminalserver,
hydraoc(188)Entering OC_INIT_COMPONENT
hydraoc(189)Component=terminalserver, SubComponent=(null)
state.cpp(1006)Setup Parameters
state(1007)We are running on Wks
state(1008)Is this adv server No
state.cpp(1009)Is this Personal (Home Edition) No
(1010)Is this SBS server No
(1011)IsStandAloneSetup = Yes
IsFreshInstall = No
state.cpp(1013)IsTSFreshInstall = No
858デフォルトの名無しさん:2009/01/02(金) 23:30:02
>>857
残念。課題を100回読んでから出直して来い。
859デフォルトの名無しさん:2009/01/02(金) 23:38:09
まったくもう。これだからフローチャートの書けないヤツは・・・
860デフォルトの名無しさん:2009/01/02(金) 23:58:37
シンボリックリファレンスなんか使うなよ
861デフォルトの名無しさん:2009/01/03(土) 00:27:10
先週乗った電車で、Perl使いがお婆さんに席譲ってる所見かけた
862デフォルトの名無しさん:2009/01/03(土) 01:12:03
それはよく訓練された性格悪いPerl使いだ。
863デフォルトの名無しさん:2009/01/03(土) 01:34:17
perl 使いは、紫外線を当てるとオデコに perl と文字が浮かぶからすぐわかる。
864デフォルトの名無しさん:2009/01/03(土) 14:12:40
家は当然パールライス食ってるよ。
865デフォルトの名無しさん:2009/01/03(土) 15:27:45
「今年こそ良い年になりますように」景気回復や家族の幸せを祈り、明治神宮では
大みそかの深夜から参拝する人が玉砂利の参道に列をなした。
警察庁によると、明治神宮の正月三が日のPerl使いの人出予想は305万人。
866デフォルトの名無しさん:2009/01/03(土) 16:49:03
参拝に来ていたPerl使いの声
「(何をお願いしたんですか?)今年こそPerl6がリリースされますように、とお願いしました」(20代女性、Perl暦2年)
867デフォルトの名無しさん:2009/01/03(土) 16:59:56
そいや、今年もPHP5.3出そうにないね
868デフォルトの名無しさん:2009/01/03(土) 17:03:49
Perlでゲーム作れますか?
869デフォルトの名無しさん:2009/01/03(土) 17:26:11
>>868
プログラム言語なんだから、作れないわけないだろ。一体何を言ってるんだ?
870デフォルトの名無しさん:2009/01/03(土) 17:44:27
ゲームのジャンル次第だがPerlで十分作ることができる。
しかしプログラミング言語だからというのはいい過ぎ。
$ unkoc -o unko
$ ./unko
うんこ食う
$
みたいな空文字を入力記号として決まった出力を行うプログラムを生成するUNKO言語だとゲームは作れそうにない。
871デフォルトの名無しさん:2009/01/03(土) 19:23:06
>864
ふと 「おなかぺっこぺこだおう」 という言葉を思い出した
872デフォルトの名無しさん:2009/01/03(土) 21:15:50
Perlでプログラムを作りましたが実行できません
どうやれば実行できるんですか?
さっぱり判りません
873デフォルトの名無しさん:2009/01/03(土) 21:20:08
ググレカス
874デフォルトの名無しさん:2009/01/03(土) 21:32:08
>>872
perl *.plとコマンドを打って実行しなさい
Windowsの場合はActivePerl入れればよし、*nixの場合は普通Perlは入ってる
あなたが今から使うとコマンドはperlだけで、場合によってはcdを使うかもしれない
875デフォルトの名無しさん:2009/01/03(土) 21:33:10
くぐっても、なぜか実行方法を記したサイトがありません
これではいくらプログラムの作り方を理解しても意味がない
なんなんですかこれ
876デフォルトの名無しさん:2009/01/03(土) 21:47:46
perldoc
コマンドを実行してみるとよろし
877デフォルトの名無しさん:2009/01/03(土) 23:21:59
ルーミィしゃんがいるデシ。
878デフォルトの名無しさん:2009/01/03(土) 23:58:21
>>875
perl 実行 windows で、ぐぐったらインストール方法から一通り出たぞ。
まさかLinuxやBSDを使ってる訳は無いよな?
879デフォルトの名無しさん:2009/01/04(日) 00:20:30
ちょっと質問させて下さい。
cgi掲示板を連ねてレンタル掲示板を作ろうかと検討しています。

そこで、全てのフォルダにある掲示板cgiに広告を表示させたいのですが、
MTみたいなモジュールを使って表示させることを掲示板cgiで可能なのでしょうか?

サーバー内
┏bbs1(レンタル)フォルダ
┣bbs2(レンタル)フォルダ
┣bbs3(レンタル)フォルダ
┣bbs4(レンタル)フォルダ
┣bbs5(レンタル)フォルダ
┣bbs6(レンタル)フォルダ
┣bbs7(レンタル)フォルダ
以下どんどん追加

全てに共通した広告を出す。
また、広告の修正なども、1つを修正すれば全てに反映されるようにしたい。
880デフォルトの名無しさん:2009/01/04(日) 00:23:50
881デフォルトの名無しさん:2009/01/04(日) 00:26:07
http://pc11.2ch.net/test/read.cgi/php/1204488452/921
http://pc11.2ch.net/test/read.cgi/php/1204488452/924
>>923
> それを聞いてんだろカス!
>
> 教えてやる知識ねーならくんなよボケw
882デフォルトの名無しさん:2009/01/04(日) 01:08:33
>>864 好きな魔王はパールクール
883デフォルトの名無しさん:2009/01/04(日) 01:21:35
俺はベル様が好きなんだ・・・。
884882:2009/01/04(日) 01:23:40
(なんでこの速度でレスが付くんだ……
885デフォルトの名無しさん:2009/01/04(日) 01:34:52
正月休みで暇を持て余しているのだろう。
886デフォルトの名無しさん:2009/01/04(日) 08:29:58
すいません多分素人くさい問題だと思うんですが質問させてください
openで対象ファイルがみつからなかったときの処理なんですが

open(TEST,"$adr\.cgi") || $nferror = 1;

として失敗時に$nferrorを1にしたいだけなんですが、
この一行入れただけでどうしてもエラーになります
何故でしょう?
887デフォルトの名無しさん:2009/01/04(日) 08:34:34
open(TEST,"$adr\.cgi") || ($nferror = 1);
open(TEST,"$adr\.cgi") or $nferror = 1;
888デフォルトの名無しさん:2009/01/04(日) 08:56:03
>>887
ああ・・・なるほど
なんかそういうあれだったんですね
上手く行きました。ありがとうございました
・・・なんかガックリ疲れた・・・
889デフォルトの名無しさん:2009/01/04(日) 11:15:27
>>879
ディスパッチャーやコントローラといったものを学んだほうが良い答えが出せるよ。

CPANでいうと
http://search.cpan.org/~sartak/Path-Dispatcher-0.06/lib/Path/Dispatcher.pm
http://search.cpan.org/~markstos/CGI-Application-Dispatch-2.15/lib/CGI/Application/Dispatch.pm
このへん。

条件が良く分からないから、はっきりしたこも言えないけど、具体的には
mod_rewriteなんかでリクエストURIとそのハンドラとパラメータのマップを管理してあげて
.cgi自体は一個にすればいいんじゃないかな。
.cgiでやるんだったら、speedy_cgiなんかがオススメ。
890デフォルトの名無しさん:2009/01/04(日) 11:55:29
スレ違いの話題続けるなよ
891デフォルトの名無しさん:2009/01/04(日) 12:08:40
>>888
「なんかそういうあれ」って何か知ってる?
「演算子の優先順位」な。
perl がエラーを吐かずに動く場合もあるから、
きちんと覚えておかないと、どつぼに嵌るぞ。
892デフォルトの名無しさん:2009/01/04(日) 19:18:03
>>891
すっごい勉強になりました
どうもどうも
893デフォルトの名無しさん:2009/01/04(日) 22:50:41
894デフォルトの名無しさん:2009/01/05(月) 00:01:43 BE:185724173-PLT(54324)
ワラタ
895デフォルトの名無しさん:2009/01/05(月) 02:13:17
掲示板自体は完成してるんですが、
掲示板の管理画面から設定を変えるというのはどうやって作れば良いんでしょう?

例えば以下のレンタル掲示板のようにです。
無料レンタル掲示板〜ABC-CGI〜
http://www.abc-cgi.com/
管理メニュー
http://www.abc-cgi.com/bbs/editsample.html


掲示板cgiのソースを直接いじらないのに、
htmlから掲示板の設定を変更できる仕組みが分からないのです。

具体的に分かりやすく教えて下さいませ。
また、お勧めの書籍などありましたら宜しくです。
896デフォルトの名無しさん:2009/01/05(月) 02:21:38
>>895
単に掲示板の設定ファイルとcgiファイルを分離してるだけ
897デフォルトの名無しさん:2009/01/05(月) 03:00:51
OSのソースをいじらなくても環境をカスタマイズできるようなもの。
898デフォルトの名無しさん:2009/01/05(月) 03:06:01
>>897って>>895?それとも別人?
IDないしよく解らんな…
899デフォルトの名無しさん:2009/01/05(月) 03:14:36
なんで同一人物だと思うの?
900デフォルトの名無しさん:2009/01/05(月) 03:20:24
違うならいいんだ。忘れてくれ。
901デフォルトの名無しさん:2009/01/05(月) 10:58:30
PerlCriticって何?
902デフォルトの名無しさん:2009/01/05(月) 11:28:07
>>895
CGIがらみはWebProg板で質問したほうがいい回答が得られると思います。
自分も最近PerlでCGIを作り始めたところなので、どのようにするのがベターなのか知りたいところです。

例えば、CPANにあるCinfig::Tinyあたりで別ファイルに設定を保存するのはどうでしょうか。

Config::Tiny
http://search.cpan.org/~adamk/Config-Tiny-2.12/

掲示板CGIスクリプトの冒頭で、

use Config::Tiny;
$Config = Config::Tiny->read( 'file.conf' );

と書いて、設定ファイル(file.conf)から設定値を読み込む。
HTMLのフォーム(<form></form>)から得られた値をこの設定ファイルに書き込む。

$Config->write( 'file.conf' );
903デフォルトの名無しさん:2009/01/05(月) 19:16:03
XREAサーバにて
KCatch.pmがうまく働いてくれないのですがCGI::Carp qw(fatalsToBrowser)を使わないといけないのでしょうか?
という質問をしようとおもったら。

いつも書いてる
use KCatch;
行を
use KCatch qw( execdata );__DATA__
にしたら働いてくれた

原因はなんなんでしょうか?
904デフォルトの名無しさん:2009/01/05(月) 21:28:47
905デフォルトの名無しさん:2009/01/05(月) 21:43:18
回答者さんたちに質問です。
簡単な質問はもとより、何解な質問にも答えを導き出していますが、その知識はどこで身につけたのでしょうか?
906デフォルトの名無しさん:2009/01/05(月) 22:13:03
Google
907デフォルトの名無しさん:2009/01/05(月) 22:23:04
908デフォルトの名無しさん:2009/01/05(月) 23:23:57
>>904
なるほど、いつもは

use strict;
use lib qw( ./cgi-lib ./cgi-macro );
use KCatch;
require 'main.pl';
my $var = {};
&mycgi::main($var);
exit;

とかしてるのに、今回おうちゃくして、.cgiに全部ソース書いてったのが問題だったのね
って結局かわさきさんのHPの説明が1番わかりやすかったw

http://www.kawa.net/works/perl/catch/news.html#usage
909デフォルトの名無しさん:2009/01/05(月) 23:42:36
>>905
真上で質問してる俺がいうのもなんだけど
壁にぶつかったときとかに、この記事読むとホっとするよ、そんでフツフツと燃えてくるw

http://jibun.atmarkit.co.jp/lcareer01/rensai/topi11/topi01.html
910デフォルトの名無しさん:2009/01/06(火) 01:46:40
ZARDの負けないで を聴きながら憶えました
911デフォルトの名無しさん:2009/01/06(火) 13:17:53
>>829さんの、

print if /^state/ .. '';

ですが、最後のシングルクォーテーション2つ「''」は
何を意味するのでしょうか?「行の最後」ってこと?
この処理のロジックを説明していただけませんか?
「もし行頭がstateの場合〜」というところまではわかるのですが…
912デフォルトの名無しさん:2009/01/06(火) 13:37:15
>>911
どう見てもただの空文字列だろ。

スカラーコンテキストの「..」演算子の意味を理解すればいいと思うよ。
913デフォルトの名無しさん:2009/01/06(火) 13:49:23
>>912
「空文字」を指定しているのはわかります。
(最初は改行文字の指定の\nを省略したものだと思いましたが。)
でも範囲演算子「..」の後に空文字指定ってどういうロジック?
「空文字が見つかるまで」というロジックなのか、
「空文字もすべて」ということなのか、判断がつきません。
上のif文のロジックを言葉で説明してくれませんか?
914デフォルトの名無しさん:2009/01/06(火) 14:18:00
perltrap.podに「Perl4とPerl5でsplitのデフォルトが変わりました」
という記事のサンプルで理解できない部分があります。
split(/ /)とsplit(' ')で動きが違う(先頭の空要素の有無)のを
どう解釈すればいいのか教えていただけないでしょうか?
(パターンが空白以外の時は同じ動きです)

#!/usr/bin/perl
# This is perl, v5.8.6 built for i386-linux-thread-multi
use warnings;
use strict;

$_=' hi mom';
print "<",join(':', split(/ /)),">\n"; # <:hi:mom> Perl4 DEFAULT
print "<",join(':', split(' ')),">\n"; # <hi:mom> Perl5 DEFAULT

$_=',hi,mom';
print "<",join(':', split(/,/)),">\n"; # <:hi:mom>
print "<",join(':', split(',')),">\n"; # <:hi:mom>
915914:2009/01/06(火) 14:23:25
アゲてしまいすいません
916デフォルトの名無しさん:2009/01/06(火) 14:24:06
>>913
912じゃないけど、本をよく読みなよ。
「/^state/ .. ''」は「/^state/」が真になった後に「''」が真になるまで
真を返すわけだが、「''」は真にならないので、「/^state/」が真になった後、
「/^state/ .. ''」は常に真になる。
917デフォルトの名無しさん:2009/01/06(火) 14:26:12
>>913
たぶんこれだな

プロンプト>perldoc perlop
より抜粋
In scalar context, ".." returns a boolean value. The operator is
bistable, like a flip-flop, and emulates the line-range (comma) operator
of sed, awk, and various editors. Each ".." operator maintains its own
boolean state. It is false as long as its left operand is false. Once
the left operand is true, the range operator stays true until the right
operand is true, *AFTER* which the range operator becomes false again.
It doesn't become false till the next time the range operator is
evaluated. It can test the right operand and become false on the same
evaluation it became true (as in awk), but it still returns true once.
If you don't want it to test the right operand till the next evaluation,
as in sed, just use three dots ("...") instead of two. In all other
regards, "..." behaves just like ".." does.
918デフォルトの名無しさん:2009/01/06(火) 14:29:48
>>914
splitのエントリに書いてある
919914:2009/01/06(火) 14:44:37
ありがとうございます。
split(' ')だけ特別なのですね。
920デフォルトの名無しさん:2009/01/06(火) 15:00:05
>>916: 本を読みなといいつつ親切に噛み砕いて説明
>>917: マニュアルを代わりにひいてペースト
>>918: マニュアルのここに書いてある、だけ

次に「マニュアル読め!」が来たら完璧だったのに。
921デフォルトの名無しさん:2009/01/06(火) 15:09:57
最近、偉人ググレカス見かけないな
922デフォルトの名無しさん:2009/01/06(火) 20:32:29
今の人は、すぐググっちゃうからね
923デフォルトの名無しさん:2009/01/08(木) 11:41:29
my $p= [ { TAG => data, TAG2 => [ { TAG_INNER => data_inner} , ..] .. }, ... ];

みたいな構造のデータを、まるごとコピーするには、何がいいでしょう。
my $q = $p; としたのでは、あとで shift(@$p) とかすると、$q の内容も壊れてしまいますので。

c で memcpy(q,p,sizeof(p)) とやるのと似た手はないでしょうか。
924デフォルトの名無しさん:2009/01/08(木) 12:05:10
>>923
CPANでcloneをキーワードに検索するとそれっぽいのがいくつか
出てくるので好きなの使え
925923:2009/01/08(木) 12:15:57
おお thx
926デフォルトの名無しさん:2009/01/09(金) 10:39:22
use Storable; Storable::dclone($p) がオススメ。
927デフォルトの名無しさん:2009/01/09(金) 12:25:44
>>923
Data::Dump::dumpして、evalするのはどうだろうか?
928デフォルトの名無しさん:2009/01/09(金) 12:29:38
…んな事までするくらいだったら普通に
my $q = [ @{$p} ] ;
で良いだろーに
929デフォルトの名無しさん:2009/01/09(金) 21:05:29
>>928
アウト。

リファレンスの先にさらにリファレンスが
あった場合に破綻する。
930デフォルトの名無しさん:2009/01/10(土) 03:27:56
>>929
memcpyなら一段しかコピーされないだろ
931デフォルトの名無しさん:2009/01/10(土) 05:49:46
>>930
Cだと配列のメンバに構造体を持てるからね。
当然、構造体のメンバに構造体や配列も持てて、明示的にポインタで分離していないならば
memcpy一発で内包するデータごとコピーできる。

質問(923)の「まるごとコピー」の解釈違いだろうけど、1段階の展開で間に合うならサンプル
で多段階のリファレンスを持つ構造は書かないと思うよ。
932デフォルトの名無しさん:2009/01/10(土) 13:57:15
うゎあ、だんだん泥沼に……
933デフォルトの名無しさん:2009/01/10(土) 17:45:17
Perl道とは泥沼に嵌ることと見つけたり
934デフォルトの名無しさん:2009/01/10(土) 18:09:30
perl6のことですね
935デフォルトの名無しさん:2009/01/10(土) 18:53:25
perl全般です
936デフォルトの名無しさん:2009/01/10(土) 20:00:11
Perlからの逃走。これを今年の抱負にします。いや、まじに。
937デフォルトの名無しさん:2009/01/10(土) 20:15:36
逃走しようとするとPerlがどこまでもしつこく追いかけてくる、いやマジで。
938デフォルトの名無しさん[:2009/01/10(土) 21:56:49
ふと思ったんだが、perlって日本ユーザー会みたいなものあるのか?
ググっても見当たらんのだが。

rubyは当然としても、pythonはあるし…

もっとも、無くても困らんからどうでもいいといえば、どうでもいいんだが…
939デフォルトの名無しさん:2009/01/10(土) 22:20:10
ユーザ会って何するグループなの?
940デフォルトの名無しさん:2009/01/10(土) 22:20:43
孤高のperlerに馴れ合いグループは必要ない
941デフォルトの名無しさん:2009/01/10(土) 23:10:11
http://perl-users.jp/
からmongersでもたどってみれば?
942デフォルトの名無しさん:2009/01/11(日) 00:06:57
C言語もC++言語もないんじゃね?
943デフォルトの名無しさん:2009/01/11(日) 00:08:00
Perlはドキュメントの翻訳もはじめから個人がやってたからなあ。
944デフォルトの名無しさん:2009/01/11(日) 00:51:27
>>939
お互いの傷を慰め合う
945デフォルトの名無しさん:2009/01/11(日) 13:38:07
($a, $b, $c) = split(/<>/, "a<>b");

こんなのがあったとき、$cはどうなりますか?
946デフォルトの名無しさん:2009/01/11(日) 13:41:40
クイズ?
947デフォルトの名無しさん:2009/01/11(日) 13:42:37
うんでf
948デフォルトの名無しさん:2009/01/11(日) 14:57:39
ワンライナーも自分で確かめないこんな世の中じゃ
949デフォルトの名無しさん:2009/01/11(日) 15:23:18
splitは引っ掛けで、変数名($a,$bと$cの違い)に関するクイズ?
950デフォルトの名無しさん:2009/01/11(日) 16:19:18
>>942
逆にユーザー会なんてないものが規格や競争に買っている証なのかもしれんね。
Perlだけでなく。OSとかも。
951デフォルトの名無しさん:2009/01/11(日) 20:37:23
すいませんが、質問です。
package foo;
sub new {
  my ($class, %conf) = @_;
  my $self = bless {}, $class;
  $self->{hoge_func} = \&hoge_func;
  $self->{piyo_func} = \&piyo_func;
  return $self;
}
sub call_function {
  my ($self, $func_name, $argv) = @_;
  return $self->{$func_name}($argv);
}
sub hoge_func { #いろいろ }
sub piyo_func { #いろいろ }
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
呼出側で
$obj->call_function('hoge_func', $argv);
とすると、 hoge_func, piyo_func ともに $_[0] に $argv がきてしまいます。
$_[0] には、オブジェクトのリファレンスが入ってるものだと思ってたのですが、
そうする為には sub call_function{} の return のとこを

return $self->{$func_name}($self, $argv);

にしないと オブジェクトのリファレンスが渡されません。
何故でしょうか?

また、こういう事をしたい場合の王道的な方法というのがあったら教えてください。
実際には hoge_func, piyo_func 的な関数が 数十から百くらいになる予定なので
統一的な呼び出し方にしたいのです。
952デフォルトの名無しさん:2009/01/11(日) 21:05:23
>>951
評価順序がこうだから

($self->{$func_name})->($argv);
953デフォルトの名無しさん:2009/01/11(日) 22:22:09
>>952
簡潔なレスありがとうございます。
いまいち理解できてないので、もうちょい調べてみます。
954デフォルトの名無しさん:2009/01/11(日) 22:58:35
>>951
#!/usr/bin/perl -w
use strict;

package Foo;
sub new { bless {}, $_[0] }
sub hoge { print 'hoge:', map("[$_]", @_), "\n" }
sub piyo { print 'piyo:', map("[$_]", @_), "\n" }

package main;
my $obj = Foo->new;
$obj->$_(int rand 10, int rand 20) for qw(hoge piyo);
__END__
955デフォルトの名無しさん:2009/01/11(日) 23:10:08
>>951
インスタンス毎にクロージャを生成して持たせるんじゃなく、
命名規則によって処理内容が自動で決まるようなメソッドを
沢山持つクラスを作りたいなら AUTOLOAD とか。
http://search.cpan.org/dist/perl-5.10.0/pod/perlsub.pod#Autoloading__
http://perldoc.jp/docs/perl/5.10.0/perlsub.pod
956デフォルトの名無しさん:2009/01/12(月) 11:30:27
無料ホームページでCGIを使ってみたんですが
CGIに対しても広告が表示されてしまうので困っています
なんとかなりませんか?
957デフォルトの名無しさん:2009/01/12(月) 11:45:06
>>1
958デフォルトの名無しさん:2009/01/12(月) 13:23:25
>956
言っとくけど、WebProgのPerlスレも違うからな
959デフォルトの名無しさん:2009/01/12(月) 17:48:21
>>956
日本語わかる?
960デフォルトの名無しさん:2009/01/12(月) 19:14:51
>>956
スレチだが、完璧な解決方法を教えよう。
有料ホームページを使え。
961デフォルトの名無しさん:2009/01/12(月) 23:50:09
>>956
貧乏スレにでもいけ
962デフォルトの名無しさん:2009/01/13(火) 00:45:11
>>956 大丈夫。Perlはちょこっといじるのもやりやすいから、覗いてみたらいかが。
963デフォルトの名無しさん:2009/01/13(火) 10:23:53
>>962
普通はmod_layoutとかのサーバサイドじゃないかね
直接は書かないと思う
964デフォルトの名無しさん:2009/01/14(水) 01:27:42
軽くておすすめのエディタ教えて下さい
perlとちょっとしたflashのasくらいしか書きません
965デフォルトの名無しさん:2009/01/14(水) 02:43:03
vi か メモ帳
966デフォルトの名無しさん:2009/01/14(水) 03:05:24
edlin
967デフォルトの名無しさん:2009/01/14(水) 09:50:11
>>964
Notepad++
968デフォルトの名無しさん:2009/01/14(水) 09:58:48
>>964-967
Perl書くのにどんなエディタ使ってる?
http://pc11.2ch.net/test/read.cgi/php/1014357485/

使いやすいエディタって何よ?
http://pc11.2ch.net/test/read.cgi/php/991372719/

スレ立てるまでもない質問はここで 第94刷
http://pc11.2ch.net/test/read.cgi/tech/1226461162/

★質問誘導スレ★
http://pc11.2ch.net/test/read.cgi/tech/1066747198/
969デフォルトの名無しさん:2009/01/15(木) 01:44:19
>>964
edlinにもう一票
970デフォルトの名無しさん:2009/01/15(木) 19:47:10
kde上でwindowを作りたいんだけど、おすすめのモジュール教えてください
971デフォルトの名無しさん:2009/01/15(木) 20:13:02
qt
972デフォルトの名無しさん:2009/01/17(土) 21:24:14
下のような、%が含まれているURLをwgetしようとすると
結果が取得できないのですが、どう変えたらデータが取得できますか?

#!/usr/bin/perl

print "Content-type: text/html¥n¥n";
$tmpurl = "http://www.google.co.jp/search?q=%E5%B1%B1%E7%94%B0";
$all = `wget -q -O - "$tmpurl"`;
print "$all";
973デフォルトの名無しさん:2009/01/17(土) 21:34:29
URLをシングルクオートで括ってみては?
974デフォルトの名無しさん:2009/01/17(土) 21:36:46
こんな感じに
$tmpurl = 'http://www.google.co.jp/search?q=%E5%B1%B1%E7%94%B0';
975デフォルトの名無しさん:2009/01/17(土) 21:46:00
>>972
ただソースをみるだけなら、これはダメかい?

#!/usr/bin/perl

use warnings;
use strict;
use WWW::Mechanize;

my $url = "http://www.google.co.jp/search?q=%E5%B1%B1%E7%94%B0";
my $mech = WWW::Mechanize->new();

$mech->get($url);
print $mech->content;
976デフォルトの名無しさん:2009/01/17(土) 23:03:16
>>972
google.co.jp は wget や LWP を弾く。

> perl -MLWP::Simple -e "getprint q!http://search.yahoo.co.jp/search?p=%E5%B1%B1%E7%94%B0/!"
977972:2009/01/17(土) 23:11:41
おかげさまでできました!ありがとうございます!!
978デフォルトの名無しさん:2009/01/18(日) 00:54:19
>>975
常識で考えてさぁ、ソース見るためだけに perl から wget を呼び出すと思う?
もうちょっと考えてから書き込めよ。
979デフォルトの名無しさん:2009/01/18(日) 09:26:08
>>978
ちょっと、付け足せばwgetと同じ事ができる
>常識で考えてさぁ、ソース見るためだけに perl から wget を呼び出すと思う?
ばっかじゃないの
980デフォルトの名無しさん:2009/01/18(日) 10:19:11
複数行文字列の最初のn行をprintするスマートな方法ありますか?

$lines =~ /((.*\n?){$n])/m;
print $1;

考えたけど、これが限界でした。
981デフォルトの名無しさん:2009/01/18(日) 12:18:50
んーどうするのがスマートだろう
for(0..5){print scalar <$file_handle>;}
982デフォルトの名無しさん:2009/01/18(日) 12:35:37
>>981
それは違うだろ。
983デフォルトの名無しさん:2009/01/18(日) 12:36:24
別に>>980でもいいんじゃないかと思うが

print +($str =~ /\G.*\n/g)[0..$n-1];

ついでに質問だが、実行フェーズでグローバルでリードオンリーな定数定義する方法
にはどんなのがありますか?

BEGIN { *HOGE = sub () { } }
$hoge = get_hoge();
no warnings 'redefine';
*HOGE = sub () { $hoge };

これをもう少しスマートに書きたい
984デフォルトの名無しさん:2009/01/18(日) 12:39:12
あ、多分\Gいらないわ
985デフォルトの名無しさん:2009/01/18(日) 14:25:08
986デフォルトの名無しさん:2009/01/18(日) 14:48:24
>>983
どうもありがとうございます。
問題なく実行できたのですが、+はどういう意味ですか?
987デフォルトの名無しさん:2009/01/18(日) 14:56:09
3.141592653589793 まで書かないと double の精度に僅かに達しなかった気がするよ。
988デフォルトの名無しさん:2009/01/18(日) 15:15:36
>>986
print( $str =~ /\G.*\n/g ) [0..$n-1];
ではなく
print( ($str =~ /\G.*\n/g)[0..$n-1] );
と解釈させる為。

http://perldoc.jp/docs/perl/5.10.0/perlop.pod
> 単項演算子の "+" は、たとえ文字列に対して用いられた場合にも、
> 何もしません。関数名に続けて括弧付きの式を書く場合に、関数の
> 引数リストと解釈されないようにするために用いることができます。

>>987
訂正の必要を感じたなら perlmod のコミット権持ってる人へ連絡して
やってくれ。5.10.0 でも 5.8.9 でもこのままだから。
989デフォルトの名無しさん:2009/01/18(日) 15:29:04
28 2D 44 54 FB 21 09 40 : 3.1415926535898
11 2D 44 54 FB 21 09 40 : 3.14159265358979
18 2D 44 54 FB 21 09 40 : 3.141592653589793
18 2D 44 54 FB 21 09 40 : 3.1415926535897932
18 2D 44 54 FB 21 09 40 : 3.14159265358979324
18 2D 44 54 FB 21 09 40 : acos(-1)

Intel CPU ならこんな感じになる。
perlmod のコミット権持ってる人って誰なのかしらん・・・。
990デフォルトの名無しさん:2009/01/18(日) 15:59:47
You give the following statement as an example of making constant scalars.
*PI = \3.14159265358979;
But this value is slightly less than the IEEE 754 double precision accuracy.

The following is the hexadecimal dump of each right-hand side value.
28 2D 44 54 FB 21 09 40 : 3.1415926535898
11 2D 44 54 FB 21 09 40 : 3.14159265358979
18 2D 44 54 FB 21 09 40 : 3.141592653589793
18 2D 44 54 FB 21 09 40 : 3.1415926535897932
18 2D 44 54 FB 21 09 40 : 3.14159265358979324
18 2D 44 54 FB 21 09 40 : acos(-1)

You should choice at least 3.141592653589793.

メーリングリストに入ってる人がいるなら、誰かつっこんどいてくれ。
991デフォルトの名無しさん:2009/01/18(日) 16:32:41
その指摘自体はどうでもいいんだけど、16進ダンプは
big endian にしないと分からなくない?
なんで上位ビットが・・・って思った。
992デフォルトの名無しさん:2009/01/18(日) 16:45:36
まあつっこむ人にまかせる。
993983:2009/01/18(日) 18:36:48
>>985
うむ、リテラルなスカラー限定な技ですね
そうではなく、もっと動的にやっちゃう技が聞きたかったのです

あ、でもReadonly.pm等でリードオンリーにした変数を型グロブのスカラースロットに入れるってのはあるかも。。。
994デフォルトの名無しさん:2009/01/18(日) 18:46:37
あ、配列とかもいけるじゃん、この方法なら!
ひとつ賢くなったわ
995デフォルトの名無しさん:2009/01/18(日) 19:03:48
>>993
何をしたいのかよく分からんがこういう事ではないのか?

#!/usr/bin/perl -w
use strict;
use Scalar::Util qw(looks_like_number);
our $PI;
my($pi, $r) = map looks_like_number($_) ? $_ : 3, @ARGV;
eval "*PI = \\$pi";
print 2 * $PI * $r, "\n", eval { $PI = 3 } ? "Uh...\n" : $@;
__END__
996983:2009/01/18(日) 19:18:57
>>995
レスthx
eval文字列なんて反則技すぎる。。。

配列、ハッシュへの適用も考えたら
Readonly my @pi = get_pi();
*PI = \@pi;
の方がいいね
997983:2009/01/19(月) 18:56:09
最初からこれだけで良かった
<<996はなしの方向で

Readonly our @PI => get_pi();
998デフォルトの名無しさん:2009/01/20(火) 00:46:59
998 !!!!!!!!!!!!!!!!!!!!
999デフォルトの名無しさん:2009/01/20(火) 01:11:35
999
1000デフォルトの名無しさん:2009/01/20(火) 01:12:01
1000も〜らいっ
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。