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

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

レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん2008/09/21(日) 12:22:12
"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 あたり
0002デフォルトの名無しさん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/
0003デフォルトの名無しさん2008/09/21(日) 12:23:02
[モジュール]
CPAN.com: ttp://search.cpan.org/
河馬屋二千年堂: ttp://homepage3.nifty.com/hippo2000/

[テクニック]
Perlメモ: ttp://www.din.or.jp/~ohzaki/perl.htm
Perlのページ: ttp://homepage1.nifty.com/nomenclator/perl/
Perlの小技: ttp://homepage3.nifty.com/hippo2000/perltips/index.htm

[Perl 5.8 Unicodeメモ]
ttp://www.rwds.net/kuroita/program/Perl_unicode.html (修正)
ttp://www.namazu.org/~tsuchiya/perl/perl-5.8.html
ttp://www.lr.pi.titech.ac.jp/~abekawa/perl/perl_unicode.html
0004デフォルトの名無しさん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でエンコードする必要があります。
0005デフォルトの名無しさん2008/09/21(日) 12:24:39
1 ttp://pc.2ch.net/tech/kako/1017/10177/1017736187.html
2 ttp://pc3.2ch.net/tech/kako/1033/10336/1033688230.html
3 ttp://pc2.2ch.net/tech/kako/1041/10412/1041205885.html
4 ttp://pc2.2ch.net/tech/kako/1048/10485/1048519394.html
5 ttp://pc5.2ch.net/tech/kako/1053/10530/1053053082.html
6 ttp://pc5.2ch.net/tech/kako/1060/10606/1060689008.html
7 ttp://pc2.2ch.net/test/read.cgi/tech/1068051036/ (事故により消滅)
8 ttp://pc2.2ch.net/test/read.cgi/tech/1074151549/ (事故により消滅)
9 ttp://pc5.2ch.net/test/read.cgi/tech/1079114157/
10 ttp://pc5.2ch.net/test/read.cgi/tech/1085564875/
11 ttp://pc5.2ch.net/test/read.cgi/tech/1090889189/
12 ttp://pc5.2ch.net/test/read.cgi/tech/1094579428/
13 ttp://pc5.2ch.net/test/read.cgi/tech/1097851764/
14 ttp://pc5.2ch.net/test/read.cgi/tech/1101649274/
15 ttp://pc5.2ch.net/test/read.cgi/tech/1105953092/
16 ttp://pc8.2ch.net/test/read.cgi/tech/1111034732/
17 ttp://pc8.2ch.net/test/read.cgi/tech/1117870308/
18 ttp://pc8.2ch.net/test/read.cgi/tech/1121804136/
19 ttp://pc8.2ch.net/test/read.cgi/tech/1126977805/
20 ttp://pc8.2ch.net/test/read.cgi/tech/1131286411/
0006デフォルトの名無しさん2008/09/21(日) 12:25:07
[過去スレ2]
21 ttp://pc8.2ch.net/test/read.cgi/tech/1134327348/
22 ttp://pc8.2ch.net/test/read.cgi/tech/1138519327/
23 ttp://pc8.2ch.net/test/read.cgi/tech/1141742901/
24 ttp://pc8.2ch.net/test/read.cgi/tech/1146022352/
25 ttp://pc8.2ch.net/test/read.cgi/tech/1149259409/
26 ttp://pc8.2ch.net/test/read.cgi/tech/1153412251/
27 ttp://pc8.2ch.net/test/read.cgi/tech/1157874614/
28 ttp://pc8.2ch.net/test/read.cgi/tech/1162273941/
29 ttp://pc11.2ch.net/test/read.cgi/tech/1166708139/
30 ttp://pc11.2ch.net/test/read.cgi/tech/1173880452/
31 ttp://pc11.2ch.net/test/read.cgi/tech/1181500187/
32 ttp://pc11.2ch.net/test/read.cgi/tech/1186995713/
33 ttp://pc11.2ch.net/test/read.cgi/tech/1192463997/
34 ttp://pc11.2ch.net/test/read.cgi/tech/1199977642/
35 ttp://pc11.2ch.net/test/read.cgi/tech/1208674881/
36 ttp://pc11.2ch.net/test/read.cgi/tech/1215569470/
37 ttp://pc11.2ch.net/test/read.cgi/tech/1218449440/
0007デフォルトの名無しさん2008/09/21(日) 12:37:52
すれ立て乙
0008デフォルトの名無しさん2008/09/21(日) 14:28:51
もういいです
0009デフォルトの名無しさん2008/09/21(日) 14:42:33
同感だが、ないと寂しいのも事実
0010デフォルトの名無しさん2008/09/23(火) 14:43:26
いままさに転職で就活してるが、PerlとかPHPとかできますって言っても
「PHP()笑ですか。Javaとかできますか?」って言われるわww
ちなみにPerlの話題なんて微塵もでません。言っても「へぇ…」程度

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

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

open my $fh, "data.txt";
$file_name = xxxxxx $fh;
print $file_name; #=>data.txt
0012デフォルトの名無しさん2008/09/23(火) 15:23:53
無いと思う。つか、ファイルを開く時点で名前を把握してるのに、なんでわざわざ
ファイルハンドルから取得する必要がある?
0013デフォルトの名無しさん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秒待つ
}
}
0014デフォルトの名無しさん2008/09/23(火) 16:37:34
>>13
flock() が使えない環境で動かす必要があるなら、最初から他の方法に統一したほうがいいように思えます。
flock() だけ分岐させても、どちらに分岐するかによって flock() 依存の機能の利用可否が異なりますから面倒になるだけです。

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

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

いや、なんでもない
0021デフォルトの名無しさん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__
0022デフォルトの名無しさん2008/09/24(水) 10:30:46
>>21
>>16 からの話の流れを読むと、
列挙型が欲しくて enum (>>17-18) を使ったけれど、enum の提供する定数はサブルーチンベースなのでパターン内に展開できない(>>19)。
それに対し >>20 が控え目に打開案を示した、という流れ。

シンボルテーブルベースの列挙型を新たに実装する手もあるし、
Readonly.pm を使う手もあるけど、
変にこだわりさえしなきゃ >>19 の通りハッシュで済む話だね。
0023デフォルトの名無しさん2008/09/26(金) 06:39:52
http://qb5.2ch.net/test/read.cgi/operate/1222311594/210

perlで書くとこうなる
0024デフォルトの名無しさん2008/09/26(金) 11:14:17
Perlを勉強してやる!
0025デフォルトの名無しさん2008/09/26(金) 14:32:07
>>23
read.cgiはCで書かれてるつーの。
0026デフォルトの名無しさん2008/09/26(金) 15:14:43
>>24
つ、通報しま
0027デフォルトの名無しさん2008/09/26(金) 15:42:10
>>23みたいに、内容の違うpageを自分の妄想と結びつけてソースだと言い張る
頭がおかしい人間がこの掲示板には多いよね。

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

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

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

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

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

例がほしい? スカラーコンテキストでハッシュにアクセスすると
、分子が割り当てられたキーの数、分母がバケットの数となっ
ている分数を内容とする文字列が得られる。クジラのはらわた
だ。そう言ったでしょ。」
0032デフォルトの名無しさん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

本当だ!
この仕様考えたヤツはいったい何が不満だったのか?
0033デフォルトの名無しさん2008/09/27(土) 18:50:31
>>30
Levenshtein距離とか
0034デフォルトの名無しさん2008/09/27(土) 19:33:23
>>32
Javaで言えばただのtoStringじゃん
0035デフォルトの名無しさん2008/09/27(土) 19:38:22
ついでに言えばperlのコンテキストもOOPの演算子オーバロードも(使う方からすれば)似たようなもの
0036デフォルトの名無しさん2008/09/27(土) 20:54:49
perlのかっちょええエディタを紹介して。
コードの自動補完とかできるやつ。
0037 ◆TWARamEjuA NGNG?2BP(7089)
(・o・)ポカーン
0038デフォルトの名無しさん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 構文なんて使うなよ…
0039デフォルトの名無しさん2008/09/27(土) 23:15:21
「い」が抜けたorz...
0040デフォルトの名無しさん2008/09/27(土) 23:27:27
「でもいい」も抜けてたな。
酒飲んで書き込むもんじゃねえなあ
0041デフォルトの名無しさん2008/09/28(日) 00:26:39
>>29
while(1)・・・でいいのをわざわざdo・・・while(1)で書いてるくらいだから、
よっぽど、do-while文が好きだったんだな。どの言語の影響だ?

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

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

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

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

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

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

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

某社ではプログラマにはPHPは使わせてなかった
あんなのはHTMLのコーダーやデザイナーが埋め込みで使うスクリプトだ、と
極論ではあるがそういう使われ方が結構多いんじゃないか?
0053デフォルトの名無しさん2008/09/29(月) 11:54:26
PHPは成長中の言語だから、一概に言えない。
ただ、Perlと同じく継ぎ接ぎの酷さが見えてきた感じはする。
0054デフォルトの名無しさん2008/09/29(月) 22:26:06
ある程度以上メジャーになってしまうと、あとから大規模に言語仕様を弄るのは大変だからな。
同様の問題は、PerlやPHPに限らずRuby,PythonとかC/C++とかも多かれ少なかれ抱えてると思う。
0055デフォルトの名無しさん2008/09/30(火) 07:11:06
おまいら、eclipse + padwalker + epic
使ってる?
0056デフォルトの名無しさん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

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

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

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

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

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

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

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

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

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

しかし、Acme::tidyというのが代わりに検索で
出てくるんだが、これでも同じなのか?
0066デフォルトの名無しさん2008/09/30(火) 14:14:28
http://googlewhacks.blogspot.com/2007_07_01_archive.html

いったいこれはなんだー
0067デフォルトの名無しさん2008/09/30(火) 14:29:04
>>65
自己解決した。
検索のときにハイフンを入れてなかった。
ハイフンいれたら検索で出てきた。
0068デフォルトの名無しさん2008/09/30(火) 15:19:21
perlcritic
使い方がいまいちよくわかんね。
0069デフォルトの名無しさん2008/09/30(火) 19:15:02
eclipse + padwalker + epic
でperlなのだが、

prin

って打ったときに、
print
printf

って候補を出してくれる、っていうのはできないの?
0070デフォルトの名無しさん2008/09/30(火) 19:34:32
RSS1.0、RSS2.0、Atom0.3のRSSを生成したいのですが、
オススメのモジュールなどありますでしょうか?
できればインストールが簡単(*.pmコピるだけとか)で扱いやすいので。
0071デフォルトの名無しさん2008/09/30(火) 22:31:04
UNIXタイムスタンプ→グレゴリオ歴に変換するにはどうすればいいのでしょうか。
localtime((stat 'hoge.png')[9]) としても、どうも変な変換になっているようなのです。
0072デフォルトの名無しさん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してもまともな結果になりません。
どなたか御存知ですか?
0073デフォルトの名無しさん2008/10/01(水) 21:15:48
>>71
scalar localtime((stat 'hoge.png')[9]) にすると希望どおりだとかいうオチでは。

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

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

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

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

組み込み関数の eof を調べてみたらいいと思うよ。
0077デフォルトの名無しさん2008/10/02(木) 01:19:21
>>76
ありがとうございます
eofは使ったことがありませんでした
試してみます
0078デフォルトの名無しさん2008/10/02(木) 07:41:10
普通に丸呑みモードでいいやん?
perl -i.bak -0777pe 's/\A#!.*?\n/hoge\n/ ' *pl
0079デフォルトの名無しさん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"
↑
を追加して日本語になるように、お願い致します。
0080デフォルトの名無しさん2008/10/03(金) 18:26:15
>79
WebProg板へ行った方が的確な回答が得られるんじゃないかな。


で、" " の中で、更に " " を使うな。
人間ならともかく、コンピュータはどこまでが " " の範囲なのか理解できない。
0081デフォルトの名無しさん2008/10/03(金) 18:27:33
すでにWebProgにマルチしてるよコイツ
0082デフォルトの名無しさん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はリポジトリから無くなってるのでしょうか?
0083デフォルトの名無しさん2008/10/03(金) 22:32:19
追記:PERLバージョン5.10.0です
新バージョンに対応してるDBD::mysqlがないということでしょうか
0084デフォルトの名無しさん2008/10/03(金) 23:29:38
Active Perl 5.8.8 では ppm install DBD:mysql できるぞ。
無理して 5.10.0 使わんでもいいんじゃない?
0085デフォルトの名無しさん2008/10/03(金) 23:47:26
>>82
cpan使えば?
0086デフォルトの名無しさん2008/10/04(土) 12:29:01
http://pc11.2ch.net/test/read.cgi/prog/1221751414/60
これはどういうことだ
0087デフォルトの名無しさん2008/10/04(土) 12:50:24
VB、Java、最近だとruby、このあたりは、プログラマに向いてない
人間の比率が高いから、採用の目安としては使えない、ってことじゃないかな。
昔のコボラみたいに融通が利かない人間を採ってもあとあと困るし。
0088デフォルトの名無しさん2008/10/04(土) 17:40:03
Mail::Sendmail

これの正しい発音は、

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

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

open(IN, "log.txt");
print while (<IN>);
close(IN);
log003.txt
0092デフォルトの名無しさん2008/10/04(土) 19:34:12
はあ
0093デフォルトの名無しさん2008/10/04(土) 20:34:36
日本語でおk
0094デフォルトの名無しさん2008/10/04(土) 20:47:45
globれ
0095デフォルトの名無しさん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); 

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

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

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

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

if ( /%[^%]*?%/g ) { ・・・ }
0111デフォルトの名無しさん2008/10/06(月) 23:57:19
試してないけど、マッチ情報の取得とかで変わるんじゃない?
0112デフォルトの名無しさん2008/10/07(火) 01:44:45
if じゃなくて while の条件式じゃないのかな。
0113デフォルトの名無しさん2008/10/07(火) 11:38:43
言われてみれば確かに if で g を使うのは変だよな。while ならともかく。
たぶん、ついうっかりやってしまただけだろ。特に意味など無いと思うよ。
0114デフォルトの名無しさん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;
0115デフォルトの名無しさん2008/10/07(火) 12:46:41
久し振りにPerl/Tkをやったら、すっかり忘れている。
0116デフォルトの名無しさん2008/10/07(火) 12:48:52
>>114
:crlf は、0x0A を出力する時に 0x0A → 0x0D, 0x0A という置換をする。
(入力時は、0x0D, 0x0A を 0x0A に置換する)
:raw は、何の変換もしない。

おそらく data1 が 0x0D, 0x0A なテキストで、これがそのまま無変換で読み込まれ、
出力する時に <0x0D> <0x0A> → <0x0D> <0x0D, 0x0A> と変換されている。
0117デフォルトの名無しさん2008/10/07(火) 12:58:49
>>116
なるほど、そういうカラクリですか
サンクス
0118デフォルトの名無しさん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 のように、マッチ開始位置を指定する手もある。
0119デフォルトの名無しさん2008/10/07(火) 18:04:49
>>111-113
>>118
サンクス
可能性としては、単なるうっかりか、次のマッチのために使っていたということっすね
0120デフォルトの名無しさん2008/10/07(火) 18:17:13
日本で一番Perlを操れる人は小飼弾氏ですか?
0121デフォルトの名無しさん2008/10/07(火) 18:25:49
小飼ってまだ生きてるの?
0122デフォルトの名無しさん2008/10/07(火) 18:38:21
http://www.yahoo.co.jp/

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

Yahoo! JAPAN
01231222008/10/07(火) 18:39:41
タイトルが無い場合はURL
0124デフォルトの名無しさん2008/10/07(火) 18:46:44
>>120
ちがうだろ
0125デフォルトの名無しさん2008/10/07(火) 18:52:55
>>122
支離滅裂
0126デフォルトの名無しさん2008/10/07(火) 18:55:37
http://www.aimix.jp/cgi/accsearch123.html
これを改造で良いのかな?
0127デフォルトの名無しさん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;
0128デフォルトの名無しさん2008/10/07(火) 19:42:29
$host = fff.co.jp;
print $host, "\n";

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

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

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

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

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

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




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

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


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

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

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

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

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

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

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

でいいんじゃね?

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

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

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

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

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

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

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

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

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

おいらがC++を見限ったのは、このお笑いのツボが理解できなかったからだとさ。
0203デフォルトの名無しさん2008/10/13(月) 22:24:33
リャマ本の第5版って翻訳されないのかな?
0204デフォルトの名無しさん2008/10/14(火) 04:10:35
最近データーベースの勉強をしてるんだが、
perlのソースコードを一行一行、一行づつ全部
データーベースに格納したら面白いかな?
と考えたんだが、どうだろうか?
0205デフォルトの名無しさん2008/10/14(火) 05:27:51
>>204
ストラウストラップ教本 の方がまだ面白い
0206デフォルトの名無しさん2008/10/14(火) 06:11:35
google code search以上の物が出来るとは到底思えない
0207デフォルトの名無しさん2008/10/14(火) 09:55:11
>>204
インクリメンタルに検索できるやつにしてね。
02081642008/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環境で同様の情報を取得する方法は
ないでしょうか?


0209デフォルトの名無しさん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).

はどうかな。説明文を読む限りでは使えそうだが試したことはない。
0210デフォルトの名無しさん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
です。
0211デフォルトの名無しさん2008/10/14(火) 22:41:55
XML::Tidyじゃなくなるけど、
XML::Liberal+XML::LibXMLなんて組み合わせは?
0212デフォルトの名無しさん2008/10/14(火) 23:18:27
>>211
ありがとうございます。
試してみます。
0213デフォルトの名無しさん2008/10/15(水) 12:54:22
古いPerlのコードで
&jcode'convert(*title,'jis');
というコードがあったんですが、これってどういう意味ですか。
&jcodeのあとの「'」がわかりません。
0214デフォルトの名無しさん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をアクセスします。
0215デフォルトの名無しさん2008/10/15(水) 15:14:35
>>210
それがDOMを構築しようとするものなら、
エラーが出るのはどうしようもないのでは。

かわりにSAX系のパーサーを使えば?
XML::Parserとか。
それなりにめんどくなりそうだけど。
0216デフォルトの名無しさん2008/10/15(水) 16:47:01
http://pc11.2ch.net/test/read.cgi/prog/1221545019/168
この人小学生からperlやってるってよ
0217デフォルトの名無しさん2008/10/15(水) 18:05:05
>>214
さんくす
Perlの古い書き方だったんですね
0218デフォルトの名無しさん2008/10/15(水) 20:12:37
Perlに古いも新しいもない。
0219デフォルトの名無しさん2008/10/15(水) 21:21:12
そうですね。
>>217で書いてるのはPerlの書き方が古いか新しいかですけどね。
0220デフォルトの名無しさん2008/10/16(木) 00:57:28
律儀な人ね
0221デフォルトの名無しさん2008/10/17(金) 01:04:15
クロージャーって意味がわからんな
カンタンに説明してくれないか?
0222デフォルトの名無しさん2008/10/17(金) 03:29:24
自分で調べようともしないお前に誰が教えるもんか!
0223デフォルトの名無しさん2008/10/17(金) 03:41:29
無名の関数ですね^^
0224デフォルトの名無しさん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 ;
0225デフォルトの名無しさん2008/10/17(金) 12:55:36
>>223
違うとマジレス。

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

吊ってきます…
0235デフォルトの名無しさん2008/10/18(土) 11:04:50
Linux 上で MS word の *.doc ファイルを読み出したいんですが、何かいい方法はありますか。
Spreadsheet::ParseExcel みたいなのがないかと CPAN を探したのですが、見当たりません。
0236デフォルトの名無しさん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/
0237デフォルトの名無しさん2008/10/19(日) 06:50:02
>>236
有難うございます。やはり、perl から呼べるものはないようですね。
文書全体の読み出しだけでなく、「XXページにXXX があったら、XX+n ページに対応するXXXXがあるかチェックする」といった処理もできれば、
と思っていたのですが。それにしても Spreadsheet::ParseExcel は偉大だ…
0238デフォルトの名無しさん2008/10/19(日) 07:26:47
ハッシュが詰まった配列から、一つずつ取り出して各々に処理をしたいんですがforeachじゃ出来ませんでした。
何か良い方法ありますか?
0239デフォルトの名無しさん2008/10/19(日) 12:05:47
while each
0240デフォルトの名無しさん2008/10/19(日) 12:11:04
foreachで出来るだろ?
0241デフォルトの名無しさん2008/10/19(日) 12:27:00
>>238
そういう意味じゃないんです…

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

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

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

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


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

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

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

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

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

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

これで8年くらい確定申告の提出書類を作成してる。
いまだに国税庁のマルサは来ない。
まー奴らは俺みたいな貧乏人はスルーしてるだけだがw
0263デフォルトの名無しさん2008/10/23(木) 20:36:56
http://www.google.com/trends?q=ruby%2Cperl%2Cpython&ctab=0&geo=all&date=all&sort=0

pythonにも負けてる(藁
0264デフォルトの名無しさん2008/10/24(金) 14:43:04
PerlでCのプリプロセッサのように#ifdefでコンパイルするコードを切り替えたりとかってできませんか?
0265デフォルトの名無しさん2008/10/24(金) 14:50:59
>>264
できる
0266デフォルトの名無しさん2008/10/24(金) 14:58:18
>>264
つ-Pオプション

でもいろいろ問題あるから使わないほうがいいよ。
最終的に何をしたいのかわからないが、たいてい
使わないでできるもっといい方法がある。
0267デフォルトの名無しさん2008/10/24(金) 23:33:04
perlでアパッチのアクセスログを振り分けるってできる?
0268デフォルトの名無しさん2008/10/24(金) 23:35:36
きみの能力しだい。
0269デフォルトの名無しさん2008/10/24(金) 23:38:16
>>267
もちろんできる。できない理由はない。
0270デフォルトの名無しさん2008/10/24(金) 23:45:05
おまえらにやらせようと思ったんだけど、コード書く?
0271デフォルトの名無しさん2008/10/25(土) 01:24:17
>>270
そういうときは、報酬も書いておくと話が早く進むぞ。
0272デフォルトの名無しさん2008/10/25(土) 01:59:01
じゃあ1円
0273デフォルトの名無しさん2008/10/25(土) 07:03:27
進まねぇよ
0274デフォルトの名無しさん2008/10/25(土) 14:56:52
Perlで線形リストのようなデータの持ち方をしたいのですが、
どうすればいいでしょうか?
a->b,c a->b->d,e a->c->f,g
のような感じです
0275デフォルトの名無しさん2008/10/25(土) 16:02:27
リファレンス使えばいいのでは?
0276デフォルトの名無しさん2008/10/25(土) 16:17:22
あるいは古式ゆかしく配列を使うか
0277デフォルトの名無しさん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";
}
0278デフォルトの名無しさん2008/10/25(土) 23:08:28
>>277
とりあえずNet::Telnet使えば?
0279 ◆TWARamEjuA 2008/10/25(土) 23:10:30
cronで5分ごとに\nを送信してあげる別プロセスを作っておく。
0280デフォルトの名無しさん2008/10/25(土) 23:49:42
レスあんがあちょです

>>278
Net::telnetは

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

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

>>279
別プロセスでなく、同一セッション中で"\n"送らないとダメな気がします
って、んん?別プロから何かシグナルをこのプロセスに対して5分間隔
送ればいいのかぁーー!? そんなのできるんかな、調べてみよう
0281デフォルトの名無しさん2008/10/25(土) 23:56:55
>>280
シグナルハンドリングを知っているなら、alarmで起こせばいいだろ。
0282デフォルトの名無しさん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;      # アラーム再設定
}

0283デフォルトの名無しさん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から見えるように設定済みです。

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

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

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

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


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

で、問題は英数や文字数をチェックするルーチンはどう実装するのが理想でしょうか?
簡単なルーチンだからそれぞれのクラスにサブルーチンとして最後の行にでも書いておけ!
っていうことでもいいでしょうか?
0298デフォルトの名無しさん2008/10/28(火) 17:56:07
日本語で
0299デフォルトの名無しさん2008/10/28(火) 20:45:57
>>297
http://fleur.hio.jp/perldoc/mix/pod/perlboot.ja.html
http://perldoc.jp/docs/perl/5.8.8/perlmod.pod
http://perldoc.jp/docs/perl/5.10.0/perltoot.pod
>>2
0300デフォルトの名無しさん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;
}

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

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

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

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

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

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


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

「CGI/Perl リファレンス」

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

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

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

0329デフォルトの名無しさん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にマニュアルもあることだし。
0330デフォルトの名無しさん2008/11/04(火) 01:36:33
>>392
ありがとうございます。
言われて気づいてみたら、ppm-shellってのがあるんですね。
最近のActivePerlはGUI版PPMしか無いのかと思ってました。
0331デフォルトの名無しさん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年頃の古いものです。
0332デフォルトの名無しさん2008/11/07(金) 18:48:53
>>331
まさかファイルをエクスプローラ上でクリックして動かしてる?
それじゃダメだ
まずコマンドプロンプトを起動してそこで

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

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

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

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

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

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

ハッシュのように扱われてる特殊な配列に
重複しないキーを与えるには上記のように
書いていました。
これを一発で書くにはどう書けばいいでしょうか?
(配列をハッシュのように扱いたい。)
0340デフォルトの名無しさん2008/11/09(日) 00:51:07
for(my i=0; i<@arr;i+=2){ $arr[$i+1] = 0 if $arr[$i] eq 'SendTE' }
0341デフォルトの名無しさん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' ) ;
0342デフォルトの名無しさん2008/11/09(日) 08:37:45
ハッシュにリストを代入するときキーに相当するところに同じ値が複数あると
どれが優先されるかは決まってたっけ?

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

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

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

use Data::Dumper;

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

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

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

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

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

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

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

となってしまったこと。
0368デフォルトの名無しさん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')

馬鹿側が根拠を示すのも簡単だ。上記以外の結果を示せば良い。
馬鹿には無理だろうがな。
0369デフォルトの名無しさん2008/11/10(月) 03:06:03
いや、言語仕様と実装の話だよ。
0370デフォルトの名無しさん2008/11/10(月) 06:31:49
>>368
自尊心だけは十分育ってるようだから、次は知能と知識だね。
頑張って!
0371デフォルトの名無しさんNGNG?PLT(54321)
ネタだろ…
0372デフォルトの名無しさん2008/11/10(月) 10:20:20
まぁそういうことにしたいよな。
0373デフォルトの名無しさん2008/11/10(月) 12:47:06
__END__リテラルを含むfoo.plからexecを使うと
execしたプロセスが全部終了するまで
foo.plはロックされるものなのだろうか
0374デフォルトの名無しさん2008/11/10(月) 13:34:04
>>373
関係ないと思うよ
0375デフォルトの名無しさん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
0376デフォルトの名無しさん2008/11/10(月) 19:20:54
>>374
__END__リテラルって意味わからんので、__DATA__セクションのことなんじゃないだろうか?

ただ、プロセス寿命の話なら、ちゃんとした仕様は
たぶんなくて、実装次第+環境次第だろと思う。
だいたい、UNIXとWindowsでかなり違うよな。
0377デフォルトの名無しさん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__削ったら上書きできた。
なにゆえなのか、よくわからない…
0378デフォルトの名無しさん2008/11/10(月) 20:46:37
>>375
初心者ですが、これは襲撃でした。
自然な思考法なら、perl4の結果を期待するのではないでしょうか?
(それは、初心者だけか)
0379デフォルトの名無しさん2008/11/10(月) 20:47:15
>>378
襲撃でなく、衝撃です。
0380デフォルトの名無しさんNGNG?PLT(54321)
襲撃wwww
0381デフォルトの名無しさん2008/11/10(月) 21:35:40
常識で判断しないのがperlプログラマーだ。
perlの全てを知ってるのが訓練されたperlプログラマーだ。

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

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

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

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

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

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

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

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

ずーっと下に

右結合 = += -= *= などの代入演算子
0405デフォルトの名無しさん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)を保持している一時変数}
を渡すという違い。
0406デフォルトの名無しさん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生成
0407デフォルトの名無しさん2008/11/11(火) 18:55:47
(続き)
その後test.pl内の%hashを

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

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

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

これを santaku2.pl という名前で保存して動かす
0412デフォルトの名無しさん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;

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

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

とりあえず、問題と答えを4問分2次元配列にして、
正解数をカウントする変数をつくればできると思う
0418デフォルトの名無しさん2008/11/13(木) 01:05:45
printf ……
0419デフォルトの名無しさん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;
0420デフォルトの名無しさん2008/11/13(木) 01:36:31
情報機器の操作とやら でperlなんだね

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

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


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

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


0423デフォルトの名無しさん2008/11/13(木) 02:11:29
この程度のがわからないのならあきらめた方が良いんじゃね?
0424デフォルトの名無しさん2008/11/13(木) 02:27:03
明日の朝なら、まだ30時間くらいあるじゃない。
0425デフォルトの名無しさん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])使っちゃ駄目なのかな?
0426デフォルトの名無しさん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;

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

よく、質問を質問で返す人がいるよね。
しかも、「・・・じゃダメなの?」という言い方する人が結構多い。
なんか頭悪そう。
0431デフォルトの名無しさん2008/11/13(木) 10:57:07
自信が無いから、質問を質問で返すのかな。とにかく頭悪そうに見える。
0432デフォルトの名無しさん2008/11/13(木) 11:05:00
頭の悪さ判定師が集結中のスレはここですか?
0433デフォルトの名無しさん2008/11/13(木) 11:27:51
課題にレスしちゃうところがなんか頭悪そう。
0434デフォルトの名無しさん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";
0435デフォルトの名無しさん2008/11/13(木) 11:29:04
「東京県」に誰も突っ込まないのは頭悪すぎ
04364342008/11/13(木) 11:30:21
>>435
しまったorz
0437デフォルトの名無しさん2008/11/13(木) 11:31:14
東京大学は東京都にも千葉県にも神奈川県にもあるのに頭悪すぎ
0438デフォルトの名無しさん2008/11/13(木) 11:33:41
埼玉都ですね。わかります。
0439デフォルトの名無しさん2008/11/13(木) 11:34:14
ttp://www.campuscity.jp/misscampus/todai/kawakami/
神戸県ですね、わかります。
0440デフォルトの名無しさん2008/11/13(木) 11:38:27
本質的な部分での発言ができないので
コメントや文字列リテラルの中のスペルミスやtypoに
突っ込まざるを得ない人たちが集まるスレはここですか?
0441デフォルトの名無しさん2008/11/13(木) 11:41:17
>>430
そういう言い方しちゃダメなの?
0442デフォルトの名無しさん2008/11/13(木) 11:43:21
ここで本質とは何を指していますか?
頭が悪いので教えてください。

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

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

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

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

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

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

ってなるんだが。
0457デフォルトの名無しさん2008/11/13(木) 13:11:47
↑ こいつ最高に頭悪い
0458デフォルトの名無しさん2008/11/13(木) 13:35:50
>>2-458
すごく頭悪そう。
0459デフォルトの名無しさん2008/11/13(木) 15:09:10
>>458 チョトワロタ
0460デフォルトの名無しさん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";
04614072008/11/13(木) 16:33:58
>>408
レスありがとうございます。
規制に巻き込まれてしまい、返事が遅くなってしまいました

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

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


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

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

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

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

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

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

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

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

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

……これが>>430の結婚生活(もしあったとして)
0479デフォルトの名無しさん2008/11/14(金) 05:35:27
「夕飯何にしようか?」
「晩飯じゃないの?」
0480デフォルトの名無しさん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 すると
問題ないのですが、単一ファイル内で継承させる場合はどう書けば良いのでしょうか。
0481デフォルトの名無しさん2008/11/14(金) 06:42:23
{package Foo;
sub new { bless {}; } }
{package Bar;
@ISA = qw(Foo);}

$foo = Foo->new(); # OK
$bar = Bar->new(); # OK
04824802008/11/14(金) 07:00:38
>>481
おおお。助かりました。thanks!
0483デフォルトの名無しさん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

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

たとえば $pat = "foo[0]"; だと、/$pat/では[0]の部分を文字クラスとして処理するよう
ですが、単純に "foo[0]" という文字にマッチしてほしいのです。
0501デフォルトの名無しさん2008/11/16(日) 10:36:15
/\Q$unko\E/
0502デフォルトの名無しさん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

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

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

なにかアドバイスをお願いします。
0505デフォルトの名無しさん2008/11/17(月) 20:11:26
>>504
NFSマウント。とネタレス。
WebProg行け。とマジレス。
その質問だとperl無関係だから、いきなりperlのスレに行くなよ…。
0506デフォルトの名無しさん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も自分の環境に沿って変えているのですが出来ません。

どなたかよろしくお願いします。
0507デフォルトの名無しさん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が間違っているのでしょうか?
どなたかアドバイスお願いします。
0508デフォルトの名無しさん2008/11/18(火) 21:14:27
エラーメッセージは?
0509デフォルトの名無しさん2008/11/18(火) 21:56:41
それ以前の問題だろ…

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

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

でおk
05205062008/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
となって出来ないんです…。
0521デフォルトの名無しさん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 みたいにフルパスで指定してみてはどうか?
0522デフォルトの名無しさん2008/11/20(木) 20:16:22
require 'ファイル名';
とするときに、1つ前のディレクトリにあるファイルを指定したいのですが、どうすればいいでしょうか?
require '../ファイル名';
だとエラーがでてしまい、できません。
0523デフォルトの名無しさん2008/11/20(木) 21:40:27
>>522
1つ前の前に現在地がどこかを考えるんだ
../ や ~/ はシェルの機能なんだ
0524デフォルトの名無しさん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}しなきゃならん。
0525デフォルトの名無しさん2008/11/21(金) 02:16:40
あ。説明一行目正確じゃねえな。
「保存場所に関係無く、実行場所の ../ にあるならそれで動く。」
に訂正。
0526デフォルトの名無しさん2008/11/21(金) 03:33:20
まぁたいてい、マウスでクリックして動作させるだろうから
カレントディレクトリをスクリプトのあるディレクトリに移動させておく、とか
そういう処理が必要だろうな。
0527デフォルトの名無しさん2008/11/21(金) 06:37:05
>>522 エラーメッセージは?


05285062008/11/21(金) 13:19:05
>>521さん
返信ありがとうございます。
libdb.a
というのは前述したURLに書いてある通りに作成しました。
-Lオプションに関してはわかりません…。
確認したところ
\strawberry\perl\lib\CORE
にヘッダファイルがたくさん入ってました。
-ldbに関しては検索しているのですが、どうしてもわからないんですよね。
やはりWindowsでperl環境は無茶があるのでしょうか。
0529デフォルトの名無しさん2008/11/21(金) 17:18:30
>>528
なんか>>506のエラーは
エラー情報(version.cないよ、コンパイルエラーみたいな)っていうのは、
そのページの「CPAN で DB_File をインストール → 必ず失敗する。」のところだから
そのまま次の「config.in を修正して DB_File を手動で dmake してインストール」
にいけばいいんじゃないの? そこでLIBパス設定してるし
05305062008/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ファイルしかありませんでした。
0531デフォルトの名無しさん2008/11/22(土) 21:00:21
>>530
libdb.a はちゃんと C:\strawberry\c\lib\ にあるのかい?ってのと
↑には libdb.a という文字が登場しないなってのがあやしいかと。
0532デフォルトの名無しさん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
0533デフォルトの名無しさん2008/11/22(土) 23:43:51
x64のppmリポジトリってまだないのね。
リポジトリ追加してもパッケージ数が0で何かと思ったらそういうことか…。
05345062008/11/23(日) 01:56:00
>>531さん
解決しました!
531さんに指摘されて、libdb.aという文字が出ないのかを考えたところ、
ファイル名だけ変えていて、拡張子が変わっていませんでした。
要はlibdb.a.libというファイルでした。
なので拡張子変換ソフトを使ったところ上手くいきました!
本当ありがとうございます!
0535デフォルトの名無しさん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をしてしまって、化けバケになりました。
05365352008/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 };
と書く、などで回避しておりますが、もっとスマートな方法がないのかなと思っております。
0537デフォルトの名無しさん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じゃいかんのですか?
0538デフォルトの名無しさん2008/11/24(月) 17:33:00
O_RDONLY が定義されてないからじゃないの?
>どこのサンプルにもマニュアルにも上の通りにかいてありますが、
いったい、どこのサンプルやマニュアルを見たんだい?

おぢさんがひとつ、いいことを教えよう。
google 「perl O_RDONLY」
パソコンを買ったら、まず最初に google を覚えよう。
05395372008/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); の例が出てくるんですよね
05405372008/11/24(月) 19:49:25
自己解決しました
改めてよく読んだらperldoc.jpに「標準モジュール Fcntl 経由で」って書いてありましたね
use Fcntlで解決しました
>>537 ありがとうございました
0541デフォルトの名無しさん2008/11/24(月) 21:43:42
3×3のクロスワードを作ろうと思います。
3文字の辞書ファイルは既にあって
3×3の真ん中には「か」という文字列が入っています。
このとき、3×3のクロスワードを作成するにはどうすればよいでしょうか。

0542デフォルトの名無しさん2008/11/24(月) 21:55:33
ここって宿題の依頼もありだっけ?
0543デフォルトの名無しさん2008/11/24(月) 21:57:31
Perlにカスってもいねえし
0544デフォルトの名無しさん2008/11/24(月) 22:06:30
ゆとりは宿題はやってもらうものと考えてるからな。
0545デフォルトの名無しさん2008/11/24(月) 23:26:48
学業も仕事も他人に任せてゆとりの時間を楽しむのがゆとりの正しい姿
宿題をやる仕事を貧しい人達から奪うほど情が無いわけではありません
0546デフォルトの名無しさん2008/11/25(火) 00:33:23
やってくれって言ってないじゃん!
0547デフォルトの名無しさん2008/11/25(火) 01:34:49
メール鯖からパイプで渡された標準入力を
上手い事いじらせてくれるモジュールってあったっけ?
Net::POP3〜MIME::Parserなら分かるんだが
標準入力しか触れないの扱わんとならんorz
テキストをチマチマと拾ってくしかないのか・・・?
0548デフォルトの名無しさん2008/11/25(火) 02:15:47
日本語でおk
0549デフォルトの名無しさん2008/11/25(火) 05:36:06
>>535
WWW::Mechanizeはよく知らないんだけど
$res->decoded_content(charset => 'none');
この辺りヒントになるかも
05505322008/11/25(火) 13:39:13
mirrorじゃなくてそもそもrequest($url, $file)で$fileに取得できてないってことに気づいた。
おかげでCPANコマンドでも
Transfer truncated: only 0 out of 149396 bytes received
が出て死んでしまう。
ググっても他に同じような人出てこないし何いじってこうなったんだろう。。
05515352008/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 に要望でも出したら対応してくるのかな。
0552デフォルトの名無しさん2008/11/25(火) 14:22:15
ヘッダの情報に合わせて自分で変換してしまう
0553デフォルトの名無しさん2008/11/25(火) 17:05:16
>>551
ああ、なるほど。
deflate対応と文字コード変換がセットになってるのがややこしいんですよね。
decoded_content自体に罪は無いけど世の中のページはstrictじゃないページも沢山あるので
デフォルトオフか最低でも設定でオフに(WWW::Mechanizeから)出来るように考慮されてるべきだと思います。
>"Do we need to expose the options there?"
もちろん! というか主要な部分の挙動変えるなよって感じですが。
こういうPHP的なハマり方は耐えられません。
0554デフォルトの名無しさん2008/11/27(木) 02:04:29
>>535
WWW::Mechanizeなんてサブクラス化して使うのが当たり前だから
サブクラスで好きなように自分好みのcontentメソッド再実装したらいいよ
最近Perl使ってないので的外れなこといってるかもしれないけど
少し前まではMechanizeはそういう使い方が当たり前だった

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

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

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

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

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

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

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

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

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

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

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

ていうかオブジェクトクラスはサブクラス化することに意義があるし、そのように使われる
ことを意識して書かれてることが多い
例えば、サブクラスで実装されることを意識して空のサブルーチンを置いたりする
0560デフォルトの名無しさん2008/11/28(金) 23:28:35
画像編集だとImageMagickあたりが定番かなと思いますが、
動画だったらffmpegあたりでしょうか?
0561デフォルトの名無しさん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.

長いので一旦切ります。
05625612008/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認証のチェックは共に外してあります。
05635612008/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でアップロードできればいいのですが、なにかいい方法ご存知でしたら
ご教授いただきたく思います。

引き続きこちらでも調べて見ます。
0564デフォルトの名無しさん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点は何人。
同じように、算数と理科です。

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

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

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

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

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

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

3:出力して終了


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

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


まちがた。
$marks[0]->[90] = ['name_1', 'name2']; #つまり国語90点の人全員の名前
こうか
どうでもいいか
0570デフォルトの名無しさん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!

という風に警告を表示されてしまいました。
この警告を出さなくするにはどうしたらいいのでしょうか?
0571デフォルトの名無しさん2008/11/29(土) 16:42:37
>>570
use warnings;の一行を取っ払えば解決
05725702008/11/29(土) 16:51:02
>>571
いえ、use warningsのままどうにかならないものかと…。
0573デフォルトの名無しさん2008/11/29(土) 17:02:05
<>を使うのをやめる
0574デフォルトの名無しさん2008/11/29(土) 17:02:50
>>570
defined $1
0575デフォルトの名無しさん2008/11/29(土) 17:03:18
パターンマッチしたならその結果を見てやれよw
0576デフォルトの名無しさん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' が来る筈ない場所だしなあ。
0577デフォルトの名無しさん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[$_]);
}
05785702008/11/29(土) 19:06:42
>>573-576
ご教示ありがとうございます。
色々やり方があるんですね。if文の()内を(defined($1))にしたら警告が消えました。
0579デフォルトの名無しさん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}};
}
}
0580デフォルトの名無しさん2008/11/30(日) 00:12:06
ここ宿題スレじゃないんだけど
0581デフォルトの名無しさん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
の全部に一括して処理するにはどう書けばよいでしようか
0582デフォルトの名無しさん2008/11/30(日) 13:07:12
for ( @ARGV ){
 open IN, $_ ;
 # 略
 close IN ;
}
0583デフォルトの名無しさん2008/11/30(日) 13:12:18
for ( @ARGV ){
 open IN, $_ ;

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

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

すみません バカで。
0587デフォルトの名無しさん2008/11/30(日) 14:26:34
わからない七大理由
1. 読まない ・・・説明書などを読まない。読む気などさらさらない。
2. 調べない ・・・過去スレ、ググるなど最低限の内容も自分で調べようとしない。
3. 試さない ・・・めんどくさいなどの理由で実行しない。する気もない。
4. 理解力が足りない ・・・理解力以前の問題で理解しようとしない。
5. 人を利用することしか頭にない ・・・甘え根性でその場を乗り切ろうとする。
6.感謝しない・・・教えてもらって当たり前。事がすんだらさようなら。
7.逆切れする・・・自分の思うようにならないと逆切れする。
0588デフォルトの名無しさん2008/11/30(日) 14:45:12
>>586
henkan60.plとかの名前で上の1行を保存
perl henkan60,pl
で、実行。
試してないんで、うまくいかなくてもかんべんな。
0589デフォルトの名無しさん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です
誘導でもかまいませんので、ヒントをください。
05905882008/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);
}
0591デフォルトの名無しさん2008/11/30(日) 15:10:35
>>589
Windows なら
binmode OUT;
で成功するかも
0592デフォルトの名無しさん2008/11/30(日) 15:13:33
591さん
早速の回答ありがとうございました。

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

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

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

と

my $q = CGI->new();

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

つーことで、new の時はどっちでもいいじゃね?method 呼ぶ時に
間接オブジェクト記法したら「変態さんがいる!」って言われるかも
しれんけどさ。
05965942008/12/02(火) 21:18:55
>>595
なんと!ありがとうございます。
Perlのオブジェクト関係はもっとキチンと勉強せねば…。
0597デフォルトの名無しさん2008/12/02(火) 21:20:58
感嘆詞のニュアンスが微妙な気がしなくもないこともなくはないんだが。
0598デフォルトの名無しさん2008/12/02(火) 21:34:11
変態さんにびっくりしたのでは
0599デフォルトの名無しさん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 ;
0600デフォルトの名無しさん2008/12/02(火) 22:24:05
確かにこれならMな変態さんと呼ばれても仕方ないな
0601デフォルトの名無しさん2008/12/02(火) 23:34:03
なんと!スープです
0602デフォルトの名無しさん2008/12/03(水) 07:46:58
>>595
「後方互換」てーのは語弊がある書き方だな、、と自己レス
perlobj の "Indirect Object Syntax" の項に説明がある。
0603デフォルトの名無しさん2008/12/03(水) 12:49:12
関数呼び出しの時に & つけたりつけなかったり
なんなんですか?
0604デフォルトの名無しさん2008/12/03(水) 13:26:44
>>603
http://www.kt.rim.or.jp/~kbk/perl-5.8/perlfaq7.html#what_s_the_difference_between_calling_a_function_as__foo_and_foo__
http://perldoc.jp/docs/perl/5.10.0/perlsub.pod
0605デフォルトの名無しさん2008/12/03(水) 13:54:41
>>604
ありがとうございました。

よくわかりませんでしたが・・・。付けるに超したことはないのかな。
0606デフォルトの名無しさん2008/12/03(水) 15:36:25
>>605
組込み関数を全て覚えてて関数名ダブらない自信があるんなら付けてなくてもいいけど、
それまでは付けた方が良いってリャマの人が言ってた!
アンパーサンドなしじゃ関数名がダブったら組込み関数の方を呼びに行っちゃうからね。
0607デフォルトの名無しさん2008/12/03(水) 17:05:47
PBPでは付けるなって言ってるな。
(サブルーチンのリファレンスが欲しい時以外)
0608デフォルトの名無しさん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
0609デフォルトの名無しさん2008/12/03(水) 17:43:06
いや普通は付けないが
Perl初心者は慣れるまでは付けるようにしておけ、
という事だよリャマ本
0610デフォルトの名無しさん2008/12/03(水) 18:52:12
バッドノウハウ論議って楽しいよな
0611デフォルトの名無しさん2008/12/03(水) 21:10:02
初心者っぽく見えるから俺はつけない
0612デフォルトの名無しさん2008/12/03(水) 22:10:49
シンタックスハイライトのついたエディタ使えば組み込みとダブるなんて
意識して書かない限りやらないだろ・・・
0613デフォルトの名無しさん2008/12/04(木) 12:16:49
>>608

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

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

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

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

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

短くないな…
0631デフォルトの名無しさん2008/12/06(土) 20:39:27
ちょっと挑戦してみた
短くするのは難しいな
print(map{$_%2?$_:" "}1..99);
06326212008/12/06(土) 22:48:51
>>631
mapは最初使ってましたけどforのほうが短くできることに気付いてforにしました
あと一行だけの場合はセミコロンなしでも動くので省いてますw
0633デフォルトの名無しさん2008/12/06(土) 22:54:53
{print$i++&1?" ":$i;redo if$i<99}
↑くらい狂ったコードとか書いてくんなきゃ突っ込み所も何も無い。
コードゴルフで遊ぶなら最低FizzBuzzくらいのお題にしてくんなきゃ、やる気も出ない。
0634デフォルトの名無しさん2008/12/06(土) 22:56:32
>>633
そういうときは、やらないといいです!
0635デフォルトの名無しさん2008/12/06(土) 22:58:48
>>634
ま、そうだねw
本当のレスは「食傷気味なんだよ空気読め!」だったんだけど
それじゃキツイかなと思って適当に書いただけだから。
0636デフォルトの名無しさん2008/12/06(土) 23:01:10
広がりも何も無いしねえ。
0637デフォルトの名無しさん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);
0638デフォルトの名無しさん2008/12/06(土) 23:20:00
>>637
>>581からの流れを読めば?
0639デフォルトの名無しさん2008/12/06(土) 23:39:19
>>637
日本語の文字置き換えが少し面倒だな
while(<*.txt>)でテキストファイル名を読み出してopen
ファイル名変えるのはrename使えば出来る
0640デフォルトの名無しさん2008/12/06(土) 23:40:56
>>637
use File::Slurpして
@files = read_dir(ディレクトリ)して
条件に合うファイル名に対し、renameすればいい。
0641デフォルトの名無しさん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;
}

0642デフォルトの名無しさん2008/12/07(日) 12:54:11
>>641
やってみたら、元のファイルが無くなってました
元のファイルも新ファイルも両方残す設定にはどうすればいいでしょう?
06436412008/12/07(日) 13:02:53
>やってみたら、元のファイルが無くなってました
>元のファイルも新ファイルも両方残す設定にはどうすればいいでしょう?
無くなったというか元のファイルの名前を変えただけなんだけど
複製したいなら
ues File::Copy;
も追加してrenameだったところをcopyに変えればいいよ
0644デフォルトの名無しさん2008/12/07(日) 13:30:43
>>643
笑
0645デフォルトの名無しさん2008/12/07(日) 15:28:28
>>643
ありがとうございました できました。
0646デフォルトの名無しさん2008/12/07(日) 15:31:04
アレでいいのかよ?元ファイルは上書きされてんだぞ?
06476412008/12/07(日) 16:01:05
>>646
あっ!しまった 
06486412008/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;は必要ないです
0649デフォルトの名無しさん2008/12/07(日) 22:29:47
[\d\D]ってなんか意図あるの?

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

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

my @a = <STDIN>;

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

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

$dbh->{mysql_enable_utf8} = 1;

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

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


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

これのことか。これはひどいな。
0663デフォルトの名無しさん2008/12/08(月) 19:55:14
>>660
ありがとうございます。2年前に書いたコードをメンテナンスしてるのですが、
mysql_enable_utf8 については、2年前にさんざん調べて、
結局ガセネタだとわかったので、今回もdocumentを読めと言われて
「またmysql_enable_utf8か・・・それ、もうとっくに試した。」とハヤトチリしてしまいました。
DBD-mysql のバージョン4.005が出ているのでアップデートしたら、すんなりOKでした。
0664デフォルトの名無しさん2008/12/08(月) 20:14:30
「2006年12月24日リリースの DBD-mysql4.0XX 系」を
「二年前にさんざん調べた」とかは瑣末な事だからどーでも良いけど
( mysql_enable_utf8 は 4.0XX 系から)
cpan の View Bugs で
- バグかどうか。
- それが解消されたかどうか。
くらいは把握したら?
0665デフォルトの名無しさん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 ...
といっぱい出力されるんだけど何でだろう?
0666デフォルトの名無しさん2008/12/08(月) 21:29:04
intの問題では無い。浮動小数点の丸め誤差
perl -le ' print 7 == ( 0.05 +0.02) * 100'
これは1が帰ってこない。
0667デフォルトの名無しさん2008/12/08(月) 21:46:48
>>667
バーカ、リリースされたのは2007年7月だよ。しね
0668デフォルトの名無しさん2008/12/08(月) 22:22:22
jun = 六月、jul = 七月
ttp://search.cpan.org/~capttofu/DBD-mysql-4.010/ # Other Releses
ttp://osdir.com/ml/lang.perl.modules.dbi.sybase.devel/2006-12/index.html#00020
ttp://www.archivum.info/perl.dbi.dev/2007-06/msg00006.html
0669デフォルトの名無しさん2008/12/08(月) 23:03:03
笑い死にしそう
0670デフォルトの名無しさん2008/12/09(火) 00:24:36
>>656
definedでよくない?
0671デフォルトの名無しさん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
0672デフォルトの名無しさん2008/12/09(火) 03:32:42
ttp://mat.blogdns.com/up/img/mat_007.jpg
ttp://mat.blogdns.com/up/img/mat_008.jpg
ttp://mat.blogdns.com/up/img/mat_009.jpg
ttp://mat.blogdns.com/up/img/mat_010.jpg
ttp://mat.blogdns.com/up/img/mat_011.jpg
ttp://mat.blogdns.com/up/img/mat_012.jpg
ttp://mat.blogdns.com/up/img/mat_013.jpg
ttp://mat.blogdns.com/up/img/mat_014.jpg
0673デフォルトの名無しさん2008/12/09(火) 05:03:10
モダンパールとやらはどこにいったら覚えられるのでしょうか

http://perl-users.jp/modern_introduction_perl/
ここもいくら待っても目次しかないんだけど
0674デフォルトの名無しさん2008/12/09(火) 06:06:55
>>673
そこはね、おまえが書くために用意されているんだよ。
0675デフォルトの名無しさん2008/12/09(火) 11:32:04
>>673
この辺からたぐってみるといいかもね。
http://b.hatena.ne.jp/entrylist?url=http://perl-users.jp/
0676デフォルトの名無しさん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 には先頭の値しか残っていない
}
06776762008/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}}; ←連想配列で型キャスト
}
0678デフォルトの名無しさん2008/12/11(木) 12:44:47
�@入力ファイルを読みこむ
�A特定の文字列があったら、その行のそれ以降の文字を出力ファイルに出力
�B�Aをしたら次の行の大文字を出力ファイルに出力
�B特定の文字列があったら、その行のそれ以降の文字を出力ファイルに出力
�C�Bをしたら次の行の大文字を出力ファイルに出力

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

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

そーすると、まさに>680の言う「まんまやれ」になる。
0686デフォルトの名無しさん2008/12/11(木) 20:45:18
まんまやれ、っていい言葉だな。
プログラミング中に机の前に張っておきたい。
0687デフォルトの名無しさん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;
0688デフォルトの名無しさん2008/12/11(木) 22:23:39
>>685
やることは何とかわかってきたけど、やらないといけないことが多すぎるし、自分にわかりやすいサイトがないから勉強しにくいし、具体的にどう記述すればいいのかがよくわからないんだorz

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

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


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

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

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




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

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

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

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

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

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

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

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

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

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

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

例えば、82a0から82afまでの32バイトを出力したいとすると、
どう書くのが楽ですか
0729デフォルトの名無しさん2008/12/14(日) 19:37:31
これがおかしいってことを指摘されてるのに気づけ。
$a = \x82a0;
0730デフォルトの名無しさん2008/12/14(日) 19:49:01
非常に回りくどいです
頭悪いですね
0731デフォルトの名無しさん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
0732デフォルトの名無しさん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);
}
0733デフォルトの名無しさん2008/12/15(月) 01:51:07
packは奥が深いんだぜ。

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

どちらも全く同じこと?違いがありましたら教えて下さい。
0739デフォルトの名無しさん2008/12/16(火) 01:11:10
(1)って表記方法を初めて見たんだけど、これちゃんと動くの?
0740デフォルトの名無しさん2008/12/16(火) 01:23:03
「自分で試すのは、下層民のやること」
0741デフォルトの名無しさん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; だろう。
文脈に沿って選べばいいよ。
0742デフォルトの名無しさん2008/12/16(火) 03:35:44
>>741
文盲?
0743デフォルトの名無しさん2008/12/16(火) 06:16:20
>702
Windowsがカスなだけ
07447382008/12/16(火) 09:08:31
>>739
動きますね。
しかし、(1)は一般的ではないということでしょうか。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

そのへんを全部面倒見てくれるパッケージが無いかな、というのが
最初の質問です(>>750)
0762デフォルトの名無しさん2008/12/18(木) 18:55:06
面倒見るって言っても、どのurlにどういう内容をどういう名前でpostするか、
みたいなのはバラバラだから、結局調べることになるのか
0763デフォルトの名無しさん2008/12/18(木) 19:10:40
>>761
ブラウザが持ってるクッキー情報をどうやってperlから読んでるわけ?
何もしないと勝手には読んじゃくれませんよ。
0764デフォルトの名無しさん2008/12/18(木) 19:14:09
それは、
Documents and Settings\user\Cookies
のとこにある奴を
手作業で
0765デフォルトの名無しさん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の丸コピー
0766デフォルトの名無しさん2008/12/18(木) 22:26:48
そろそろ誰かWWW::MixiみたいにWWW::Pixivとか書いたらいいのに
0767デフォルトの名無しさん2008/12/18(木) 22:46:26
>>766
おまえがやってヒーローになれ
0768デフォルトの名無しさん2008/12/19(金) 02:17:12
Hoge/Fuga.pm な奴に package Fuga; と書いても package Hoge::Fuga; と書いても動作が同じでしたが、
これは前者が後者の省略した記述に過ぎないという事なのでしょうか?
それとも、何か動作上の違いがあるのでしょうか?
0769デフォルトの名無しさん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__
0770デフォルトの名無しさん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エンコード…パーセントエンコード?するように作られているだけ、とか。)

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

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

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

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

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

0795デフォルトの名無しさん2008/12/25(木) 07:50:00
>>790
改行またがりとかきをつけるよろし
0796デフォルトの名無しさん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;'
07977962008/12/26(金) 02:13:22
文字クラスと^の存在を忘れていました。
m|/([^/]*?)\.txt$| でOKですね…ごめんなさい。
正規表現の"."は"/"に対応していないのでしょうか、よく分かりません。
0798デフォルトの名無しさん2008/12/26(金) 04:00:05
>>796
File::Spec
0799デフォルトの名無しさん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 なければ (のつもり)
0800デフォルトの名無しさん2008/12/26(金) 11:05:33
「if ($a)」
と
「$a あれば」
について考えてみるのだor説明してみるのだ
0801デフォルトの名無しさん2008/12/26(金) 11:08:40
$a $b $c の内容がわからないからなんとも
0802デフォルトの名無しさん2008/12/26(金) 11:11:35
>>796
最短マッチは「前から」調べて、一致したら(それ以上チェックせずに)、そこでおしまい。

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

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

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

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

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

ファイル名展開の場合、対象がファイルだから / はまたがない
だから正規表現でファイル名を抜き出す場合も、そういうのを期待したんじゃないかね
0806デフォルトの名無しさん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しない)とかが知りたんだけど・・・。
0807デフォルトの名無しさん2008/12/28(日) 14:45:21
PerlのConfugureは対話形式だから、その都度説明が出るだろ
0808デフォルトの名無しさん2008/12/28(日) 21:45:56
>>806
perl -V
0809デフォルトの名無しさん2008/12/29(月) 04:25:45
chompとか置換とかって、その結果を別の代入する方法はあるでしょうか。

普通に書くと、

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

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

0810デフォルトの名無しさん2008/12/29(月) 04:37:38
chomp(my $text2=$text1);
0811デフォルトの名無しさん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.
と表示されてしまい、エラーとなってしまうのですが、どうすれば
良いのでしょうか?
0812デフォルトの名無しさん2008/12/29(月) 17:47:04
perl -wl e- "print 10;"

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

JPerl Advent Calendar 2008
http://perl-users.jp/articles/advent-calendar/2008/
0814デフォルトの名無しさん2008/12/30(火) 13:24:21
それはそもそも日程の問題であって、
perlとは何も関係ない。
0815デフォルトの名無しさん2008/12/30(火) 20:47:06
(,),[,]が文字列の中に1個以上あった場合、それぞれ\(,\),\[,\]に変換するしたいのですが
例)
(test)perl]→\(test\)perl\]みたいに感じ
これをスマートに書きたいのですが、うまく書くことができません
ヒントをください
0816デフォルトの名無しさん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;
08178162008/12/30(火) 21:10:59
あー。
× (?=[()\]])
○ (?=[()[\]])
08188152008/12/30(火) 21:18:18
>>816
ありがとうございます
頑張ってやってみます
0819デフォルトの名無しさん2008/12/31(水) 20:07:01
>>815
\Q
0820デフォルトの名無しさん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
---------ここまで----------------------------
08218202009/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は無視してください。
08228202009/01/01(木) 13:45:24
このログは「hydraoc」と「state」という2種類のログが
合わさったものと考えてください。(上4行がhydraocログ、下8行がstateログ)

質問ですが、Perlを使って、"cpp"のある行だけを抜き出すスクリプト
は書けるのですが、5行目から下全部の合計8行をファイル出力する
Perlスクリプトを作成することは可能でしょうか?
0823デフォルトの名無しさん2009/01/01(木) 13:50:44
sed なら 1,4d だけど・・・
perl だと、そのファイルを open して、不要な行を読み飛ばせばいいんじゃないかな。
0824デフォルトの名無しさん2009/01/01(木) 13:51:12
可能です。
私には
>(1010)Is this SBS server No
>(1011)IsStandAloneSetup = Yes
>IsFreshInstall = No
がどちらのログか判断する根拠がありませんが、あなたにはあるのですよね?
それをプログラムに教えてあげましょう。
08258202009/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
-------------------------------------

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

0826デフォルトの名無しさん2009/01/01(木) 16:11:24
hydraocログって、先頭が'hydraoc'から始まるってこと?なら、
print unless /^hydraoc/;
で終わりだが。
08278202009/01/01(木) 18:48:21
>>826
ありがとうございます。上のログでは、hydraocログの部分は
各行に"hydraoc"が含まれるので、print unless /^hydraoc/;と
やれば"hydraoc"が含まれる行以外の行を出力、となるのは
初心者の私にもわかります。ただ実際に先輩から出された課題は
"hydraoc"ログ部分に"hydraoc"が存在しない行も含まれます。
上で出した私の事例が不適切でした。ネットや書籍でも調べましたが、
やはり「キーワード"state"を見つけたら、そこから後のすべての行を出力」
みたいな処理は書けませんかね?
0828デフォルトの名無しさん2009/01/01(木) 19:06:13
>>827
プログラム言語なんだから、書けないわけないだろ。一体何を言ってるんだ?
0829デフォルトの名無しさん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
0830デフォルトの名無しさん2009/01/01(木) 23:41:22
ようするにぃ、820 はぁ、perl の文法を全く知らないっ・・・と。
ファイルのopenの仕方、読み込み方、closeのしかた。
全て何も知らない。全く知らない。
もちろん、本を買って勉強する気などサラサラ無い。
ネットで検索する気もぜ〜んぜん無い。
教えてくれ、教えてくれ!を連発するだけで問題が解決すると考えている。
もしかしたら perl どころか、他のプログラミング言語を全く知らない可能性もあるな。
0831デフォルトの名無しさん2009/01/01(木) 23:45:09
Perl始めるなら「Perl言語プログラミングレッスン」がオススメ。
それ読んだら「ラクダ本」にいけば良いよ。
08328202009/01/01(木) 23:53:43
>>830
まだ勉強始めたばかりだけど少しなら知ってる。
C#勉強中。
open(OPENFILE >>"xxx.txt")とか、ファイルハンドル使用して
ファイルを読み込んだりファイルに書き込んだりは出来る。
本はリャマ本を半分くらい読んだ。
>>829だと、hydraocが4行分出力されてるので×。
なあ、鼻くそチンカス、>>830、テメーしばくぞカスが。
誰にモノ申しとんじゃワレ。
0833デフォルトの名無しさん2009/01/01(木) 23:56:06
>>829
DATAセクションってマイナーだよね?
あんまり人に通じない気がする。
0834デフォルトの名無しさん2009/01/01(木) 23:58:26
マイナーというかDATAはあまり使用しない気がするんだが。。。
書く人の好みによると思うけどさ
0835デフォルトの名無しさん2009/01/02(金) 00:00:26
>>824で全てだと思うんだがなあ

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

× 勘違いしました
○ 決めつけました
0853デフォルトの名無しさん2009/01/02(金) 19:40:01
>>841 を読んで、「何言ってんだろう」と思ったけど、
>>851 見ると、大当たりだな。
それにしても820よ。本当にこれでいいのかい。
>>829 は「>>827 に書かれた要望」には忠実だが、
本当にこれが欲しかったものなのかどうか、
よく意味を考えて自分で判断しないとな。
0854デフォルトの名無しさん2009/01/02(金) 19:52:46
いいんじゃない?本人が納得したんだから。
どうせ、な〜〜んにも考えてないやろ。
0855デフォルトの名無しさん2009/01/02(金) 21:13:08
Perl使う奴は心の捻じ曲がった奴が多いんだろうな。
言語仕様から捻じ曲がってるし。
0856デフォルトの名無しさん2009/01/02(金) 21:23:55
>>855
まったくその通りだと思う。Perlなんかさっさと忘れた方がいいよ。
0857デフォルトの名無しさん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
0858デフォルトの名無しさん2009/01/02(金) 23:30:02
>>857
残念。課題を100回読んでから出直して来い。
0859デフォルトの名無しさん2009/01/02(金) 23:38:09
まったくもう。これだからフローチャートの書けないヤツは・・・
0860デフォルトの名無しさん2009/01/02(金) 23:58:37
シンボリックリファレンスなんか使うなよ
0861デフォルトの名無しさん2009/01/03(土) 00:27:10
先週乗った電車で、Perl使いがお婆さんに席譲ってる所見かけた
0862デフォルトの名無しさん2009/01/03(土) 01:12:03
それはよく訓練された性格悪いPerl使いだ。
0863デフォルトの名無しさん2009/01/03(土) 01:34:17
perl 使いは、紫外線を当てるとオデコに perl と文字が浮かぶからすぐわかる。
0864デフォルトの名無しさん2009/01/03(土) 14:12:40
家は当然パールライス食ってるよ。
0865デフォルトの名無しさん2009/01/03(土) 15:27:45
「今年こそ良い年になりますように」景気回復や家族の幸せを祈り、明治神宮では
大みそかの深夜から参拝する人が玉砂利の参道に列をなした。
警察庁によると、明治神宮の正月三が日のPerl使いの人出予想は305万人。
0866デフォルトの名無しさん2009/01/03(土) 16:49:03
参拝に来ていたPerl使いの声
「(何をお願いしたんですか?)今年こそPerl6がリリースされますように、とお願いしました」(20代女性、Perl暦2年)
0867デフォルトの名無しさん2009/01/03(土) 16:59:56
そいや、今年もPHP5.3出そうにないね
0868デフォルトの名無しさん2009/01/03(土) 17:03:49
Perlでゲーム作れますか?
0869デフォルトの名無しさん2009/01/03(土) 17:26:11
>>868
プログラム言語なんだから、作れないわけないだろ。一体何を言ってるんだ?
0870デフォルトの名無しさん2009/01/03(土) 17:44:27
ゲームのジャンル次第だがPerlで十分作ることができる。
しかしプログラミング言語だからというのはいい過ぎ。
$ unkoc -o unko
$ ./unko
うんこ食う
$
みたいな空文字を入力記号として決まった出力を行うプログラムを生成するUNKO言語だとゲームは作れそうにない。
0871デフォルトの名無しさん2009/01/03(土) 19:23:06
>864
ふと 「おなかぺっこぺこだおう」 という言葉を思い出した
0872デフォルトの名無しさん2009/01/03(土) 21:15:50
Perlでプログラムを作りましたが実行できません
どうやれば実行できるんですか?
さっぱり判りません
0873デフォルトの名無しさん2009/01/03(土) 21:20:08
ググレカス
0874デフォルトの名無しさん2009/01/03(土) 21:32:08
>>872
perl *.plとコマンドを打って実行しなさい
Windowsの場合はActivePerl入れればよし、*nixの場合は普通Perlは入ってる
あなたが今から使うとコマンドはperlだけで、場合によってはcdを使うかもしれない
0875デフォルトの名無しさん2009/01/03(土) 21:33:10
くぐっても、なぜか実行方法を記したサイトがありません
これではいくらプログラムの作り方を理解しても意味がない
なんなんですかこれ
0876デフォルトの名無しさん2009/01/03(土) 21:47:46
perldoc
コマンドを実行してみるとよろし
0877デフォルトの名無しさん2009/01/03(土) 23:21:59
ルーミィしゃんがいるデシ。
0878デフォルトの名無しさん2009/01/03(土) 23:58:21
>>875
perl 実行 windows で、ぐぐったらインストール方法から一通り出たぞ。
まさかLinuxやBSDを使ってる訳は無いよな?
0879デフォルトの名無しさん2009/01/04(日) 00:20:30
ちょっと質問させて下さい。
cgi掲示板を連ねてレンタル掲示板を作ろうかと検討しています。

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

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

全てに共通した広告を出す。
また、広告の修正なども、1つを修正すれば全てに反映されるようにしたい。
0880デフォルトの名無しさん2009/01/04(日) 00:23:50
>>879
>>845
>>846
0881デフォルトの名無しさん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
0882デフォルトの名無しさん2009/01/04(日) 01:08:33
>>864 好きな魔王はパールクール
0883デフォルトの名無しさん2009/01/04(日) 01:21:35
俺はベル様が好きなんだ・・・。
08848822009/01/04(日) 01:23:40
(なんでこの速度でレスが付くんだ……
0885デフォルトの名無しさん2009/01/04(日) 01:34:52
正月休みで暇を持て余しているのだろう。
0886デフォルトの名無しさん2009/01/04(日) 08:29:58
すいません多分素人くさい問題だと思うんですが質問させてください
openで対象ファイルがみつからなかったときの処理なんですが

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

として失敗時に$nferrorを1にしたいだけなんですが、
この一行入れただけでどうしてもエラーになります
何故でしょう?
0887デフォルトの名無しさん2009/01/04(日) 08:34:34
open(TEST,"$adr\.cgi") || ($nferror = 1);
open(TEST,"$adr\.cgi") or $nferror = 1;
0888デフォルトの名無しさん2009/01/04(日) 08:56:03
>>887
ああ・・・なるほど
なんかそういうあれだったんですね
上手く行きました。ありがとうございました
・・・なんかガックリ疲れた・・・
0889デフォルトの名無しさん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なんかがオススメ。
0890デフォルトの名無しさん2009/01/04(日) 11:55:29
スレ違いの話題続けるなよ
0891デフォルトの名無しさん2009/01/04(日) 12:08:40
>>888
「なんかそういうあれ」って何か知ってる?
「演算子の優先順位」な。
perl がエラーを吐かずに動く場合もあるから、
きちんと覚えておかないと、どつぼに嵌るぞ。
0892デフォルトの名無しさん2009/01/04(日) 19:18:03
>>891
すっごい勉強になりました
どうもどうも
0893デフォルトの名無しさん2009/01/04(日) 22:50:41
ttp://oshiete1.goo.ne.jp/qa4602153.html
0894デフォルトの名無しさんNGNG?PLT(54324)
ワラタ
0895デフォルトの名無しさん2009/01/05(月) 02:13:17
掲示板自体は完成してるんですが、
掲示板の管理画面から設定を変えるというのはどうやって作れば良いんでしょう?

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


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

具体的に分かりやすく教えて下さいませ。
また、お勧めの書籍などありましたら宜しくです。
0896デフォルトの名無しさん2009/01/05(月) 02:21:38
>>895
単に掲示板の設定ファイルとcgiファイルを分離してるだけ
0897デフォルトの名無しさん2009/01/05(月) 03:00:51
OSのソースをいじらなくても環境をカスタマイズできるようなもの。
0898デフォルトの名無しさん2009/01/05(月) 03:06:01
>>897って>>895?それとも別人?
IDないしよく解らんな…
0899デフォルトの名無しさん2009/01/05(月) 03:14:36
なんで同一人物だと思うの?
0900デフォルトの名無しさん2009/01/05(月) 03:20:24
違うならいいんだ。忘れてくれ。
0901デフォルトの名無しさん2009/01/05(月) 10:58:30
PerlCriticって何?
0902デフォルトの名無しさん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' );
0903デフォルトの名無しさん2009/01/05(月) 19:16:03
XREAサーバにて
KCatch.pmがうまく働いてくれないのですがCGI::Carp qw(fatalsToBrowser)を使わないといけないのでしょうか?
という質問をしようとおもったら。

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

原因はなんなんでしょうか?
0904デフォルトの名無しさん2009/01/05(月) 21:28:47
>>903
http://digit.que.ne.jp/work/wiki.cgi?Perl%E3%83%A2%E3%82%B8%E3%83%A5%E3%83%BC%E3%83%AB%2fKCatch#i2
http://perldoc.jp/docs/perl/5.10.0/perldebtut.pod
0905デフォルトの名無しさん2009/01/05(月) 21:43:18
回答者さんたちに質問です。
簡単な質問はもとより、何解な質問にも答えを導き出していますが、その知識はどこで身につけたのでしょうか?
0906デフォルトの名無しさん2009/01/05(月) 22:13:03
Google
0907デフォルトの名無しさん2009/01/05(月) 22:23:04
>>905
板違い。
http://pc11.2ch.net/prog/
http://okwave.jp/
0908デフォルトの名無しさん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
0909デフォルトの名無しさん2009/01/05(月) 23:42:36
>>905
真上で質問してる俺がいうのもなんだけど
壁にぶつかったときとかに、この記事読むとホっとするよ、そんでフツフツと燃えてくるw

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

print if /^state/ .. '';

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

スカラーコンテキストの「..」演算子の意味を理解すればいいと思うよ。
0913デフォルトの名無しさん2009/01/06(火) 13:49:23
>>912
「空文字」を指定しているのはわかります。
(最初は改行文字の指定の\nを省略したものだと思いましたが。)
でも範囲演算子「..」の後に空文字指定ってどういうロジック?
「空文字が見つかるまで」というロジックなのか、
「空文字もすべて」ということなのか、判断がつきません。
上のif文のロジックを言葉で説明してくれませんか?
0914デフォルトの名無しさん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>
09159142009/01/06(火) 14:23:25
アゲてしまいすいません
0916デフォルトの名無しさん2009/01/06(火) 14:24:06
>>913
912じゃないけど、本をよく読みなよ。
「/^state/ .. ''」は「/^state/」が真になった後に「''」が真になるまで
真を返すわけだが、「''」は真にならないので、「/^state/」が真になった後、
「/^state/ .. ''」は常に真になる。
0917デフォルトの名無しさん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.
0918デフォルトの名無しさん2009/01/06(火) 14:29:48
>>914
splitのエントリに書いてある
09199142009/01/06(火) 14:44:37
ありがとうございます。
split(' ')だけ特別なのですね。
0920デフォルトの名無しさん2009/01/06(火) 15:00:05
>>916: 本を読みなといいつつ親切に噛み砕いて説明
>>917: マニュアルを代わりにひいてペースト
>>918: マニュアルのここに書いてある、だけ

次に「マニュアル読め!」が来たら完璧だったのに。
0921デフォルトの名無しさん2009/01/06(火) 15:09:57
最近、偉人ググレカス見かけないな
0922デフォルトの名無しさん2009/01/06(火) 20:32:29
今の人は、すぐググっちゃうからね
0923デフォルトの名無しさん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)) とやるのと似た手はないでしょうか。
0924デフォルトの名無しさん2009/01/08(木) 12:05:10
>>923
CPANでcloneをキーワードに検索するとそれっぽいのがいくつか
出てくるので好きなの使え
09259232009/01/08(木) 12:15:57
おお thx
0926デフォルトの名無しさん2009/01/09(金) 10:39:22
use Storable; Storable::dclone($p) がオススメ。
0927デフォルトの名無しさん2009/01/09(金) 12:25:44
>>923
Data::Dump::dumpして、evalするのはどうだろうか?
0928デフォルトの名無しさん2009/01/09(金) 12:29:38
…んな事までするくらいだったら普通に
my $q = [ @{$p} ] ;
で良いだろーに
0929デフォルトの名無しさん2009/01/09(金) 21:05:29
>>928
アウト。

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

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

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

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

こんなのがあったとき、$cはどうなりますか?
0946デフォルトの名無しさん2009/01/11(日) 13:41:40
クイズ?
0947デフォルトの名無しさん2009/01/11(日) 13:42:37
うんでf
0948デフォルトの名無しさん2009/01/11(日) 14:57:39
ワンライナーも自分で確かめないこんな世の中じゃ
0949デフォルトの名無しさん2009/01/11(日) 15:23:18
splitは引っ掛けで、変数名($a,$bと$cの違い)に関するクイズ?
0950デフォルトの名無しさん2009/01/11(日) 16:19:18
>>942
逆にユーザー会なんてないものが規格や競争に買っている証なのかもしれんね。
Perlだけでなく。OSとかも。
0951デフォルトの名無しさん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 的な関数が 数十から百くらいになる予定なので
統一的な呼び出し方にしたいのです。
0952デフォルトの名無しさん2009/01/11(日) 21:05:23
>>951
評価順序がこうだから

($self->{$func_name})->($argv);
0953デフォルトの名無しさん2009/01/11(日) 22:22:09
>>952
簡潔なレスありがとうございます。
いまいち理解できてないので、もうちょい調べてみます。
0954デフォルトの名無しさん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__
0955デフォルトの名無しさん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
0956デフォルトの名無しさん2009/01/12(月) 11:30:27
無料ホームページでCGIを使ってみたんですが
CGIに対しても広告が表示されてしまうので困っています
なんとかなりませんか?
0957デフォルトの名無しさん2009/01/12(月) 11:45:06
>>1
0958デフォルトの名無しさん2009/01/12(月) 13:23:25
>956
言っとくけど、WebProgのPerlスレも違うからな
0959デフォルトの名無しさん2009/01/12(月) 17:48:21
>>956
日本語わかる?
0960デフォルトの名無しさん2009/01/12(月) 19:14:51
>>956
スレチだが、完璧な解決方法を教えよう。
有料ホームページを使え。
0961デフォルトの名無しさん2009/01/12(月) 23:50:09
>>956
貧乏スレにでもいけ
0962デフォルトの名無しさん2009/01/13(火) 00:45:11
>>956 大丈夫。Perlはちょこっといじるのもやりやすいから、覗いてみたらいかが。
0963デフォルトの名無しさん2009/01/13(火) 10:23:53
>>962
普通はmod_layoutとかのサーバサイドじゃないかね
直接は書かないと思う
0964デフォルトの名無しさん2009/01/14(水) 01:27:42
軽くておすすめのエディタ教えて下さい
perlとちょっとしたflashのasくらいしか書きません
0965デフォルトの名無しさん2009/01/14(水) 02:43:03
vi か メモ帳
0966デフォルトの名無しさん2009/01/14(水) 03:05:24
edlin
0967デフォルトの名無しさん2009/01/14(水) 09:50:11
>>964
Notepad++
0968デフォルトの名無しさん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/
0969デフォルトの名無しさん2009/01/15(木) 01:44:19
>>964
edlinにもう一票
0970デフォルトの名無しさん2009/01/15(木) 19:47:10
kde上でwindowを作りたいんだけど、おすすめのモジュール教えてください
0971デフォルトの名無しさん2009/01/15(木) 20:13:02
qt
0972デフォルトの名無しさん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";
0973デフォルトの名無しさん2009/01/17(土) 21:34:29
URLをシングルクオートで括ってみては?
0974デフォルトの名無しさん2009/01/17(土) 21:36:46
こんな感じに
$tmpurl = 'http://www.google.co.jp/search?q=%E5%B1%B1%E7%94%B0';
0975デフォルトの名無しさん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;
0976デフォルトの名無しさん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/!"
09779722009/01/17(土) 23:11:41
おかげさまでできました!ありがとうございます!!
0978デフォルトの名無しさん2009/01/18(日) 00:54:19
>>975
常識で考えてさぁ、ソース見るためだけに perl から wget を呼び出すと思う?
もうちょっと考えてから書き込めよ。
0979デフォルトの名無しさん2009/01/18(日) 09:26:08
>>978
ちょっと、付け足せばwgetと同じ事ができる
>常識で考えてさぁ、ソース見るためだけに perl から wget を呼び出すと思う?
ばっかじゃないの
0980デフォルトの名無しさん2009/01/18(日) 10:19:11
複数行文字列の最初のn行をprintするスマートな方法ありますか?

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

考えたけど、これが限界でした。
0981デフォルトの名無しさん2009/01/18(日) 12:18:50
んーどうするのがスマートだろう
for(0..5){print scalar <$file_handle>;}
0982デフォルトの名無しさん2009/01/18(日) 12:35:37
>>981
それは違うだろ。
0983デフォルトの名無しさん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 };

これをもう少しスマートに書きたい
0984デフォルトの名無しさん2009/01/18(日) 12:39:12
あ、多分\Gいらないわ
0985デフォルトの名無しさん2009/01/18(日) 14:25:08
>>983
*PI = \3.14159265358979;
http://www.kt.rim.or.jp/~kbk/perl5.005/perlmod.html#Symbol_Tables
0986デフォルトの名無しさん2009/01/18(日) 14:48:24
>>983
どうもありがとうございます。
問題なく実行できたのですが、+はどういう意味ですか?
0987デフォルトの名無しさん2009/01/18(日) 14:56:09
3.141592653589793 まで書かないと double の精度に僅かに達しなかった気がするよ。
0988デフォルトの名無しさん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 でもこのままだから。
0989デフォルトの名無しさん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 のコミット権持ってる人って誰なのかしらん・・・。
0990デフォルトの名無しさん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.

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

あ、でもReadonly.pm等でリードオンリーにした変数を型グロブのスカラースロットに入れるってのはあるかも。。。
0994デフォルトの名無しさん2009/01/18(日) 18:46:37
あ、配列とかもいけるじゃん、この方法なら!
ひとつ賢くなったわ
0995デフォルトの名無しさん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__
09969832009/01/18(日) 19:18:57
>>995
レスthx
eval文字列なんて反則技すぎる。。。

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

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