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

このエントリーをはてなブックマークに追加
1デフォルトの名無しさん

"The duct tape of the Internet" こと、Perlについての質問箱です。
"There's more than one way to do it" ということで、
Perlの奥深さについて皆で語り合い、追求してまいりましょう。

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

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

http://www.perl.org/get.html
● 2008/04/20 現在の最新版: 5.10.0
● 2008/04/20 現在の開発版: 5.9.5

▼ 前スレ
Perlについての質問箱 34箱目
http://pc11.2ch.net/test/read.cgi/tech/1199977642/
2デフォルトの名無しさん:2008/04/20(日) 16:06:37 BE:238787993-DIA(100004)

[プログラミング自体の経験が無い奴はまずココを読め]
Perlプログラミング講座: ttp://www.site-cooler.com/kwl/perl/

[本]
リャマ: ttp://www.oreilly.co.jp/books/4873111269/
駱駝: ttp://www.oreilly.co.jp/books/4873110963/
Effective Perl: ttp://www.ascii.co.jp/books/books/detail/4-7561-3057-7.shtml (修正)
クックブック: ttp://www.oreilly.co.jp/books/4873112028/
Perl ベストプラクティス: ttp://www.oreilly.co.jp/books/4873113008/
Perl Hacks: ttp://www.oreilly.co.jp/books/9784873113142/

[オンラインマニュアル]
最新のドキュメント: ttp://search.cpan.org/dist/perl/
perl5.8.xのドキュメント(一部): ttp://www.kt.rim.or.jp/~kbk/perl-5.8/
perl5.005_03 のドキュメント: ttp://www.kt.rim.or.jp/~kbk/perl5.005/
日本語ドキュメント検索: ttp://www.cpan.jp/search.cgi (停止中)
perldoc.jp: ttp://www.perldoc.jp/
perldoc.com: ttp://www.perldoc.com/
3デフォルトの名無しさん:2008/04/20(日) 16:09:13 BE:123817027-DIA(100004)
4デフォルトの名無しさん:2008/04/20(日) 16:12:33 BE:636768689-DIA(100004)
5デフォルトの名無しさん:2008/04/20(日) 16:13:54 BE:265320656-DIA(100004)
6デフォルトの名無しさん:2008/04/20(日) 16:17:33 BE:636768689-DIA(100004)
少しミスりました、すみません。
テンプレは以上だと思います。
7デフォルトの名無しさん:2008/04/20(日) 17:37:30
>>1おつ
8デフォルトの名無しさん:2008/04/20(日) 21:59:21
柚縁故とかの説明は無しにしたのね
9デフォルトの名無しさん:2008/04/20(日) 22:05:44
だいぶまえからないよ
10デフォルトの名無しさん:2008/04/20(日) 23:21:25
エロ画像収集言語 perl
11デフォルトの名無しさん:2008/04/21(月) 00:34:06
sedとawkさえあれば何も困らないことに気が付いた
12デフォルトの名無しさん:2008/04/21(月) 01:04:51
perlでクライアントの2chブラウザ作ったけど見たい人いますか?
4時間ほどで作りました
13 ◆TWARamEjuA :2008/04/21(月) 01:35:41 BE:3049474-2BP(7082)
(´-`).。oO(前スレが埋まる前に次ぎスレを立てて案内を入れて欲しいよなぁ。。。)
14デフォルトの名無しさん:2008/04/21(月) 07:15:16
お前がやれ
15デフォルトの名無しさん:2008/04/21(月) 18:03:48
perlの-MO=オプションってなんなんですか?
perlrunやperlcompile見ても
-MO そのものの説明は全然のってないんですが
16デフォルトの名無しさん:2008/04/21(月) 18:08:05 BE:212257038-DIA(100004)
"O" と言うモジュールがあるんだよ
17デフォルトの名無しさん:2008/04/21(月) 18:30:53
perldoc O だけで説明が出ますよ。探し回ってしまうのはなんとなくわかる。
18デフォルトの名無しさん:2008/04/21(月) 18:35:21
ところが、perl -MO=Deparse とかの場合
perldoc B::Deparse
なんだなこれが。
1917:2008/04/21(月) 18:45:42
そこは perldoc O すれば
「-MO=Hoge すると B::Hoge が、だな」とか書かれてたはずだからいいか、と
思い込んでみました。
20l15:2008/04/21(月) 18:48:58
ありがとうございました

perlccで使えるモジュールみたいなもの(B::x)をperlコマンドから参照するアダプタモジュールが
Oっていう名前でそれを-Mオプションでuseしていると理解しました
=...はOモジュールのオプションですね

道理で-MOで幾ら探してもでてこないわけだ…orz
2118:2008/04/21(月) 18:51:16
確かにCONVENTIONSとかに書かれてるね。
きちんと読みゃ問題ないんだが、オレはハマったw
22デフォルトの名無しさん:2008/04/21(月) 18:52:54
リロードしてから投げりゃよかった。
>>21>>19へのレス。
23デフォルトの名無しさん:2008/04/22(火) 16:32:51 BE:238789139-DIA(100004)
#!/usr/bin/perl

use utf8;

sub スイーツ {
my $argument = shift; utf8::encode($argument);
my($package, $routine) = (caller 0)[0, 3];
{
no utf8;
$routine =~ s/\Q$package\E:://;
printf("%s(%s)", $routine, $argument);
}
}

スイーツ(笑)

__END__

http://codepad.org/1jJzeCja
スイーツ関数出来たよー
24デフォルトの名無しさん:2008/04/25(金) 10:46:58
cat a.txt b.txt c.txt > d.txt

と同等のことをする Perl モジュールはあるでしょうか?

なるべく、
while (<FH>){print;}
の繰り返しを避けたいのですが。

それとも
(open FH, "cat a.txt b.txt c.txt |");

のようにするのでしょうか。

25デフォルトの名無しさん:2008/04/25(金) 12:35:24
>>24
perl -ne print a.txt b.txt c.txt > d.txt
26デフォルトの名無しさん:2008/04/25(金) 12:38:26
これ使えば
ttp://search.cpan.org/~dconway/Perl6-Slurp-0.03/Slurp.pm

print slurp $_ for @files;

とかでできるんじゃね?

ってか何がやりたいの? なんで繰り返しを避けたいの?
質問するときはそれを書くようにしましょう。
27デフォルトの名無しさん:2008/04/25(金) 12:39:13
>>25
どうもありがとうございます。
言葉が足りなくて申し訳ありません。
実はコマンドラインでなく、スクリプトの中で実行したいのです。
2824:2008/04/25(金) 12:47:18
>>26
どうもありがとうございます。
ご紹介の Slurp.pm を使用してみます。

while (<FH>){print;} の繰り返しを避けたいのは、何度も同じ作業をする予定なので、
while (<FH>){print;} をファイルの数だけループさせる以外にもっといい方法があればと思いまして。

シェルスクリプトでやっていたことを Perl スクリプトで実行したいところなので
発想がシェルからなのです。
他には、 comm や sort に対応するモジュールを使ってみようかと。
29デフォルトの名無しさん:2008/04/25(金) 12:50:08
いや、だから

cat.pl
---- ここから---
#!/usr/bin/perl -n
print;
---- ここまで---

コマンド行:
cat.pl a.txt b.txt c.txt > d.txt

要するに
while(<>)

while(<STDIN>)
は違いますよって事だな
3024:2008/04/25(金) 13:16:10
>>29
たびたびありがとうございます。
本当に言葉が足りなくて、ごめんなさい。

コマンドラインで a.txt b.txt c.txt を指定するのでなく、
スクリプト内で File:Find を駆使して、a.txt 他を探すつもりでした。
31デフォルトの名無しさん:2008/04/25(金) 21:43:46
@ARGV = <*.txt>;
print while <ARGV>;
32デフォルトの名無しさん:2008/04/26(土) 04:06:08
萌え萌えじゃんけんに絶対勝つモジュールはありますか?
33デフォルトの名無しさん:2008/04/26(土) 23:14:27
お世話になります。お力添えください。

テキストファイル内の特定の文字列を検索して、
1.検索結果の『前』『後』の行に、任意の文字列を『追加』する、
2.検索結果の行を、任意に編集する
ということを行いたいのですが、
openしたファイルを直接書き換えることはできるのでしょうか?

一度、別のファイルを作成して、
元を削除して、
作成したファイルをリネームするのではなく、
直接編集できないのかなと思いました。

あと、上記の『1』について、
ファイル内の先頭から検索して、
はじめにマッチする場所へポインタを移動する関数って標準にはないでしょうか?
今は先頭からゴリ押しで探しているので、格好悪いです…。
34デフォルトの名無しさん:2008/04/27(日) 01:04:42
>>33
書き換えは普通にできる。
だが危険だぞ。
35デフォルトの名無しさん:2008/04/27(日) 12:55:49
perl ド素人です。
perl の FillInForm というモジュールを使いたいのだけど
利用しているレンタル鯖(さくら)には入ってないようです。
同じ処理が出来るモジュールなどを教えてもらえないでしょうか。

やりたい事は、
「入力画面からの入力値をチェックし、
不足があれば、入力値を保ったまま入力画面を再表示する」
というものです。この「入力値を保ったまま」というのに
FillInForm を使いたいと考えています。
select や radio の値復帰を
FillInForm で出来るという記事を見かけたので
使おうと思いましたが、
別にこれにこだわっているわけではないので、出来ればなんでもいいです。

管理者権限がなく、インストールなどは出来ないので
.pm の 1 ファイルだけ置いて、require して使えるようなモジュールだとより助かります。
(FillInForm も試してみたのですが上手くいかず……)
36デフォルトの名無しさん:2008/04/27(日) 12:58:23
依存してるモジュール全部突っ込んで、
use lib '.';
とかでいいだろう。
37デフォルトの名無しさん:2008/04/27(日) 13:01:29
CGI::Ex::Fill
38デフォルトの名無しさん:2008/04/27(日) 13:11:49
即レスありがとうございます。

>>36
そういう書き方が出来るんですね、なるほど。
今回は残念ながら、FillInFomr のソースを見たところ、
  require 5.005;
なんて記述があり、自分では依存先ファイルの全貌がつかめませんでした…。

>>37
試してみます。
39デフォルトの名無しさん:2008/04/27(日) 16:03:15
>>38
そのrequireは単なるバージョン制限だ。5.005未満の環境だと、そこで強制終了。
40デフォルトの名無しさん:2008/04/27(日) 16:34:19
すいません今日はじめるんですが、perl5.8.8.822インストールして
環境変数設定するんですが、パスこれであってますでしょうか?

c:\ActivePerl-5.8.8.822-MSWIN32-x64-280952\perl\bin\perl.exe
41デフォルトの名無しさん:2008/04/27(日) 16:56:43
エクスプローラのアドレスバーに
C:\ActivePerl-5.8.8.822-MSWIN32-x64-280952\perl\bin
と打ってみてその中に perl.exe さんがいるのなら、↑こう。
環境変数 PATH の設定なんだから最後の \perl.exe 要らない。

でも、Windows環境だと C:\Perl\bin 辺りに perl.exe さんがいる
状態にする人のほうが多いので、どこに perl.exe さんがいるのか
きちんと確認してください。
42デフォルトの名無しさん:2008/04/27(日) 17:11:18
ほんとにインストールしたのか?!
43デフォルトの名無しさん:2008/04/27(日) 21:01:48
>>35です。
すみません、CGI::Ex::Fill を入れようとしたのですが
うまくソースを読み込めていないようで、
関数を呼び出すと
  Undefined subroutine &main::form_fill
となります。

やったことは、サイトから落としたソースを Fill.pm として ./lib にアップ、
  use lib qw(./lib);
でその読み込み、
  form_fill($html, $query);
の呼び出し、の 3 点です。
form_fill の1行をコメントアウトすると、もちろん値は復帰しませんが正常に動きます。
(なので、use lib qw(./lib); も少なくともエラーにはなっていないようです)
問題点の心当たりのある方がいたら教えてください。
44デフォルトの名無しさん:2008/04/27(日) 21:17:37
今、パールの勉強始めてます
変数がクソだと思いました

Cをやりたいです
配属先でぱーるなんてやらせるのがイヤです
こんなクソ言語
先の無い言語

rubyやPythonやPHPやSQLみたいなオサレなのをやらせてください
COBOLとかFortlanみたいなもんと同じじゃないんですか?ぱーるって
45デフォルトの名無しさん:2008/04/27(日) 21:23:45
>>43 補足
公式サイトの説明での読み込み方が、
  use CGI::Ex::Fill qw(form_fill fill);
となっているので、ひょっとしたら use の読み込みの際、
読み込む関数を指定する必要があるのか考えています。
ただ、use lib qw(./lib) で、読み込み方を指定する方法がわからず試せていません。

全く的外れかもしれませんが、自分で思いつく問題点はそれぐらいです。
46デフォルトの名無しさん:2008/04/27(日) 21:42:33
>>43
インストールしてない
読み込んでない
47デフォルトの名無しさん:2008/04/27(日) 21:57:54
>>43
CGI::Ex::Fill::form_fill($html, $query);
じゃダメなのか?
48デフォルトの名無しさん:2008/04/27(日) 22:05:40
>>46
上にも書いている通り、ファイルを置いて use しているだけなので
インストールしてないというのは、その通りだと思います。
>>43に書いた通りには読み込み処理を書いているので
まさにそれで読み込めない理由が知りたいです。

>>47
ダメでした。同様に
  Undefined subroutine &CGI::Ex::Fill::form_fill
となりました。
49デフォルトの名無しさん:2008/04/27(日) 22:13:44
use libはインクルードパスを変えるだけだぞ…
50デフォルトの名無しさん:2008/04/27(日) 22:21:09
置いたファイルを use していない、のだ。
51デフォルトの名無しさん:2008/04/27(日) 22:42:16
>>49-50
なるほど! わかりました。
use lib でパスを通した後で、
改めて use CGI::Ex::Fill qw(form_fill fill); を行う必要があったんですね。
Fill.pm の置き場所を ./lib/CGI/Ex/Fill.pm に変更し、use したところ
まだ値は復帰しませんが、とにかく form_fill は通るようになりました。
ありがとうございました。
52デフォルトの名無しさん:2008/04/27(日) 23:52:55
インストールすりゃいいだろ!!
53デフォルトの名無しさん:2008/04/28(月) 03:02:57
    ∩___∩   /)
    | ノ      ヽ  ( i )))
   /  ●   ● | / /
   |    ( _●_)  |ノ / コイツ最高のアホ!
  彡、   |∪|    ,/
  /__  ヽノ   /´
 (___)     /
54デフォルトの名無しさん:2008/05/01(木) 00:19:43
    ∩___∩   /)
    | ノ      ヽ  ( i )))
   /  ● ●   | / /
   |    ( _●_)  |ノ / コイツ最高のアホ!
  彡、   |∪|    ,/
  /__  ヽノ   /´
 (___)     /
55デフォルトの名無しさん:2008/05/01(木) 02:11:38
Template Toolkit の質問でも良いですか?

Template Toolkit でファイルの存在判定ってできるんでしょうか?
例えばあるテンプレート内で
[% INCLUDE hoge.tt %]
を使って異なるディレクトリにあるファイルを include させたいのですが、
実際に hoge.tt が存在しない時は、"file not found"にて処理が失敗しています。

今作ってる仕組み上、hoge.tt は時と場合に応じて有ったり無かったりするので、
ファイルが無いときは、include させない制御をテンプレートのみで実装したいのです。

お願いします。
56デフォルトの名無しさん:2008/05/01(木) 07:35:17
>>55
ここの「例外処理、フロー制御」の項読めば?
ttp://www.hakoniwa.net/tt/
57デフォルトの名無しさん:2008/05/01(木) 13:12:30
>56
ありがとうございます。
まさにそのままでしたね。

どんだけ視野狭いんだ俺。
58デフォルトの名無しさん:2008/05/02(金) 03:25:33
perlからvb.net で作成したクラスライブラリにアクセスはできないのでしょうか?
例えばperlから、
http://homepage1.nifty.com/rucio/main/dotnet/shokyu/standard51.htm
のサンプルで作成したMyLibrary.dllの関数の"Add","Total"等を
使用する場合、次のような書き方では、Died となってしまいます。
どなたかご教授お願いします。

use Win32::API;
$Add = new Win32::API( "MyLibrary.dll", "Add", [N], "N") || die;
$Total = new Win32::API( "MyLibrary.dll", "Total", [], "N") || die;

<結果>
Died at D:\work\DLL_Access.pl line 27, <DATA> line 164.

59デフォルトの名無しさん:2008/05/02(金) 14:16:23
Perl で LWPを使用したとき(activePerl) HTTP/1.1 を使用しちゃうんですが
HTTP/1.0 で通信したい場合どう指定すればいいか分かりますか?
60デフォルトの名無しさん:2008/05/02(金) 19:07:41
>>59
環境変数PERL_LWP_USE_HTTP_10をセットする。
61デフォルトの名無しさん:2008/05/05(月) 12:28:42
CGI掲示板を自作していますが、書き込み送信メールのSendmailによる送信処理でつまづきました。

以下のように記述すると、管理人である自分には登録メールが送られますが、
管理人以外に、書き込みした人にも登録確認メールが送られるようにしたいんです。

#Sendmailによる送信処理
if (open(MAIL,"| $sendmail -t")){
print MAIL "X-Mailer:legend2\n";
print MAIL "To: $administrator\n";
print MAIL "Errors-To: $administrator\n";
print MAIL "From: $administrator\n";
print MAIL "Subject: $subject\n";
print MAIL "MIME-Version: 1.0\n";
print MAIL "Content-type: text/plain; charset=ISO-2022-JP\n";
print MAIL "Content-Transfer-Encoding: 7bit\n";
print MAIL "$mail_comment\n";
print MAIL "\n";
close(MAIL);
}
}

以下のどれかを使うのでしょうか?

print SENDMAIL "From: $sender <$from>\n";
print SENDMAIL "To: $to\n";
print SENDMAIL "Cc: $cc\n";
print SENDMAIL "Bcc: $bcc\n";


どうすれば良いか御教授下さい。宜しくお願いします。
62デフォルトの名無しさん:2008/05/05(月) 13:30:13
63デフォルトの名無しさん:2008/05/06(火) 12:23:32
>>62
知らないなら出しゃばるなよ
64デフォルトの名無しさん:2008/05/06(火) 13:31:21
65デフォルトの名無しさん:2008/05/06(火) 13:36:14 BE:212257038-DIA(100004)
sendmail のスレ行けよ
純粋な Perl の質問なら
標準モジュールの
Net::SMTP 使って質問しろ
66デフォルトの名無しさん:2008/05/06(火) 13:49:56
既にwebprogに移動したようですよ。
67デフォルトの名無しさん:2008/05/06(火) 14:41:58
こういう赤ん坊のムニャムニャみたいな質問に良く答えられるなあ。
webprogはエスパーが多いのか。
68デフォルトの名無しさん:2008/05/06(火) 15:51:47
あっちは隔離施設なので訓練をつんだ回答官が配備されてます
69デフォルトの名無しさん:2008/05/06(火) 16:00:05
こっちのスレは素人なので、答えられない質問が来ると他所へ追いやります。
70デフォルトの名無しさん:2008/05/06(火) 16:01:24
>>69
> こっちのスレは素人なので、答えられない質問が来ると他所へ追いやります。

その通りなので、最初からあちらへ行ってください。
71デフォルトの名無しさん:2008/05/06(火) 16:29:08
訓練を積んだ回答官が配備されてるんじゃなくて

「&jcode'convert(*value, 'sjis', 'euc') の *value って何ですか?」
「&ReadParse(*in) の *in って何ですか?」
「open() or &error("読み込みエラー") で読み込みエラーが表示されて困っています」
「エラーメッセージは 500 Internal Server Error です」

任務が厳しくて鍛えられてしまうんです。
72デフォルトの名無しさん:2008/05/06(火) 18:18:54
激務だな。

それはそうと、未だにjcode.plつかってるのが出回ってるのかね。
73デフォルトの名無しさん:2008/05/06(火) 18:28:12
use Jcode や use utf8 がクソだから jcode.pl から乗り換える気にもなれない。
わざわざ労力をかけてコードを書き直す価値が無いんだよ。
過去の古い資産をそのまま使うのでじゅうぶん。
74デフォルトの名無しさん:2008/05/06(火) 19:26:17
最近グロブ使って書かれてるスクリプトに触ってないから
グロブはあまり使わなくなっちまったなあ。
75デフォルトの名無しさん:2008/05/06(火) 22:59:14
しょこたんブログも飽きたな
76デフォルトの名無しさん:2008/05/07(水) 11:44:34
Perl/tkで書いたものをWin32exe形式にするにはどうしたらいいんでしょうか?
77デフォルトの名無しさん:2008/05/07(水) 20:09:07
perl2exe
78デフォルトの名無しさん:2008/05/08(木) 06:57:50
UNIX環境でコマンドラインからスクリプト動かしたとき、
動かしたユーザーのidを取得するにはどうしたらいい?
スクリプトの使用制限をはかりたい。
79デフォルトの名無しさん:2008/05/08(木) 08:26:58
>>78
$<
manくらい嫁。
80デフォルトの名無しさん:2008/05/08(木) 13:05:01
>>78
コピーされて無効化されるぞ。
81デフォルトの名無しさん:2008/05/08(木) 20:53:48
教えてください。

テキストファイルの中から、
hoge
を含む行を検索して、
その行をprintしたいのですけど、
一行一行読み込んで、パターンマッチして、真であれば、printする、
という方法以外に、何か方法ありますか?
(perlはテキスト処理が得意と訊いたのですが、『一行一行読み込んで』のステップがプログラムで必要か気になりました。)

ところで、cygwinでperlをはじめたのですが、何か気をつけることはありますか?
82デフォルトの名無しさん:2008/05/08(木) 20:54:34
hogeを見つけたら前後の改行を探し出すとか。
全く意味ないけど。
83デフォルトの名無しさん:2008/05/08(木) 21:51:51
>>81
perl -ne '/パターン/ && print' <file
8481:2008/05/08(木) 22:37:56
レスありがとうございます。
さっぱりわからないので、教わったことをキーワードに調べてみます。

また、御願いします。
85デフォルトの名無しさん:2008/05/09(金) 16:18:45
>>81
そういう事のためにあるのが、grep
86デフォルトの名無しさん:2008/05/09(金) 18:25:10
まあ正規表現なんだけどな !
87デフォルトの名無しさん:2008/05/09(金) 18:32:04
grepやsedを素っ飛ばしてperlから始めたのかな。一行野郎
なんて知らないんじゃないのかな。
88デフォルトの名無しさん:2008/05/10(土) 14:33:02
目的:perlTk で GUI のテキスト検索ツールを作成しています。

状況:ユーザから入力された検索文字列の正規表現が不正であると、プログラムが
終了してします。 (invalid regular expression at * )

$search_string に格納された文字列が正規表現として有効であるかを、
eval を使って事前に評価したいのですが、どうしたら良いのでしょう?

if (eval (m/$search_string/)) ?  これだと常に true が帰ってしまいます。
エロい人、教えてください。
89デフォルトの名無しさん:2008/05/10(土) 14:49:04
困ったときのクックブック
6.11 パターンが有効かどうか検証する
90デフォルトの名無しさん:2008/05/10(土) 15:12:19
qx
91デフォルトの名無しさん:2008/05/10(土) 15:52:18
9288:2008/05/10(土) 16:16:44
>>89
ありがとう。正規表現の箇所は全部呼んだつもりだったのに。。。

解法(p.254):

eval { ""=~ /$search_string/ };
warn "パターンが無効 $@" if $@;

>>91
性器表現に困ったときはそうします。ありがとうございました。
93デフォルトの名無しさん:2008/05/10(土) 19:00:21
Win32::OLEを使って wordドキュメントの編集をしようとしています。
読み出しはできるのですが、テキスト編集を受け付けてくれません。

下記のようなソースで、「ABC」→「abc」としたいのですが、元の「abc」のまま出力されてしまいます。
どのようにしたらよいでしょうか?
WindowsXP SP2上で、ActivePerl 5.10と、5.8.8で試してみました。

-------------------
use Win32::OLE qw(in with);
use Win32::OLE::Const 'Microsoft Word';

$word = Win32::OLE->GetActiveObject('Word.Application') || Win32::OLE->new('Word.Application', 'Quit') || die;
$doc = $word->Documents->Open( 'test.doc' ) || die;
$paras = $doc->Paragraphs;

foreach (in $paras){
 $_->Range->{'Text'} =~ tr/A-Z/a-z/;
 print $_->Range->{'Text'}."\n";
}

$doc->Close( 0 );
-------------------
94デフォルトの名無しさん:2008/05/10(土) 22:36:57
URL転送なんだけど今こうしてます↓

#!/usr/bin/perl
print "Location: http://*****\n\n";

これに転送するまでHTMLの<meta content="x">みたいに
一定時間ウェイトかける事って出来るのでしょうか?





95デフォルトの名無しさん:2008/05/10(土) 22:55:03
いいえ
96デフォルトの名無しさん:2008/05/10(土) 23:04:42
97デフォルトの名無しさん:2008/05/11(日) 02:50:29
>>94
できなくはないがやるな。
それと>>1
98デフォルトの名無しさん:2008/05/11(日) 12:59:18
教えて先生!
01 や 11 などの文字列を数値に変換するにはどうすればいいの?
9998:2008/05/11(日) 13:26:41
自己解決っす
他のスクリプト同様 -0 でよかったのかw
100デフォルトの名無しさん:2008/05/11(日) 14:17:20
intでいいよ
101デフォルトの名無しさん:2008/05/12(月) 21:23:54
モジュールでモジュールのファイル位置を知るにはどうしたらいいでしょうか?
|-foo.pm
|-data/data1
こんな感じのフォルダ構造になってて、foo.pmの中からdata1を相対参照したいのです。
102デフォルトの名無しさん:2008/05/12(月) 21:31:33
あとcgiとして使う場合。cgiが呼ばれる度毎回dataファイルを読み込むのは処理が重くなると思うんですよ。
最初の一回だけ読み込む方法とかありませんか?
103デフォルトの名無しさん:2008/05/12(月) 22:57:05
mod_perl
104デフォルトの名無しさん:2008/05/12(月) 23:35:05
fastcgi
105デフォルトの名無しさん:2008/05/13(火) 00:00:09
>>103 >>104
有難うございました。fastcgiを調べてみます。
106デフォルトの名無しさん:2008/05/13(火) 00:14:04
>>105
Speedy-CGI
107デフォルトの名無しさん:2008/05/13(火) 00:18:38
perlはインタプリタだから、見下すべき言語なんだろ?
108デフォルトの名無しさん:2008/05/13(火) 00:36:37
perlはコンパイラつんでます。
109デフォルトの名無しさん:2008/05/13(火) 00:37:57
所詮JIT
110デフォルトの名無しさん:2008/05/13(火) 13:52:10
質問です。

package number;
sub get_codeNumber(){
my $number = 1;
if ($number > 0){
print "0より大です。";
}else{
print "0以下です。";
}
}
このplをローカルで実行しても何もコンソールに表示されません。
これをコンソールに表示するには、どうしたらよいのでしょうか。教えて下さい。
111デフォルトの名無しさん:2008/05/13(火) 13:56:45
>>110
そんな断片だけ書かれていては釣りだとしか思えない
112デフォルトの名無しさん:2008/05/13(火) 14:03:43
>>111
サブルーチンの中身をデバッグしたいのです。
113デフォルトの名無しさん:2008/05/13(火) 14:13:19
>>112
問題がサブルーチン内にあるとわかっているのですか?
114デフォルトの名無しさん:2008/05/13(火) 14:20:44
>>113
いいえ。perlの仕事がはじめてなのですが、
渡されたサブルーチンが仕様通りに動いているかを自分で確認したくて書き込みました。

Javaでいうと、
public class hoge1{
System.out.println("0より大です。");
}
public class hoge2{
System.out.println("0以下です。");
}
のような確認をしたかったのですが、おかしいでしょうか。
115デフォルトの名無しさん:2008/05/13(火) 14:24:25
呼べ
116デフォルトの名無しさん:2008/05/13(火) 14:30:44
>>114
ごめん,俺に理解力がないせいか何をしたいのかがよくわからない.
もうちょっと詳しく説明してくれたら助かるんだが.
117デフォルトの名無しさん:2008/05/13(火) 14:42:28
もうちょっと実際のplに近いものを書いてみます。
お待ち下さい。
118デフォルトの名無しさん:2008/05/13(火) 14:42:50
package number;
#sub get_codeNumber(){
my $number = 1;
if ($number > 0){
print "0より大です。";
}else{
print "0以下です。";
}
#}
119デフォルトの名無しさん:2008/05/13(火) 14:55:04
>>118
単純に改行が入ってないからとか
stdout が flush されてないからとか
じゃないよね?
120デフォルトの名無しさん:2008/05/13(火) 14:58:48
ちゃんと実行されてるかどうかがあやしいような
121デフォルトの名無しさん:2008/05/13(火) 15:05:45
#torikomi.pl

package torikomi;

#戻り値:String(分類コード)

sub get_code(){
    ($organizationcode,$sectioncode,$itemcode) = @_;
    
    $itemcode = "999999";
    
    my $i1cd       ="";
    my $i2cd       ="";
    my $i4cd       ="";
    
    $i1cd=substr($itemcode,0,1);
    $i2cd=substr($itemcode,0,2);
    $i4cd=substr($itemcode,0,4);
    
    
    if($itemcode eq "000000"){ 
        return "A00";
    }
    if( $itemcode eq "999999" ){
        return "Z00";
    }
}

このperlが、きちんとA00やZ00を返しているかを確認したいのです。
122デフォルトの名無しさん:2008/05/13(火) 15:11:54
「サブルーチンの中」を詳細に書けっていうんじゃなくて、
それを呼び出す側とか、実行している環境とかの詳細を書けって話だと思うよ。
123デフォルトの名無しさん:2008/05/13(火) 15:37:02
あー、呼び出す側や実行環境のソースはもらっていません。
124デフォルトの名無しさん:2008/05/13(火) 17:03:19
質問です。
1つのデータを複数に分割して、それぞれをgnuplotで
表示しようとしているのですが、実行すると

gnuplot> 'plot './X1.txt' using 1:2 w l 1'
      ^
line 0: invalid command

という風なエラーが分割したデータ全てに対して出ます。
(X1.txtというのが分割したデータの1つです。)
分割まではうまくいっているので、gnuplotの部分で問題があると思うのですが、
わかる方がいましたらよろしくお願いします。
gnuplotの部分のプログラムは以下のような感じです。

for( $j = 0 ; $j < 10 ; $j++ ){
open ( GP "| gnuplot -persist" )
or die "no gnuplot";
print GP "set term postscript color 20\n" ;
print GP "set output './X1.eps\n'" ;
print GP "plot './X1.txt' using 1:2 w l 1\n" ;
close GP;
}
125デフォルトの名無しさん:2008/05/13(火) 17:08:42
>>124
スレ違いだが、、、
w l 1 の「1」って何だ? そんなのあったっけ?

126124:2008/05/13(火) 17:14:59
>>125
スレ違いで申し訳ありません。
perlでプログラム書いてたんで、perlのスレで質問した方がいいかなと・・・

「1」はlineの色ですのであまり気にされなくても大丈夫です。
127デフォルトの名無しさん:2008/05/13(火) 17:20:15
>>125
色だか線種だかを1に指定ってことだったはず.

>>124
gnuplotに流してるコマンドの最初と最後にいらないシングルクオートが入ってるせいじゃないかな?
このコピーでは問題なさそうだけど,ソースのprint文を確認してみたらいいと思う.
128デフォルトの名無しさん:2008/05/13(火) 19:57:39
' なんてコマンドはねえよ、って言ってるだけじゃねえの?
129124:2008/05/13(火) 23:28:23
124です。
124で書いたプログラムの間違いに気づきました。
プログラム中の「X1」は「X${j}」でした。
じゃないと、for文の意味ないですもんね。。。
あと、今自分で間違いに気づきました。
print GP "set output './X1.eps\n'"
じゃなくて、
print GP "set output './X1.eps'\n"
でしたorz
こんな簡単なミスに気づかないとは。。。
大変ご迷惑おかけしました。
130デフォルトの名無しさん:2008/05/14(水) 00:54:44
>>121
>このperlが、きちんとA00やZ00を返しているかを確認したいのです。
Test::Base使えば良いじゃん。
131デフォルトの名無しさん:2008/05/14(水) 02:52:29
asciiコードを16進数に変換するにはどうしたらいいでしょうか?
printf "%x","a"
こんなことやっても上手くいきません
61と表示させたいです
132デフォルトの名無しさん:2008/05/14(水) 03:04:43
http://www2u.biglobe.ne.jp/~MAS/perl/waza/asc2chr.html
これみたら分かりました
133デフォルトの名無しさん:2008/05/14(水) 03:21:56
grepでデータ中から目的の行を検索したいのですが
grep(/$foo/i, @ary);
・ignore caseは使いたい
・$fooは「+」などのデータが含まれており、そのままgrepすると正規表現と解釈されてエラーになる
・正規表現はつかわない
何かよい方法はないでしょうか?
134デフォルトの名無しさん:2008/05/14(水) 03:32:47
>>133
quote (disable) pattern metacharactersの出番
135デフォルトの名無しさん:2008/05/14(水) 03:35:23
ありゃッ、先頭が抜けた。

>>133
\Q quote (disable) pattern metacharactersの出番
136デフォルトの名無しさん:2008/05/14(水) 04:14:43
>>134
grep(/\Q$foo\E/i, @ary);
でいけました。ありがとうございます
137110:2008/05/14(水) 15:58:33
メインルーチンとの結合でうまくいきました。
相談に乗ってくれた方、ありがとうございました。
138デフォルトの名無しさん:2008/05/14(水) 23:04:47
Windows環境で、ディレクトリ一覧を取得、正規化してリネームしたくて
いろいろやってるんだが、shift-jisの文字の扱いに苦労してる
ひょっとしてPerlでやるのあんま向いてなかったりする?
139デフォルトの名無しさん:2008/05/14(水) 23:14:21
Unicodeであつかえばいいだろ。
140デフォルトの名無しさん:2008/05/15(木) 19:33:10
あまりPERLの構文詳しくないので誰か教えてください
こんなのを作ってみたのですが
sub cont{print "contents\n";}
sub html{print "<html>\n"; $_[0](); print "</html>\n";}
sub body{print "<body>\n"; $_[0](); print "</body>\n";}
body(\&cont);
html(\&cont);
これを、出力が<html><body>cont</body></html>となるように
呼び出したいのですが可能でしょうか
↓動かないですが、こんな感じのことがやりたいです
1. html(\(body(\&cont));
2. sub f{html(\&&_[0]);} f(\&html);
3. sub g{$f=shift; html(\&f);} g(\&html);
141デフォルトの名無しさん:2008/05/15(木) 19:43:23
>>140
こういうことか?

sub cont { print "contents\n"; }
sub html { print "<html>\n"; shift->(); print "</html>\n";}
sub body { print "<body>\n"; shift->(); print "</body>\n";}
html(sub { body(\&cont) } );
142140:2008/05/15(木) 19:58:14
おお、想定通り動きました。ありがとう。
143デフォルトの名無しさん:2008/05/15(木) 20:19:38
use strict;
use warnings;
sub binding{ my($F,@P)=@_;sub{$F->(@P)} }
sub cont {print "contents\n";}
sub html {print "<html>\n"; shift->(); print "</html>\n";}
sub body {print "<body>\n"; shift->(); print "</body>\n";}
sub cont2 {return "contents\n";}
sub html2 {return "<html>\n",shift->(),"</html>\n";}
sub body2 {return "<body>\n",shift->(),"</body>\n";}


html( binding( \&body => \&cont ) );
print html2( binding( \&body2 => \&cont2 ) );
144デフォルトの名無しさん:2008/05/15(木) 20:21:07
windows上のperlのGDモジュールで、
日本語フォントをjpg画像で出すサンプルってありませんか。
下のサンプルをmsgothic.ttcに変えて実行したら、
どうやっても・という文字になってしまいます。
http://x68000.q-e-d.net/~68user/webcgi/image-1.html
145140:2008/05/15(木) 20:41:48
>>143
このbindingってやつナイスですね
これ参考に、1タグ多要素に拡張してみます
146デフォルトの名無しさん:2008/05/15(木) 21:51:34
>>144
PerlMagickでできるかも。
まー、内部はGDかもしれないから、同じ結果かも知れない。
147デフォルトの名無しさん:2008/05/15(木) 22:05:34
>>144
よくわからんが、文字コードの問題とか?
148デフォルトの名無しさん:2008/05/15(木) 22:32:06
>>144
utf8か、フォントファイルを絶対パスで指定かな。
Imagerも良いよ。
149プヨー:2008/05/16(金) 18:03:07
Perl で Lisp のマクロのようなものを使うことはできないの?
遅延評価する仕組みがほしい。

Func1( ...exp1..., ...exp2....);
という呼び出しがある場合、状況に応じて exp1, exp2 の
いずれか一方だけを評価したい。

Func1( sub { ...exp1...}, sub {...exp2...} );
のように無名関数を渡す方法は思いついたが、
記法が簡単でないので、もっと簡単に記述できる方法がいい。
150デフォルトの名無しさん:2008/05/16(金) 19:09:34
>>149
Lispは名前しか知らないけど、「状況に応じて」の部分を条件文にすればいいんじゃない?
関数を呼んだ時点では、引数の値が決定してないってこと?
そうだとしても、値が決定するまで待つとかすればいいような気がする。
Lispがわからない人でもわかる説明で。
151プヨー:2008/05/16(金) 19:31:07

> Lispは名前しか知らないけど、「状況に応じて」の部分を条件文にすればいいんじゃない?

そうなんだけど、
if (,,,) { ... } else {...}
のような定型化した条件文が大量にあるから、きれいじゃないんだよね。
それよりも、単に
Func1( ...exp1..., ...exp2....);
のように書けば一行ですむから、保守性が高くてクールだよね。

> 関数を呼んだ時点では、引数の値が決定してないってこと?
そう。Lisp のマクロというのは、必要に応じて引数を eval するみたいなものだよ。

Lisp のマクロはコードを簡単化するために使われることが多い。
152デフォルトの名無しさん:2008/05/16(金) 20:02:14
>>151
sub exp1{ .... }
sub exp2{ .... }

Func1(\&exp1, \&exp2)

でいいんでないの?
153デフォルトの名無しさん:2008/05/16(金) 20:02:34
>>151
質問が漠然すぎるんだが、、、
my %hash = (
 foo => sub { print "foo\n" ; },
 bar => sub { print "bar\n" ; },
);
$hash{foo}->() ;

こう言うこととかしたいのか?
それともif文を三項演算子?
154デフォルトの名無しさん:2008/05/16(金) 20:04:34
常に先行評価のPerlで急に遅延評価になったら保守性が著しく低下するだろ
sub { } で我慢しろ。どうしても黒魔術を発明したいならソースフィルタを使って何とかすればいい
155デフォルトの名無しさん:2008/05/16(金) 20:30:18
exp1,exp2が長い場合、保守性がいいとは思えないし
>>149が考えたコードも改行位置ちょっと変えてあげれば複雑にはみえないし
関数を読んだ時点で引数の値が決まってないのは
コードがタコなだけな気がしてならないので
せめて、もう少し具体的に書いてもらえないかな

とりあえずFunc1の中でevalしたいならそうすればいいんじゃ?
Func1(
 q(...exp1...),
 q(...exp2...)
);
sub Func1 {
my($exp1,$exp2) = @_;
#なんかいろいろ
my $exp = $COND ? $exp1 : $exp2;
eval "$exp";
}

156デフォルトの名無しさん:2008/05/16(金) 21:45:27
初歩的な質問で申し訳ないのですが

クッキーにデータを入れるときエスケープなどの処理をしてから入れたほうがいいのでしょうか?
よろしくお願いします。
157デフォルトの名無しさん:2008/05/16(金) 23:13:35
>>156
URLエンコードと同じエスケープがいるよ。
日本語化されたRFCもあるから、読んでみれば?
もっと簡単にやるなら、CGIモジュールに全部任せる。
158デフォルトの名無しさん:2008/05/16(金) 23:57:48
>>157
なるほど。クッキーはURLエンコードですか。勉強になりました。
159デフォルトの名無しさん:2008/05/17(土) 01:38:05
最終的に決められた文字だけになるなら、任意のエスケープ方式でいい
160デフォルトの名無しさん:2008/05/17(土) 13:25:57
要素数が同じlistとvalueがあるときに、同じ添え字の処理ってどうやって書きますか?
#こんなのがほしい・・
for $i $j(@list @value){print "$i=$j";}

タプルみたいなのがあれば使いたいんですが
やっぱり添え字をインデックスにしてループするしかないんですかね
161デフォルトの名無しさん:2008/05/17(土) 13:35:43
どういうときに便利になる?
その例でもwhile shiftで事足りるし。
162デフォルトの名無しさん:2008/05/17(土) 13:40:01
use List::MoreUtils qw(each_array);
163デフォルトの名無しさん:2008/05/17(土) 13:54:11
zipWithを書けばおk
164デフォルトの名無しさん:2008/05/17(土) 13:55:32
単に短く書きたかっただけなんですが、あまりPERL使いこなせてはないので・・
shiftだとこんな感じでしょうか。
while(@list){print shift @list;print "=";print shift @value;}
これはこれで、短くていいですね。
165デフォルトの名無しさん:2008/05/17(土) 13:57:38
while($i=shift@list and $j=shift@value){print "$i=$j";}
166デフォルトの名無しさん:2008/05/17(土) 14:04:10
>>162
 オブジェクト指向部分はあまりわかってないので後ほど調べてみます。
>>163
 sub zipwith{shift->(shift,shift);}こんな感じですかねw
 ちゃんと動くかはこれから試してみますが・・
>>164
 こっちのが全体的にいいですね、トン




167デフォルトの名無しさん:2008/05/17(土) 14:38:21
練習がてら作ってみました
@a=qw(a b c);
sub zipwith{($f,$l,$r)=@_;while($i=shift @$l and $j=shift @$r){$f->($i,$j)}}
zipwith(sub{($a,$b)=@_;print "$a=$b\n";},\@a,[1,2,3]);

関数へ複数の配列を渡す際にはリファレンスにしないとだめってのは少し不便ですね
168デフォルトの名無しさん:2008/05/17(土) 17:31:48
perlの勉強中で
カメラ 785円
お菓子 98円

という文字列がファイルであるのですが

if(円という文字を含んでいたら)
$temp = "円より前の数字";

という風に文字の抽出を行いたいのですが
正規表現の部分と、抽出の部分がわかりません
ファイルの読み込みから1行だけを取り込むのは出来たのですが

ご指導お願いいたします。
169デフォルトの名無しさん:2008/05/17(土) 17:55:32
/円/ and $temp = $`;
170デフォルトの名無しさん:2008/05/17(土) 18:12:27
すいません、上手く動かないみたいです
171デフォルトの名無しさん:2008/05/17(土) 18:23:41
ちょっとかんべん
172デフォルトの名無しさん:2008/05/17(土) 22:31:48
perlっていうかsendmailについてなんですが…
open(MAIL, "| /usr/sbin/sendmail -t env_addr") or die $!;
# 中略
close(MAIL) or die $!;
のように、パイプ渡しでopenするとき、closeに失敗するときがあるんですが、このとき
エラーメッセージを捕捉する方法どなたかご存じですか? $!には入ってこないのです。
173デフォルトの名無しさん:2008/05/17(土) 22:34:32
>>172
エラーメッセージは何処に出るの? 標準出力ならIPC::Open2, 標準エラー出力ならIPC::Open3参照。
174デフォルトの名無しさん:2008/05/19(月) 11:53:11
#!/usr/bin/perl

$inputfile="test.txt";
open (FILE1, ">>$inputfile") or die "$!";

for ($hoge=0;$hoge<10;$hoge++) {
print FILE1 "$hoge";
  sleep(1);
}
close (FILE1);

このプログラムを同時に2つ実行すると、私の予想ではtest.txtの中身は
00112233445566778899
となると思うのですが、なぜかファイルの中身には
01234567890123456789
と出力されます。
perlは排他制御が勝手に行われたりするんでしょうか?
175デフォルトの名無しさん:2008/05/19(月) 11:54:52
バッファリングされてるから
176デフォルトの名無しさん:2008/05/19(月) 11:56:39
>>175
どういうことでしょうか?
もし正しくバッファリングされるのならflockなどの排他制御は不要な気が…。

すいませんがもう少し詳しくお願いします。
177デフォルトの名無しさん:2008/05/19(月) 12:05:50
どのタイミングでflush()されるかわからないのに、それに依存しちゃダメでしょ
ちゃんと排他制御しなよ
178デフォルトの名無しさん:2008/05/19(月) 12:27:50
なんとなーく分かりました。ありがとうございました
179デフォルトの名無しさん:2008/05/20(火) 19:30:53
cryptの返り値はsaltと同じ半角英数字、半角スラッシュ、半角ピリオドの範囲で
salt2文字と残り11文字ってことでってますでしょうか。
180デフォルトの名無しさん:2008/05/20(火) 19:31:58
あってますでしょうか、の誤字でした。あとあげます。
181デフォルトの名無しさん:2008/05/20(火) 20:50:16
いいえ。ホストのcrypt(3)に依存です。
182デフォルトの名無しさん:2008/05/20(火) 20:53:22
マニュアルを読むのは身分の低い下賎の民の仕事なので、
高貴な方々は、他人にマニュアルを読ませます。
183デフォルトの名無しさん:2008/05/20(火) 21:02:57
だからいつまでたっても
184デフォルトの名無しさん:2008/05/20(火) 23:59:36
これだからゆと(ry
185デフォルトの名無しさん:2008/05/21(水) 01:05:07
言っても無駄だから、適当にヒントなり与えてスルーしようよ。
186デフォルトの名無しさん:2008/05/21(水) 01:13:28
>>182 職業に貴賎なし。

だが、海外にも目を向けるとインプリする人はいっぱいいるから、
そういう志向はありだと思う。
187デフォルトの名無しさん:2008/05/21(水) 18:46:46
ファイルテスト演算子を再定義することって可能でしょうか?
188デフォルトの名無しさん:2008/05/21(水) 20:52:09
むり
189デフォルトの名無しさん:2008/05/22(木) 01:15:29
「独習 perl」を一冊
やり通したのですが、次は何をすべきでしょうか?
perlの機能を覚えただけで実用的な使い方は学べていません。
次は何をしたらいいでしょうか?
190デフォルトの名無しさん:2008/05/22(木) 01:28:32
何かを作る。
ファイルの一括処理プログラムとか、板違いではあるがCGIなんかでもいい。
191デフォルトの名無しさん:2008/05/22(木) 03:09:43
自分が何をしたいのか、わかりません。

てか?
192デフォルトの名無しさん:2008/05/22(木) 03:15:25
そもそも何で perl をやろうとしたのかって話だ
193デフォルトの名無しさん:2008/05/22(木) 03:50:29
プログラムって何かを作るためにある道具であって
何を作るかは作り手が考えなきゃどうしようもなかろう。
194デフォルトの名無しさん:2008/05/22(木) 04:11:01
>>189
適当なフリーのCGI等をダウンロードして
辞書的に使える本(Google先生でもOK)で調べながら
ソースを読んでみる。

ある程度理解できるようになったら、それを少しだけ改造してみる。

これを繰り返すだけでも相当勉強になると思うよ。
195デフォルトの名無しさん:2008/05/22(木) 09:02:43
ネットに転がってるperlで書かれたCGIやCGI解説本のソースはほぼ100%クズなので
初心者はそんなものを見てはいけない。
196デフォルトの名無しさん:2008/05/22(木) 09:14:39
言いますね…
197デフォルトの名無しさん:2008/05/22(木) 10:03:26
まあ、メジャーな掲示板のcgiコードもひどいもんだ。
一番良い例が、しばらく前までの2ch。

今動いているのはプロが書いたはずだから、ちゃんとしているはずだけど、
公開されてんのかね。
198デフォルトの名無しさん:2008/05/22(木) 10:13:12
フリーGGIはオススメできない
書き方が古いから。
199デフォルトの名無しさん:2008/05/22(木) 10:41:17
>>191
自分がやって「楽しい」と思うものでなければ、長続きしない。
例えば、任意の文字列を入力すると、
                         ▄         ▄▄▄▄▄▄▄▄
  ▄▄▄▄▄▄▄      ▄▀      ▄▄█▄▄  ▄▄   █▄▄▄▀  █
              ▄▀        ▄▀    ▄ ▀  █▄▄█▄▄ █
             ▄█▄▄       █     █    █▄▄█▄█ █
 █          ▄▀   █   █ █  ▄▀▀▀█▄   █  █ ▄ █ ▄
 ▀▄▄▄▄▄▄▄▄ ▄▀    ▀▄▄▀     ▀▄▄▄▀ ▀ █ ▀▀▀▀ ▀ ▀█
に変換するスクリプトを作ってスレを荒らすというのはどうだ?
200デフォルトの名無しさん:2008/05/22(木) 11:22:02
>>199
それくれw
201デフォルトの名無しさん:2008/05/22(木) 12:34:25
>>197-198
同じ事をするにも何通りも書き方がある,

というのとは違うのかい?正直わからん。
202デフォルトの名無しさん:2008/05/22(木) 12:37:30
>>197
2chのbbs.cgiは8年ぐらい前に流出した以外に表に出てないと思うのだが。
203デフォルトの名無しさん:2008/05/22(木) 16:25:48
>>201
perlのCGIがブームだった頃に作られた遺産がたくさん残ってる。
それらは大抵perl4時代のコードのままメンテナンスされてない。
204デフォルトの名無しさん:2008/05/22(木) 17:32:22
元々の>189からの話の流れからすると、特定のものを批判するより
これ読めってのを挙げた方がいいと思うが、定番といえそうなものがないな。
205デフォルトの名無しさん:2008/05/22(木) 17:34:57
普通に推奨本のコードを真似れば良いよ。
206デフォルトの名無しさん:2008/05/22(木) 18:19:24
ラマですね、わかります。
207 ◆TWARamEjuA :2008/05/22(木) 20:21:28 BE:1961429-2BP(7088)
おいちゃん=プロですね。わかるます。
208デフォルトの名無しさん:2008/05/22(木) 20:32:50
やっぱある程度面白くないとね。
mailあたりをいじってみたらどうかな
209デフォルトの名無しさん:2008/05/22(木) 20:44:22
>>189
2-gramの全文検索エンジンの試作オススメ。
リスト処理や文字列処理などまんべんなく入ってる。
210デフォルトの名無しさん:2008/05/22(木) 20:59:36
モチベーション最強は、やっぱエロだろ。
211デフォルトの名無しさん:2008/05/22(木) 21:12:29
・出版ブームが終了してまともな本が出てない
・Apache + mod_perlでも面倒なのにモジュールとか考えたくない
・webで探すとまともにメンテされてない糞ページがヒットしまくる
・Perl自体の記法が自由すぎるせいでそのページのコードが古いのかこっちの設定ミスなのでエラー出してるのか区別ができない

参入障壁高すぎ
212デフォルトの名無しさん:2008/05/22(木) 21:37:14
>・出版ブームが終了してまともな本が出てない
>>2以外の本はビブリオマニアでなければ必要ないよ。

>・Apache + mod_perlでも面倒なのにモジュールとか考えたくない
文の前後が繋がってないよ。

>・webで探すとまともにメンテされてない糞ページがヒットしまくる
Perlの疑問はググる前にperldocだよ。

>・Perl自体の記法が自由すぎるせいでそのページのコードが古いのか
>こっちの設定ミスなのでエラー出してるのか区別ができない
最新のperl(1)でもPerl4時代のコードが問題なく動くよ。
混ぜておかしくなるのは「新旧」でなく「お作法」だよ。
213デフォルトの名無しさん:2008/05/22(木) 23:42:33
Perlでクロスワードパズルつくってみたいんだ
まずは その準備として単語(表記はカタカナで)とその対応説明が
登録されているデータベース(Excelでもテキストでもなんでもいい)
が必要です。どなたか知ってたら教えてください。それではおやすみ。
214デフォルトの名無しさん:2008/05/22(木) 23:46:34
>>213
っ[Wikipedia]
215デフォルトの名無しさん:2008/05/23(金) 00:01:31
クロスワードパズルは数理パズルじゃなくて、おちゃらけクイズごっこだから得る物ないよ
216デフォルトの名無しさん:2008/05/23(金) 01:46:17
chasenの辞書からも取り出せるんじゃないかな。
217デフォルトの名無しさん:2008/05/23(金) 01:51:48
茶筅の辞書に言葉の意味なんて入ってないだろ
218デフォルトの名無しさん:2008/05/23(金) 07:32:37
>>213
クロスワード作るのとPerlは無関係
まず紙に書いて作ってPerlで起こす時に分からないことあったらまた質問しな
219デフォルトの名無しさん:2008/05/23(金) 23:40:22
\xe3\x80\x9cは変換できるのに、\xc2\xa2は変換できん。何故?
$PTNの内容をs///にべた書きすると変換できるようになる。何故?tr///が高速ならこんなことせんでもええのに。何故?
(ver. 5.8.5)


use encoding "utf8";use Encode;
binmode STDIN, ":utf8";
binmode STDOUT, ":utf8";

$PTN="(\xe3\x80\x9c|\xc2\xa2)";
%HASH=("\xe3\x80\x9c"=>"\xef\xbd\x9e","\xc2\xa2"=>"\xef\xbf\xa0");

while(<STDIN>)
{
s/$PTN/$HASH{$1}/geo;
print;
}
220デフォルトの名無しさん:2008/05/24(土) 02:10:23
http://w8ac6nxs.hp.infoseek.co.jp/cgi-bin/soldout/index.cgi

perlで書かれたCGIゲームです。
パーラーのみなさん、ユーザーとして
どうぞ登録してください。

まだプレイヤー4人くらいしかいません。

ユーザーの50%をパーラーにしたいという
計画です。
221デフォルトの名無しさん:2008/05/24(土) 03:24:15
>>219
$PTN="(\x{301C}|\x{00A2})";
222デフォルトの名無しさん:2008/05/24(土) 03:26:18
223デフォルトの名無しさん:2008/05/24(土) 11:07:24
>>221
ダメでした。
\x{00a2}が\xc2\xa2じゃないものになってしまいます……。
224デフォルトの名無しさん:2008/05/24(土) 11:51:07
>>前スレ928の方
utf8を扱う tr/// で再帰時に落ちる件、ActivePerl 5.10.0.1003 では正常になっていました。
詳細は未確認だけど、33747 のmg.cへの修正が効いている感じ。
225デフォルトの名無しさん:2008/05/24(土) 13:24:03
>>215

英会話の勉強とか。。。perlのコマンド、モジュール名だけでできたクロスワードだったら
といてみたいかも。
226デフォルトの名無しさん:2008/05/24(土) 13:25:32
>>225
「Head First Java 第2版―頭とからだで覚えるJavaの基本 (単行本) 」
ではJavaに関連した単語でクロスワードパズルがあった。
227デフォルトの名無しさん:2008/05/24(土) 17:26:41
>>219
ソースコード中に「use utf8」の宣言が無いから、全ての文字列は、
UT8フラグの無い、シングルバイトの文字から構成されていることになる。
ネット上の情報からすると、Perl では、UTF8 フラグ
なし文字列を Latin-1 文字列とみなしている(らしい)。次に、
binmode STDOUT, ":utf8";
の宣言があるから、print 文等において文字列が出力される際には、
シングルバイトのLatin-1 文字列が、utf8に変換される。その結果、
このような現象が起きる.....ということでいいのかな?

間違っていたら、エロイ人、修正して下さい。
228デフォルトの名無しさん:2008/05/24(土) 19:50:41
だから猿用のテンプレを何で貼らんのよ?
229デフォルトの名無しさん:2008/05/24(土) 19:58:46
>>227
>>3
#!/usr/bin/perl -w
require 5.008001;
use encoding 'utf8';
print utf8::is_utf8('binary?') ? 'with utf8 flag' : 'binary';
__END__

>>228
utf8 プラグマも encoding プラグマも使わないに越した事ないし。
フラグの有無で悩むより、マルチバイト文字処理が本当に
必要な箇所でだけフラグ付け外しする方がよっぽど楽。
230デフォルトの名無しさん:2008/05/24(土) 20:02:05
つーかおまえら。
shは使わない方がいい、Perl使うべきだ。
とかいって、perlで

$test = `cat /home/test/test.txt`

とか多様してるやつってなんなの?
231デフォルトの名無しさん:2008/05/24(土) 20:02:50
Missing ;
232デフォルトの名無しさん:2008/05/24(土) 20:22:26
使うななどとどこのどいつが言ってるんだ?

ものぐさ番長=パーラーだ。
233デフォルトの名無しさん:2008/05/24(土) 20:34:51
猿用のテンプレってこれだっけ?
次スレからは入れような。

---------------------------------------------------------
#  【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)";
# 次に、あなたが実行したい処理の内容を入れて下さい。
print "SJISには、「十表貼申予暴」のようなダメ文字がある。\n";
sleep(1);
# 以上の内容は、日本語処理が解らない人でも、とりあえず日本語処理ができてしまう
# おまじないです。条件が異なる場合の対処方法は、ご自分で勉強して下さい。

234デフォルトの名無しさん:2008/05/25(日) 02:05:50
>>230

if( `[ -f /home/test/test.txt ]` ) {
 $test = `cat /home/test/test.txt`;
235デフォルトの名無しさん:2008/05/26(月) 21:58:51
>>219です。
結局、\xc2\xa2の置換は諦め、別ツールで提供することになりました。
別のバージョンとか調べている時間がない……。
236デフォルトの名無しさん:2008/05/26(月) 22:16:31
>>234
if( -f /home/test/test.txt ] )
{
$test = `cat /home/test/test.txt`;
}
237デフォルトの名無しさん:2008/05/26(月) 22:17:11
>>234
if( -f /home/test/test.txt)
{
   $test = `cat /home/test/test.txt`;
}
238デフォルトの名無しさん:2008/05/26(月) 22:57:43
普通

my $test = `cat /home/test/test.txt` if(-f /home/test/test.txt);

だろ
239デフォルトの名無しさん:2008/05/27(火) 01:22:49
240デフォルトの名無しさん:2008/05/27(火) 22:41:24
C言語のプラグラミングできたお。

void main(int argc, char**argv)
{
 system("cat /home/test/test.txt");
}
241デフォルトの名無しさん:2008/05/27(火) 22:48:04
http://www.amazon.co.jp/dp/4871483517

これが書かれた頃は perl など無かったが
まさに、system() 関数使いまくろう!的な内容。
242デフォルトの名無しさん:2008/05/28(水) 00:33:29
cでやるとすごく損した気になるんだよなあ
243デフォルトの名無しさん:2008/05/28(水) 18:50:42
perlでやっても損でしょ。
perlでできる処理はperlでできるだけやるべき。

catとか。
244デフォルトの名無しさん:2008/05/28(水) 19:08:58
>>243
確かにそうなんだけど、catについてはそうかな〜。

perl だったら、open,while,colose (またはread)とかで三段処理踏まないといけないから、
cat なんかは $test = `cat file.txt` なんかはよく使う。
実際どっちが早いとかBenchとったことはないけど・・・。
245デフォルトの名無しさん:2008/05/28(水) 19:09:46
失敬、close間違い
246デフォルトの名無しさん:2008/05/28(水) 19:12:39
かなり遅いよ、perlで外部コマンド実行したら。

相当な差がある。
コード的には段階踏んでるが。
247デフォルトの名無しさん:2008/05/28(水) 19:20:10
一つ関数を書くか、CPANから探してきて使うだけでしょ
248デフォルトの名無しさん:2008/05/28(水) 19:36:06
qxはforkしてshell起動して実行して・・・って感じなので
perlだけで終わらせたほうが圧倒的に早い

File::Slurp使うか、入れるのめんどくさかったら
sub slurp {open my $fh , $_[0] || die("$_[0]:$!");local $/;<$fh>}
って書いとけばOK
249244:2008/05/28(水) 20:06:16
いやいや、そりゃあ自分も本格的な(?)スクリプト書く時や、
複数のファイルにループ処理する時はサブルーチンで書いたりするよ。

そうでなくて、ちょっとした確認とかで数行のスクリプトとか、
コマンドラインからのワンライナーみたいな感じで書く時には便利かな ってゆうぐらい。

そんな時にまで、いちいち、useやrequireやsub{}なんて書きたくないじゃん。
250デフォルトの名無しさん:2008/05/28(水) 20:21:38
>>244
数行だとか、処理速度とか処理効率を考えなくていいなら便利。
あくまでコマンドレベルの用途ね。

ただ不明なのが、
>サブルーチンで書いたりする
ってとこ。

関係が不明なんだけど。
251デフォルトの名無しさん:2008/05/28(水) 20:50:01
むっか〜しは、sortは外部コマンドでやってたりしたもんだ。

環境やバージョンが変わったら、こまめにベンチマーク取って
最適の方法を探らないとね。
252デフォルトの名無しさん:2008/05/28(水) 21:09:03
「cat を使う」
…ねえ。知ってると思うけど
$ cat > foo.pl
#!/usr/bin/env perl -n
print ;
}
{
print "foo\n" ;
# control + D をタイプ
$ perl foo.pl foo.pl foo.pl
$ perl -lne '}{ print $. ;' foo.pl

253デフォルトの名無しさん:2008/05/28(水) 21:25:17
そいつは初耳だ
解説よろしく
254デフォルトの名無しさん:2008/05/28(水) 21:46:36
>>253
optionに関しては perl -h するなりで
-n assume "while (<>) { ... }" loop around program
-p assume loop like -n but print line also, like sed
で実際の挙動を見るには
perl -MO=Deparse -ne 'print;'
この結果を見ると while ループで単純にかこってあるだけだから
ループの終りの「}」と無名ブロックの始まりの「{」を入れて
好きな様に処理させる。
応用すれば、「tsvの第二カラムの積算」なんてのは
perl -lane '$t += $F[1] ; }{ print $t ;' FILE

スクリプトファイルにしたときも同じ事。B::Deparse にて確認して。
perl -MO=Deparse foo.pl
あとはお好みに。これで手に負えない時とかstrict適用したい時は
普通に書きゃいいだけだし。
255244:2008/05/28(水) 22:41:30
>>250
それは、>>247>>248に対するレスで、例えばopen();while(){うんたらかんたら・・・}close();を
一まとめにしたサブルーチンなんかに投げるってこと。

いや、スマン。244で速度のこととか言い出したんだけど、
自分が言いたかったことは、>>240-243までの流れで、ちょっとした処理(>>240とかw)を
わざわざCで書いたんなら、かなり損した気分になるのは大いに理解できるけど、
それをperlでやるのは、そんなに損した気にはならない、
ってゆうか、perlだからこそ、$nakami = `cat file.txt`;や@files = `find ・・・`;
みたいな事が手軽に出来る、ってのが、perlの大きな魅力の1つではないかと自分は思ってる。
ってことを言いたかった。

>>252
それはオレも初耳。
完全に理解しきれてないけど、色々応用が効きそうだ。
256デフォルトの名無しさん:2008/05/28(水) 23:31:00
>>246
>>248
「かなり」 とか 「圧倒的に」 とか、ずいぶんアバウトだな。
そんなんじゃ全然説得力が無い。

たとえば、$a = `cat unko.txt` すると 0.1秒かかるとしよう。
open・read・close すると0.01秒しかかからないとしよう。
で?それが何なの?どうなのよ、って事だ。
えっ?10倍早いだって?
おいおい、0.1−0.01=0.09秒しか違わないんだよ。
たったの0.09秒の差を人間が感じ取れるとでも思うの?
アフォくさ。
257デフォルトの名無しさん:2008/05/28(水) 23:34:30
>>256
whileかけるようになったらまたおいで。
258デフォルトの名無しさん:2008/05/29(木) 00:09:41
>>256
一回だけ処理するならその程度で済むかもね。
259デフォルトの名無しさん:2008/05/29(木) 00:29:53
svn より、cvs のほうがインストールの敷居は低いんじゃないかなぁ。
cvs のほうが依存するライブラリ少いし、FreeBSD なら最初から入ってるし。
260デフォルトの名無しさん:2008/05/29(木) 00:42:12
俺はsubversion派だわ

って誤爆か
261デフォルトの名無しさん:2008/05/29(木) 13:56:47
誤爆じゃないだろ。perldoc.jpの話じゃね?
262デフォルトの名無しさん:2008/05/29(木) 15:29:41
my $message = "He is 5 years old\n";
$message =~ s/(\d+)/{ twice($1) }/e; #数字を検索して、2倍して置換
print $message;

これなのだけど
my $message = "He is 5 years old\n";
$message =~ s/(\d*)/{ twice($1) }/e; #数字を検索して、2倍して置換
print $message;

これじゃダメなのはなんで?
263デフォルトの名無しさん:2008/05/29(木) 15:35:34
* は0回以上の繰り返しだから、先頭でマッチする。
264デフォルトの名無しさん:2008/05/29(木) 18:45:13
(\d*)

全てが任意なので、全ての行で置換が行われることに
265デフォルトの名無しさん:2008/05/29(木) 18:47:59
先頭つーか、全ての文字の間にマッチする。
266265:2008/05/29(木) 18:48:46
\d\d*

でやってみ。
267デフォルトの名無しさん:2008/05/29(木) 19:34:03
>>265
egじゃなくてeだから、この場合は先頭だけだろう。
268デフォルトの名無しさん:2008/05/29(木) 21:48:26
お、eをgと見間違えたわ。
269デフォルトの名無しさん:2008/05/29(木) 21:59:34
いーじーさんにつーれられーてー・・・
いや何でもない
270デフォルトの名無しさん:2008/05/29(木) 22:23:27
逝っちゃった
271デフォルトの名無しさん:2008/05/29(木) 23:56:31
横浜港 乙
272デフォルトの名無しさん:2008/05/30(金) 03:29:45
港のヨ〜(ry
273デフォルトの名無しさん:2008/05/31(土) 19:56:52
cpan起動出来なくなりました。

#cpan
Unable to get Terminal Size. The TIOCGWINSZ ioctl didn't work.
The COLUMNS and LINES environment variables didn't work. The resize program didn't work.
at /usr/local/lib/perl5/site_perl/5.8.3/i386-freebsd/Term/ReadKey.pm line 362.
Compilation failed in require at /usr/local/lib/perl5/site_perl/5.8.3/Term/ReadLine/Perl.pm line 63.

とエラーが出ます。
恐らく、perlのバージョンアップした際に不具合が生じているのかと思うのですが・・・。
ネットで解決法を探すも情報がほとんどなく手がかりもつかめません。

perl v5.8.3
OS FreeBSD 4.2-R

助けて下さい。お願いします。
274デフォルトの名無しさん:2008/05/31(土) 20:09:04
もっかいCPANインスコしなおせばいいじゃん
275273:2008/05/31(土) 21:57:38

インストールしなおしてみましたが、ダメでした。
同じ症状です・・・。トホホ。
276デフォルトの名無しさん:2008/05/31(土) 21:58:41
12 May 2008 20:15:40

2008/05/12 20:15:40
という風に返すモジュールないですか?

277デフォルトの名無しさん:2008/05/31(土) 22:02:33
>>273
どこでおかしくなっているか明示されているんだから、
見てみればいいだけ。
278デフォルトの名無しさん:2008/05/31(土) 22:19:44
>>276
use HTTP::Date qw(str2time time2iso)
print time2iso( str2time("12 May 2008 20:15:40") );
279デフォルトの名無しさん:2008/05/31(土) 22:22:11
ああスラッシュ(/)か >>278 なし
280デフォルトの名無しさん:2008/05/31(土) 22:27:06
>>276
Date::Manipかな。日付を扱うならDate::Calcとともに定番。

perl -MDate::Manip -e 'print UnixDate("12 May 2008 20:15:40", "%Y/%m/%d %H:%M:%S")'
281276:2008/06/01(日) 00:57:56
>>278
>>280
280氏のDate::Manipで解決できました。ありがとうございました。
282デフォルトの名無しさん:2008/06/01(日) 04:50:03
activeperl v5.10.0 built for MSWin32-x86-multi-thread
において

 GD v2.39
 GD::Graph v1.4308
 GD::Text v0.86





use GD;
use GD::Text;

use GD::Graph::bars;
my $graph = GD::Graph::bars->new( 800, 800 );
my $gd_text = GD::Text->new();
GD::Text->font_path( _______DIR______);
$gd_text->set_font(_______FONT______, 178) ;#or die $gd_text->error;
$graph->set_title_font(_______FONT______, 178 );


_______DIR______ = undef | '' | 何か意味のある値
_______FONT______ = undef | '' | 何か意味のある値

をWindowsXP SP2あるいはWindows2k SP1で実行したとき
どうもシステムのフォントを破壊?するようです
283232:2008/06/01(日) 04:57:25
以下windows板に書いた物。

windows XP

起動してみると ”ようこそ”が明朝体になってて
ファイル名の全角空白までも文字化けしている状態になりました。

標準で恐らく第1水準漢字が表示できたりできなかったりするフォントが選択されているようです。
検索 -> 索 が表示できない
削除 -> 削 が表示できない
書き込む −> 込 が表示できない

またcmdで日本語が返ってくるような状態
>> c:\hoge\foo.bar (実際には存在しないファイル)
とかタイプすると ■■■■■ ■■■■と文字化けして
(ファイルが見つかりませんとかそんな感じのメッセージ)と返ってきます。

http://support.microsoft.com/kb/880991/ja
に従ってフォントキャッシュを消して再起動しても改善されませんでした。


Windows 2000 SP1では IE6の検索ウインドウに英字を入れるとイタリックに化ける
という共通してんだか共通してないんだかな現象が発生します。


232に書いたコードを実行したときに即に破壊するわけではなく、次回起動時から影響が出始めるので
何がどうなってるのかまったく分からない上に妙な分野にまたがった問題のために、
5時間戦って何にも戦果が上がらずもう疲れたのでとりあえずよし牛でも行ってからOS入れなおすことにしますた。

GD(GD::Textだと思うんだけど)使うときは気をつけてください。
284282:2008/06/01(日) 05:17:28
すみません、 訂正 283 で s/232/282/g; で読んでください。
再現したくないのでぜんぜん検証ができないのですが
これはCPANの作者さんにも報告したほうがいいのでしょうか?
285デフォルトの名無しさん:2008/06/01(日) 17:00:58
ヤフオクの管理をしようと思います

とりあえず出品リストを作ろうと思って、
http://openuser.auctions.yahoo.co.jp/jp/user/my46giga
の内容の取得をしようと思っても、アダルト商品なので表示されません
クッキー周りだと思うのですが、うまくいきません
書いてみたのは下のようなもので、
yahoo_cookieには[email protected][2].txtの内容を
#LWP-Cookies-1.0
Set-Cookie3: YAUC_AV=.....
みたいな感じでコピーしてあります
どこが間違っているのでしょう

use LWP::UserAgent;
use HTTP::Request::Common;
use HTTP::Cookies;
use Encode;
$cookie_file = 'yahoo_cookie';
my $cookie_jar = HTTP::Cookies->new(file => $cookie_file, autosave => 1);
$ua = LWP::UserAgent->new;
$ua->cookie_jar($cookie_jar);
$req = GET "http://openuser.auctions.yahoo.co.jp/jp/user/my46giga";
$res = $ua->request($req);
print $res->content;
286デフォルトの名無しさん:2008/06/01(日) 17:12:13
どういう風にできないの?
287デフォルトの名無しさん:2008/06/01(日) 23:15:25
要素に配列への参照か文字列を含んだ再帰的な配列を出力するプログラムを作ろうとしているのですが
ややこしくてついアイスに手を出してしまいます。
どうすれば幸せになれますか

my @a=(1,2,3);
my @b=qw(a b c);
my $c=[\@a,\@b];
my $aa=[1,2,3];
my $bb=[4,5,6];
my $cc=[\$aa,\$bb];
sub pr{
    my($depth,$ary_ref)=@_;
    if((ref $ary_ref) eq "ARRAY"){
        foreach (@$ary_ref){
            pr(($depth+1),$_)
        }
    }elsif(defined $$ary_ref){
        print $depth,":",$$ary_ref,"do something\n";
    }else{
        print "do nothing\n";
    }
}
pr $cc;
pr $c;
288287:2008/06/02(月) 08:56:48
自己解凍しました。
289デフォルトの名無しさん:2008/06/02(月) 11:07:13
書きたかっただけだろw
290デフォルトの名無しさん:2008/06/02(月) 12:34:14
sendmailで受信したメールを、procmailからperlスクリプトを起動して処理しているのですが処理結果ない場合があります。
どこかでエラーが出て止まっていると思うのですが、エラー内容をファイルに出力できないでしょうか?
.procmailrcを

:0
|perl ./foo.pl 2>&1 > ~/out.txt

としてみましたがout.txtにはなにも出力されませんでした。(空ファイル)
291デフォルトの名無しさん:2008/06/02(月) 12:44:59
Windows だとその書き方はダメで
perl ./foo.pl > ~/out.txt 2>&1
というふうに 2>&1 を後ろにもっていく必要がある。
Unix 系はどうか知らん。
292デフォルトの名無しさん:2008/06/02(月) 12:55:40
2>&1は後ろに持っていくはず。
Unix系でも。
293デフォルトの名無しさん:2008/06/02(月) 13:42:21
perl ./foo.pl 2> ~/out.txt

じゃだめだっけ?
294デフォルトの名無しさん:2008/06/02(月) 14:45:45
>>290
リダイレクトは左から評価されるんで、順序に注意汁ってこったな

2>&1みたいのはイメージ的には $b = $a みたいな変数のコピー
>~/out.txtみたいなのは $a = "hoge" みたいな代入
と思っておけば、イメージ的にはほぼ間違い無い

$b = $a;
$a = "hoge";
とかやっても、$bは"hoge"にならないでしょ
逆順だと上手くいくけど
295デフォルトの名無しさん:2008/06/02(月) 19:03:12
少しそれるが、この右からとか左からとかってのは結局のところ
対象の言語の実装がfastcallとかstdcallとかってことかね
296290:2008/06/02(月) 19:33:01
>>291-294
ありがとうございます。解決しました。
perlじゃなくてshellの問題でしたね。すいません。
294氏のイメージは理解しやすかったです。
297デフォルトの名無しさん:2008/06/02(月) 21:15:52
binmode(STDOUT);
と指定したものをテキストモードに戻すにはどうしたらよいでしょうか?
298デフォルトの名無しさん:2008/06/02(月) 21:40:55
binmode(STDOUT, ":crlf");

perlfunc読めよ糞が
299デフォルトの名無しさん:2008/06/02(月) 22:59:05
     ↑
キミ、後輩を育てられないタイプだね。
300デフォルトの名無しさん:2008/06/02(月) 23:06:24
うん。自分でもそう思う。
でも、いまのところ自営業で後輩いないからなんとかなってる。
301デフォルトの名無しさん:2008/06/02(月) 23:11:36
相手に糞とか言う輩は、殆どの場合己がそうだから。
302デフォルトの名無しさん:2008/06/02(月) 23:31:02
相手をくそとか言う輩は,ほとんどの場合周囲からくそと言われてるから。
303デフォルトの名無しさん:2008/06/03(火) 00:41:30
>>301
> 相手に糞とか言う輩は、殆どの場合己がそうだから。

調査不可能なことを断言する嘘つきの出現です。
304デフォルトの名無しさん:2008/06/03(火) 02:06:42
断言してないような
305デフォルトの名無しさん:2008/06/03(火) 02:30:56
質問してもいいでしょうか?
winxp sp2を使っていて、activeperlを入れています。

パソコンのボリュームの調整をするコードを書きたいのですが、
perlからでもそういうのはいじれるのでしょうか?

メイン音量・WAVE、あと、wmpなど音楽再生ソフトの音量もいじりたいです。
どこか参考になるサイトなどありますでしょうか?
306デフォルトの名無しさん:2008/06/03(火) 03:48:25
なんでperlで?
VBでも使った方が良くね?
307デフォルトの名無しさん:2008/06/03(火) 07:37:39
>>305
どうしてもPerlでやりたいなら、Win32APIをつかえば?
それ以上は、Perl関係ない。
308デフォルトの名無しさん:2008/06/03(火) 17:03:21
use utf8;
binmode STDOUT, ':encoding(cp932)';

このコードを他のOS環境で使うためには
:encoding(cp932) を手作業で書き換えてもらってるんですが
自動取得することはできますか?
そのOSのデフォルトのコードページとかエンコードとかを
自動取得することは出来ますか?
309デフォルトの名無しさん:2008/06/03(火) 17:32:59
>>308
「そのOSのデフォルトのコードページとかエンコードとか」というのが
そもそも不明。

310デフォルトの名無しさん:2008/06/03(火) 18:18:44
>>308
OSごとにデフォで使われてる文字コードを完璧に判定することはできない。

同じ記述なら一括で置き換えればいいだけだし
共通する部分なら最初に開発した段階で
定数なり関数なり作ってそこに定義しておくべきだった。
311デフォルトの名無しさん:2008/06/03(火) 19:03:49
>>308
OS名や環境変数で、ある程度は判別できるだろうね。
312デフォルトの名無しさん:2008/06/03(火) 20:04:39
>>311
> OS名や環境変数で、ある程度は判別できるだろうね。

「そのOSのデフォルトのコードページとかエンコードとか」が存在するかどうか
とか、それを守っているのかとか、そもそも一貫性があるのかとか
はいちいち調べないとね。

313デフォルトの名無しさん:2008/06/03(火) 20:21:42
出力の話なんだから環境変数LANGみて空ならCP932にするだけで
ほぼ解決しないかな?
314デフォルトの名無しさん:2008/06/03(火) 21:48:18
中国とかフランスとかドイツの Windows って、環境変数 LANG に何て設定してあるの?
315デフォルトの名無しさん:2008/06/03(火) 22:25:52
そもそもUNIX系OSには「OSのデフォルトのコードページとかエンコード」なんて概念自体無いわけだが。
LANGはOSのデフォじゃなくて、「その人が端末に表示したいエンコード」。
端末装置はユーザごとに異なるのが当たり前・・・というUNIXの基本を忘れてるよ。

んで、メンド臭いなら全部 UTF8 にしたら?
今時のWindowsのメモ帳ならUTF8開けるよ。
316デフォルトの名無しさん:2008/06/03(火) 22:29:21
Unix環境なら
use open ":locale";
とかでよきに計らってくれるようだが
Win32だと良い方法はないかも
317デフォルトの名無しさん:2008/06/03(火) 22:32:43
> use open ":locale";

これも駄目。
何故なら、プロセスの実行環境と、その出力を閲覧するユーザのlocaleが一致する保証は無いから。
318デフォルトの名無しさん:2008/06/03(火) 22:36:41
>>317
それが「いい」か「だめ」かはケースバイケースでしょ。

それで少なくとも伝統的なUnixのI18N/L10Nプログラムと同じ動作にはなる。
Cでsetlocale(LC_CTYPE, "")するのとほぼ同じだから。

無論、設定ファイルや何かでオーバーライドできるようにすることが
望ましいけどね。
319デフォルトの名無しさん:2008/06/03(火) 22:37:25
>>313
他国語版使ったこと無いから知らんけど、cp932が有効なのが
そもそも日本語版Windowsだけなんじゃないかな。

>>314
中国はbig5?(と思ったら、Windowsでは、GB2312(cp936)らしい??)
フランス等ラテン語件はlaten-1(ISO-8859-1)なんじゃね?(cpだと1252)

>>316
VCからなら、locale取得したり、変更したりする関数があったハズ。
Win32APIから叩けそうな気がするけど、どうなんだろ。

まあ、日本語環境のみで使用するってんなら、>>313でええかも。
320305:2008/06/03(火) 23:32:11
>>306
CGIでPerlをかじりました。
実行ファイルにしてしまえば(自分のパソコンにはperl入ってるので不要ですが)Perlで問題ないと思いました。
Perlではwindowsを操作するようなプログラムはかけないなんてことはないと思ってたんですが。

特に簡単なのなら言語なんてほとんどなんでもいいのかと。

>>307
win32apiとやらを調べてみます。
321デフォルトの名無しさん:2008/06/04(水) 01:36:05
>>315
UNIXのメモ帳で端末のエンコードが変更できるんですか?

エンコードの概念が無いなら、いったいどうやって漢字を表示するんでしょう?
テキストファイルをopenするのに、いったい何のコードでデコードすればいいんでしょう?
322デフォルトの名無しさん:2008/06/04(水) 02:00:32
>>321
> UNIXのメモ帳で端末のエンコードが変更できるんですか?

「UNIXのメモ帳」という謎の概念が提示されました。

323デフォルトの名無しさん:2008/06/04(水) 02:01:13
viとemacsの戦い
324デフォルトの名無しさん:2008/06/04(水) 02:02:10
ああ、いるんだよ。別なOSを「別なWindows」だと思ってるやつ。
325デフォルトの名無しさん:2008/06/04(水) 02:08:47
しばらく俺の雇用は安泰だな
326デフォルトの名無しさん:2008/06/04(水) 04:11:02
まあ、確かにメモ帳ライクな外見&操作を意識したテキストエディタはあるけどな。
それならUNIXのメモ帳と言っても何ら差し支えは……。
327デフォルトの名無しさん:2008/06/04(水) 05:04:24
>>322
> > UNIXのメモ帳で端末のエンコードが変更できるんですか?

これ全体が謎なんだな。
328デフォルトの名無しさん:2008/06/04(水) 07:03:52
>>320
Perlもモジュールだなんだでいろいろ出来るようにはなったけど
基本はテキスト処理をするための言語だぜ?

ちょっとじかじったくらいなんだったら
それに適した言語をかじり直したほうがたぶん早いよ
329デフォルトの名無しさん:2008/06/04(水) 08:25:15
>>320
win32apiをPerlから使うのは結構面倒なので、場合によるだろうけど、>>305をみると、Perlでコーディングする意味はないと思う。
やってで気ないことはないけど、適材適所ってヤツがある。
VBだと金がかかるという場合、もしVista使ってるならサイドバーガジェットという選択肢もあるかな。
330デフォルトの名無しさん:2008/06/04(水) 10:48:24
>>319
ちょっとやってみた感じだと、ActivePerlでもPOSIXモジュールのsetlocale()は
機能する模様(実際にはMSVCRTのsetlocale()を呼んでいるのだろう)

use POSIX qw(locale_h)
$old_locale = setlocale(LC_CTYPE, "");
とかやると、Japanese_Japan.932とかいう文字列が帰ってくる。
.の後ろがコードページのはず。

cygwinみたいにロケールが完全に腐ってる環境ではどうしようもないけどな。
331デフォルトの名無しさん:2008/06/05(木) 00:25:55
>>323
おーっと、ここで 「ed・はるみ」 が乱入w
332デフォルトの名無しさん:2008/06/05(木) 05:42:10
帰れカス
333デフォルトの名無しさん:2008/06/05(木) 10:17:09
Kwaliteeってなんですか?
334デフォルトの名無しさん:2008/06/05(木) 15:09:00
$ ed
hello, world
?
help
?
quit
?
exit
?
q
?
?
?
--help
?
-help
?
fuck
?
335デフォルトの名無しさん:2008/06/05(木) 16:18:29
ワロた
336デフォルトの名無しさん:2008/06/05(木) 20:11:12
open FILE, '<:utf8', "unko.txt";
read FILE, my $content, (stat FILE)[7];
close FILE;

この (stat FILE)[7] の部分が、見た目が汚く感じるんですが
もっと美しい書き方はありませんか?
read FILE, my $content, 9999999999; とか、死んでもイヤです。
どっかのクソ言語の ReadAll メソッドみたいなのが欲しいです。
337デフォルトの名無しさん:2008/06/05(木) 20:13:08
open my $file, '<:utf8', "unko.txt";
my $content = do{local $/; readline $file}
close $file;
338デフォルトの名無しさん:2008/06/05(木) 21:12:54
-s FILE
339デフォルトの名無しさん:2008/06/05(木) 21:16:32
>>336
っ[File::Slurp]
340デフォルトの名無しさん:2008/06/06(金) 00:13:26
my $content = join("",<FILE>);
341デフォルトの名無しさん:2008/06/06(金) 00:39:53
>>338
そっか、それがあったか。それ使わせてもらいます。感謝感謝。
あとの残りはクズですね。
342デフォルトの名無しさん:2008/06/06(金) 00:46:36
全部読むなら$/をクリアするのが常套手段だろ。
343デフォルトの名無しさん:2008/06/06(金) 00:59:50

OBJS = ${CSRC:.c=r30}

.c.r30:
${CC} $<

Makefile中の$<をPerlを使って置換してCCに渡すことは可能でしょうか?

$<に含まれているスラッシュを\\に置き換えるために
$< =~ s|/|\\\\|g
このような置換を行いたいです。
環境はCygwinPerl5.8.8です。
344デフォルトの名無しさん:2008/06/06(金) 01:00:03
>>341
どうやって使うの?
345デフォルトの名無しさん:2008/06/06(金) 01:11:15
sub write {
 ($fileName, $text) = @_;
 open(FH, "+>$fileName");
 print FH $text;
 close(FH);
}

こんな感じでファイルを出力するコード書いたのですが、
サブルーチン経由だとなぜか動きません
サブルーチンなしだと正しくファイルが書き出されました
なにがおかしいのでしょうか
346デフォルトの名無しさん:2008/06/06(金) 01:21:24
writeという標準関数があるから
347デフォルトの名無しさん:2008/06/06(金) 01:52:38
>>346
writeという標準関数の存在しりませんでしたが
今回はなぜこのコードが動かないかについてよろしくお願いします

というのも、同じ仕様(関数名,引数,戻り値)を複数の言語で記述してみてるだけなのです
348デフォルトの名無しさん:2008/06/06(金) 02:11:42
組み込み関数を再定義するためにはお作法がある。writeが再定義可能かは知らん。
perlsub読むか、親切に解説してくれるおせっかいが通りかかるのをまて。
349デフォルトの名無しさん:2008/06/06(金) 02:23:57
あ、なるほど そういう意味でしたか
文法自体はあってるんですね
ありがとうございます
350デフォルトの名無しさん:2008/06/06(金) 02:35:57
&writeでもだめなのかな。
351デフォルトの名無しさん:2008/06/06(金) 08:19:33
>>349
ほかにどういう意味だと思ったんだ?
352デフォルトの名無しさん:2008/06/06(金) 08:22:01
>>343
makeのsubstやpatsubst関数じゃだめ?

353デフォルトの名無しさん:2008/06/06(金) 08:33:28
perlを始めたばかりなのですが、
foreachやwhile等で、何回目のループかをカウントしているような
変数は無いでしょうか?
自前で用意すればいいだけなのですが、そのような変数が無いかと思い
質問させて頂きます。
354デフォルトの名無しさん:2008/06/06(金) 11:20:21
あったとしても、時前で用意した方が他の人も読み易いんじゃないかな。
355デフォルトの名無しさん:2008/06/06(金) 11:57:16
そういえば、不精なPerlのハッカーたちは、foreachを使わずに全てforを使う……だなんて
どこかに書かれてたような気がするけど、実際どう?

自分は使い分けてる。
356デフォルトの名無しさん:2008/06/06(金) 12:02:27
自分は for かな後ろ見りゃわかるし。
foreach で (;;) とかやらなきゃどっちでも良いとは思う。

357デフォルトの名無しさん:2008/06/06(金) 12:08:14
forもforeachも一緒じゃないの?ただのシンタックスシュガーかと思ってたけど
358デフォルトの名無しさん:2008/06/06(金) 12:17:35
>>357 それを前提として書いたつもり。

a) for my $n (0..9) {}
b) foreach (my $n=0; $n<10; $n++) {}

a は許容できるが、b は嫌かなってこと。




359デフォルトの名無しさん:2008/06/06(金) 12:21:56
for しか使わね。それと、C type の for は使わね。
360デフォルトの名無しさん:2008/06/06(金) 12:29:16
俺も同じくforのみ
361デフォルトの名無しさん:2008/06/06(金) 13:32:56
どうでもいい。
んで、暗黙のループカウンタなんてあったら言語仕様としてきもい
362デフォルトの名無しさん:2008/06/06(金) 15:39:58
C言語の const 変数の様なのは定義できないでしょうか? perl 5.8です。
363356:2008/06/06(金) 16:14:23
んー、やっぱforだけとかの人のほうが多いのね。
まさにPerlスタイル。

>362
use constantとかはー?
364デフォルトの名無しさん:2008/06/06(金) 17:02:47
use Readonly ;
>>361
$. は?w
365デフォルトの名無しさん:2008/06/06(金) 17:07:46
つまりキモイってことですよPerlはw
366デフォルトの名無しさん:2008/06/06(金) 17:19:32
柔軟な頭を持ってない奴が負け惜しみを言ってますw
367デフォルトの名無しさん:2008/06/06(金) 17:23:44
ゴミを美味いと思う自分の狂った味覚を「柔軟さ」と主張する人生ですかw
368デフォルトの名無しさん:2008/06/06(金) 17:31:57
君がゴミだと思って捨てていた部分は実は高値で取引される珍味でした。
369デフォルトの名無しさん:2008/06/06(金) 17:56:23
>>362
Cライクにやりたいなら
use constant NAME => 'hoge';

ただし Perlでベアワードはメンドくさい。
"my name is NAME"
とやっても展開されないから
"my name is ".NAME
とするしかない。

*NAME = \'hone';
これを使えば
"my name is $NAME"
で展開できる。

*C_STR = \'xxxx'; # 文字列定数。参照は $C_STR
*C_NUM = \100; # 数値定数。参照は $C_NUM
*C_ARRY = [1,2,3]; # 配列定数。参照は @C_ARRY
*C_ASSOC = {k1 => v1,k2 => v2}; # ハッシュ定数。参照は %C_ASSOC
370デフォルトの名無しさん:2008/06/06(金) 18:04:39
>>368
まぁ、珍の字はニュアンスぴったりだと思うよ。
Perlの仕様を漢字一字で表せといったら、珍・奇・醜・糞あたりが有力だろうし。
371デフォルトの名無しさん:2008/06/06(金) 18:44:43
forは数値カウンタのときやCライクな使い方のとき。
配列から読み取るってときはforeachにしてるな。こっちはPHPぽい方で
372デフォルトの名無しさん:2008/06/06(金) 18:45:22
>>370
あれ?なんでわざわざこのスレに?
373デフォルトの名無しさん:2008/06/06(金) 18:50:29
・上にあがってるから
・Perlを盲目的に全肯定するキチガイだけが住人ではないから
374デフォルトの名無しさん:2008/06/06(金) 19:03:32
誰も全肯定なんてしとらんがな・・・
375デフォルトの名無しさん:2008/06/06(金) 19:41:58
それを言ったら、誰も負け惜しみなんて言ってないよな。
376デフォルトの名無しさん:2008/06/06(金) 20:34:35
>>373
ゲテモノだってのは認識しとる。
377デフォルトの名無しさん:2008/06/06(金) 21:41:28
>>352
レスありがとうございます。
substを使ってうまくいきました。
ありがとうございました。
378デフォルトの名無しさん:2008/06/06(金) 22:15:29 BE:477576296-DIA(100004)
まず匿名の臆病者は自分の (好きな|メインの) Lightweight Language を言えよ
379デフォルトの名無しさん:2008/06/06(金) 22:52:56
BER圧縮された数値(オフセット値、ID)のビット列に対し、
二分探索法を行なっている実装例ってありませんかね?
380デフォルトの名無しさん:2008/06/07(土) 01:02:59
そういうのはCでやった方が
381デフォルトの名無しさん:2008/06/07(土) 14:17:18
>>378
できるよ。
以上。
↓次どうぞ
382デフォルトの名無しさん:2008/06/08(日) 00:21:35
↑おつかれさまでした
383デフォルトの名無しさん:2008/06/08(日) 19:02:55
他のファイルに変数を設定したファイルを用意し、
そのファイルを読み込み設定された変数を利用したいのですが、
どのようにすれば実現できますか?
384デフォルトの名無しさん:2008/06/08(日) 19:05:01
そのようにすれば
385デフォルトの名無しさん:2008/06/08(日) 19:13:01
そういうふうにプログラムすりゃいいでしょ
386383:2008/06/08(日) 19:14:47
すみません。
サンプルコードなど頂けませんでしょうか?
387デフォルトの名無しさん:2008/06/08(日) 19:16:05
do "configs";
388デフォルトの名無しさん:2008/06/08(日) 19:17:30
D'OH !
389383:2008/06/08(日) 19:19:09
reqireでできました。

阿呆しか答えてくれないので、聞く手間をかけずに調べれば良かったですね。
390デフォルトの名無しさん:2008/06/08(日) 19:26:32
reqireなんてあったか?
391383:2008/06/08(日) 19:26:33
>>389は私ではありません。
requireも試してみたのですが、変数の値が継承されないようで
うまくできませんでした。

>>387
ありがとうございます。
試してみたのですが、requireと同じように変数の値が継承されません。
doと言うものを調べたのですが、while文のdoしかなかなか見付からず
使い方が悪いのかも知れません。
すみませんが詳しく教えて頂けるとありがたいです。
392デフォルトの名無しさん:2008/06/08(日) 19:28:41
まず自分で調べる手間をかけずにいきなり聞くという方法で何か学ぼうとするのもなんだかなあ…。
何かを知ろう学ぼうとするなら知る学ぶ為の正しい手段を取るべきだと思うけどなあ…。
393デフォルトの名無しさん:2008/06/08(日) 19:42:06
>>391
perlfunc嫁
394デフォルトの名無しさん:2008/06/08(日) 19:49:07
何ができないと言っているのかがわからない
395デフォルトの名無しさん:2008/06/08(日) 19:59:13
1行ずつ読み込んでdoじゃだめなわけ?
396デフォルトの名無しさん:2008/06/08(日) 20:18:32
doはファイル名を引数に取るわけだが
397デフォルトの名無しさん:2008/06/08(日) 22:03:27
open FILE, "unko.pl";
read FILE, my $unko, -s FILE;
close FILE;
eval $unko;
398デフォルトの名無しさん:2008/06/08(日) 22:04:06
それならdoでいいだろ。
399デフォルトの名無しさん:2008/06/08(日) 22:32:17
関係ないけど do-dai っていい曲だよね
400デフォルトの名無しさん:2008/06/09(月) 01:10:43
WinXP、perl5.8.8、でPerl/Tkからボタンを押した時にthreadsを使ってバックグラウンド処理をしようと考えています。
バックグラウンド処理そのものは最後まで実行されますが、終了同期を取ろうとjoinを呼び出した時に、クラッシュして更に、Free from wrong pool during global…
となります。

これを回避出来た猛者はいますか?

401有吉 ◆01z1p9gzeo :2008/06/09(月) 01:43:25
子プロセスから親プロセスのTkウィジェットにアクセスするとactiveperlが落ちてしまいます。
$top = MainWindow->new();
$frame1=$top->Frame(-height=>25)->pack(-side=>top,-fill=>'x',-expand=>'no');
$listbox1 = $frame1->Scrolled('Listbox',-scrollbars=>'osoe')->pack(-fill=>'both',-expand=>'yes');
$listbox1_ref = \$listbox1;
if ($pid = fork()) { MainLoop; }
else { &refresh($listbox1_ref); }
sub refresh {
my $listbox1_ref = shift;
$$listbox1_ref->delete(0,'end');
opendir(DIR,'mail/');
@file = sort readdir(DIR);
@file = grep(!/^\.\.|^\./,@file);
foreach(@file) {
my $time = localtime((stat "mail/$_")[9]);
$$listbox1_ref->insert('end',$time);
}
}
ログには
Free to wrong pool 1ec5020 not 274dc8 at C:/Perl/site/lib/Tk.pm line 250.
と出て終わってるようです。refreshの処理中に落ちてるみたいです。
ググったところ、同じ症状の方もいるようですがこの場合の解決策が見つかりませんでした。
子プロセスから親プロセスのウィジェットにはアクセスできないのでしょうか?ご教授ください。OSはWinXP SP2です。
402デフォルトの名無しさん:2008/06/09(月) 01:44:44
改行が多すぎると怒られたので
色々はしょったら読みづらくなりました。
大変申し訳ないです。。
403デフォルトの名無しさん:2008/06/09(月) 11:00:13
>>398
キミ、シロウトだね。
404 ̄ ̄ ̄ ̄ ̄V ̄ ̄ ̄ ̄ ̄ ̄ ̄:2008/06/09(月) 11:09:09
        ,. -ー冖'⌒'ー-、
       ,ノ         \
       / ,r‐へへく⌒'¬、  ヽ
       {ノ へ.._、 ,,/~`  〉  }    ,r=-、
      /ク ̄`y'¨Y´ ̄ヽ―}j=く    /,ミ=/
    ノ /ル'>-〈_ュ`ー‐'  リ,イ}    〃 /
   / _勺 ミ;;∵r;==、、∴'∵; シ    〃 /
  ,/ └' ノ \   こ¨`    ノ{ー--、〃__/
  人__/ー┬ 个-、__,,.. ‐'´ 〃`ァーァー\
. /   |/ |::::::|、       〃 /:::::/    ヽ
/   |   |::::::|\、_________/'   /:::::/〃
405383:2008/06/09(月) 11:24:22
すみません。私の書き込みが悪いとおもうので、再度書き込ませていただきます。

-- define.pl ------
my $hoge = "hoge";

-- body.pl ------
do "define.pl";
print $hoge;

というファイルがあったとしても、body.plでdefine.plの変数が使えません。
どのようにすれば、他のファイルの変数を使えるようになりますか?
406デフォルトの名無しさん:2008/06/09(月) 11:33:56
myしてやがる……
407デフォルトの名無しさん:2008/06/09(月) 11:39:48
>>405
なんというオチ
408デフォルトの名無しさん:2008/06/09(月) 12:31:41
いぢわるしねいで、ちゃんと教えてやれよ。
my じゃなく、 our で宣言しろって事だよ。
409383:2008/06/09(月) 13:03:46
そんなのがあったのですね・・。
簡単に本を読んだのですが、myとlocalがあってmyを普通使う。localはあまり使わない。
という説明でした・・。

リャマ本というのを簡単に確認したのですが。ourって載ってます?
見つけられなかったのですが。
410383:2008/06/09(月) 13:04:12
お礼を言い忘れました。

お手数をおかけしてすみませんでした。
ありがとうございました。
411デフォルトの名無しさん:2008/06/09(月) 13:22:51
最初から405かいときゃ無駄なレスしなくていいのに
jこれだから小出しするやつはうぜぇ
412デフォルトの名無しさん:2008/06/09(月) 13:38:55
>>409
アルパカ本に載ってる。
413273:2008/06/09(月) 13:41:12
>>273

自己レス
いろいろと遠回りしたけど、ReadKey.pm入れ直しで
スンナリ解決しました。

ハァ・・・、なんですぐにやらなかったのか。
自己嫌悪だわ。
何時間費やしとんねん!
414デフォルトの名無しさん:2008/06/09(月) 13:43:11
415デフォルトの名無しさん:2008/06/09(月) 13:46:16
思うんだけど,この業界の人って,自分で調べたことに対して疑問を抱いた!みたいな
感じでブログとかに書いておくと,すげえ補足を書いてくれたりするよね。

俺はそういうところが好きだ。
416デフォルトの名無しさん:2008/06/09(月) 13:48:00
質問です。Perlでクラスを使ってみたいのですが
どのように書けばいいのでしょうか?
知らない用語ばかり出てきて、さっぱり答えにたどり着きません。。

例としてPHP版で書きます。これと同等の機能をPerlで書いてください。
お願いします。

class Hoge {
 private $var1 = 'A';

 function var1() {
  return $this->var1;
 }

 function getValue() {
  return 1;
 }
}

class Hage extends Hoge {
 function getValue() {
  return 2;
 }
}

$hogehoge = new Hoge();
print $hogehoge->getValue();
$hagehage = new Hage();
print $hagehage->getValue();
417デフォルトの名無しさん:2008/06/09(月) 14:10:53
#!/usr/bin/perl
use strict;
use warnings;
{   package Hoge;
    sub new {
        my $class = shift;
        my $self = {var1 => "A"};
        bless $self, $class;
        return $self;
    }
    sub var1 {
        my $self = shift;
        return $self->{var1};
    }
    sub getValue {
        my $self = shift;
        return 1;
    }
}
{   package Hage;
    use base qw(Hoge);
    sub getValue {
        my $self = shift;
        return 2;
    }
}
my $hogehoge = Hoge->new();
print $hogehoge->getValue(), "\n";
my $hagehage = Hage->new();
print $hagehage->getValue(), "\n";
418デフォルトの名無しさん:2008/06/09(月) 14:41:00
>>416
一度perltootをキチンと読んでみては?
和訳↓
ttp://perldoc.jp/docs/perl/5.10.0/perltoot.pod
419デフォルトの名無しさん:2008/06/09(月) 15:35:06
./にローカルインストールしたモジュールを使うことができません。
使おうとしているものはCurses.pm
http://search.cpan.org/src/WPS/Curses-1.06/Curses.pm
です。もしよろしければご教授ください。

$ ls
Curses.pm* test.pl*
$ cat test.pl
#!perl
unshift @INC, ".";
use Curses;
exit;
$ perl -w test.pl
Can't locate loadable object for module Curses in @INC (@INC contains: 略 .) at test.pl line 4
Compilation failed in require at test.pl line 4.
BEGIN failed--compilation aborted at test.pl line 4.
$

420デフォルトの名無しさん:2008/06/09(月) 15:48:35
use lib '.';
421デフォルトの名無しさん:2008/06/09(月) 15:54:07
ba5.txtには以下になってます。
4131048
4131053
x
x
4850328
x
x
x
x
3870357
3870369
x
x
4131038
4131045
x
x
x
この場合にxの行を一番最後の行の数値に置き換えたい場合
perlだとどのようにすればいいんでしょうか。
シェルでやろうとしたんですけどシェルだとちょっと難しいみたいなので
perlでやりたいと思ってます。誰かいいスクリプトを教えて下さい。
宜しくお願いします。
422デフォルトの名無しさん:2008/06/09(月) 16:07:39
>>420
use lib '.'やuse lib qw(.)を試してはいるんですが、>>419と同じエラーが出てしまいます。
また、use Curses;をuse ::Curses;として実行すると、>>419のCompilation failed in require at test.pl line 4.が消え、
Can't locate loadable object for module CursesもCan't locate /Curses.pmと表記が変わります。
423デフォルトの名無しさん:2008/06/09(月) 16:51:43
>>419
本当にCurcesモジュールをインストールしたのか?
Curses.pmをコピーしただけじゃないのか?


424デフォルトの名無しさん:2008/06/09(月) 16:52:54
>>417
ありがとうございます。

継承するときは、
use base qw(Hoge);
なんて書くんですね。

sub newってなんなんでしょう?
なんでそんな関数が必要なのですか?
425デフォルトの名無しさん:2008/06/09(月) 16:55:17
>>423
>コピーしただけ
はい。アクセス権の関係でインストールが出来ないので、
test.plと同じディレクトリにCurses.pmを配置し利用したいと思っています。
426デフォルトの名無しさん:2008/06/09(月) 16:59:36
>>425
だから、Cursesモジュールは、C言語で書かれたバイナリがメインで、
Curses.pmはそのインターフェイスでしかない。
ちゃんとコンパイルしてインストールしないとだめ。
エラーメッセージにある "loadable object" っていうのがそれ。

アクセス権の関係ってどういうこと? インストール過程で、
インストール先を指定できるぞ。
コンパイラも使えないのか?
427デフォルトの名無しさん:2008/06/09(月) 17:00:37
>>424
コンストラクタ

不精しないできちんとperltootを読め。
>>418
428デフォルトの名無しさん:2008/06/09(月) 17:03:00
>>421
聊かエスパーぎみにレス。↓こういう事がしたいのか?
$ perl -pe '$_=$t if/^x/; $t=$_' ba5.txt
4131048
4131053
4131053
4131053
4850328
4850328
4850328
4850328
4850328
3870357
3870369
3870369
3870369
4131038
4131045
4131045
4131045
4131045
429421:2008/06/09(月) 17:16:09
>>428さん
そのとおりです!
ありがとうございます!
430デフォルトの名無しさん:2008/06/09(月) 17:17:17
>>426
ありがとうございます。何か大きな勘違いをしていたようです。
Cの方でcurses/ncursesを使っていたので、システム上にcurses環境があると救いようの無いいい加減な誤認があり、
また、@INCサーチパス上にCurses.pmを置くことが出来ないのでアクセス権という的外れも甚だしい話をしてしまいました。
現在make中です。今のところエラーは吐いていません。

wget http://search.cpan.org/CPAN/authors/id/G/GI/GIRAFFED/Curses-1.23.tgz
tar xvf Curses-1.23.tgz
cd Curses-1.23
#Makefileの生成
perl Makefile.PL GEN PANELS MENUS FORMS
#コンパイル
make
431デフォルトの名無しさん:2008/06/09(月) 17:28:19
>>427
コンストラクタなんですか?

普通、コンストラクタは必要がある場合を除いて
書かないと思うのですが?

書かないとまずいですか?
432デフォルトの名無しさん:2008/06/09(月) 18:16:16
釣れますか?
433デフォルトの名無しさん:2008/06/09(月) 18:24:44
>>427
初心者には perltoot を読むのを薦めるよりも
perlboot を読むのを薦めた方が良いと思うよ
なんとなく読む気が無さそうな気配ではあるけども
5.8 なら以前どこかで perlboot の邦訳も見掛けたた気がするけど
434デフォルトの名無しさん:2008/06/09(月) 19:43:23
>>428
すげー。そういう意味だったのか。
そこまで読めなかったよ。
435デフォルトの名無しさん:2008/06/10(火) 01:30:01
5.005の頃、よくXS書いてたんだけど
その後、Perlはワンライナーでしか使わなくなってしまった。
その頃のXSの知識ってまだ使えるのかな。
436デフォルトの名無しさん:2008/06/10(火) 03:06:37
437デフォルトの名無しさん:2008/06/10(火) 04:02:57
おや、なんだかどこかで見たような……。
438デフォルトの名無しさん:2008/06/10(火) 11:24:14
マルチ死ねよwwwwwwwwww
439デフォルトの名無しさん:2008/06/10(火) 12:02:49
HTML::FillInForm を使用しているのですが、出力されるhtmlから
DOCTYPE 宣言が消えてしまいます。
対処法がありましたら教えて下さい。
440439:2008/06/10(火) 13:58:23
ここ(↓)を参考にして自己解決しました。
http://www.geocities.co.jp/SiliconValley-Sunnyvale/6128/perl/htmlpaser.html

use HTML::FillInForm;
use base qw(HTML::FillInForm);

sub comment {
my($self, $text) = @_;
$self->{output} .= "<!--$text-->";
}

sub declation {
my($self, $text) = @_;
$self->{output} .= "<!$text>";
}
441439:2008/06/10(火) 14:05:33
>>440
× sub declation {
○ sub declaration {
442デフォルトの名無しさん:2008/06/11(水) 15:39:31
ロード済みのサブルーチンと同じpackageかつ同じ名前のサブルーチンを含む外部plファイルを
requireすると、後の内容で上書きされてしまいますが、元のサブルーチンを壊さないですむ
方法はないでしょうか。
443デフォルトの名無しさん:2008/06/11(水) 18:07:18

皆さん、エスパーでよろ。

意図した挙動にならず、どこが問題かのきっかけも掴めずにかなり時間をかけてしまったが、
ようやくやりたいこと出来た。が、どうにも腑に落ちない。
DB(mysql)からデータとってきて、Scraperに渡して・・・と、こんな感じで組んでいたんだけど、

レコード数は3とします。


パターン1------------------------------------

$rows = $sth->rows;
print "hajimari";

while(my $ref=$sth->fetchrow_hashref()){
$scraper->scrape($ref->{url});
print "roop dayo";
}

print "owari";

このような感じでやっていたんだが、ループが1回しか回らない!?なんで?
てなことで、webで情報あさったり、モジュールのソース眺めてもわからんし。

444デフォルトの名無しさん:2008/06/11(水) 18:07:56

パターン2------------------------------------

$rows = $sth->rows;
print "hajimari";

while(my $ref=$sth->fetchrow_hashref()){
print "roop dayo";
}

print "owari";

と、Scraperになげなかったら、ちゃんと3回ループするんだよね。
でScraperでこけてんのかと思いきや、これも特に見当たんない。
問題なさそうだ・・・。
445デフォルトの名無しさん:2008/06/11(水) 18:08:25

パターン3------------------------------------

$rows = $sth->rows;
print "hajimari";
$i = 0;

while(my $ref=$sth->fetchrow_hashref()){
$url[$z] = $ref->{url};
$i++;
}

for($z = 0;$z < $rows;$z++){
$scraper->scrape($url[$z]);
}

print "owari";

ちょいと思うところがあり、一旦配列にほりこんでみる・・・。
キター!!!3回まわったじゃんか!


ふむ、思うところというのは、Scraperでこけないでループ1週目は
ちゃんとループしているということ。
で、結局ちゃんとした原因が解ってないんだけど、メモリ制限とか
あるのかな?

アドバイス下さい。
(もしかしたら、CGIまわりの問題?)
OS:FreeBSD
Perl:5.8.3
446デフォルトの名無しさん:2008/06/11(水) 18:44:14
デバッグしろよ
447デフォルトの名無しさん:2008/06/11(水) 18:47:02
またきたのか
448デフォルトの名無しさん:2008/06/11(水) 18:48:59
Dump吐いてみたら?
449デフォルトの名無しさん:2008/06/11(水) 18:52:18
内部状態をインスペクトしたら
450デフォルトの名無しさん:2008/06/11(水) 18:56:50
printf だ! printf を挟め!
451デフォルトの名無しさん:2008/06/11(水) 18:59:07
if(!$hoge->{'hoged'}){
    $hoge->{'hoged'} = [];
}

push(@{$hoge->{'hoged'}}, $hoging);

これをスマートに書く方法ありませんか?
ちなみに$hogingは2箇所以上に書くなら一時変数必要です。
452デフォルトの名無しさん:2008/06/11(水) 19:04:06
少し説明がヘタだとは思いますが以下の処理をしたいです。お願いします。
★処理の方法
行の先頭が [ の場合には、行の先頭が 20 の行の先頭にそれを加える
行の先頭が 空白の場合には一旦処理を終えて再度行の先頭の [ を読む
行の先頭に < がきた場合にはその処理を終えて再度行の先頭の [ を読む
結合した場合、その文字列の最後に必ず区切り文字としてタブを挟む
●処理前のabc.txt
<100100>
[1044]あいうえお
20321 1137 4850328 60
20321 1137 4850328 60
20321 1137 4850328 60
   【合計1044】
[1047]かきくけこ
20319 1090 3870357
20319 1101 3870369
   【合計1047】
[1051]さしすせそ
20328 1206 4131038 52
20328 1206 4131045 52
20328 1206 4131045 52
    【合計1047】    
    【累計】
<100200>
[1057]たちつてと
20328 1206 4131045 52
20328 1206 4131045 52 
453デフォルトの名無しさん:2008/06/11(水) 19:04:54
●処理後のabc.txt
<100100>
[1044]あいうえお 20321 1137 4850328 60
[1044]あいうえお 20321 1137 4850328 60
[1044]あいうえお 20321 1137 4850328 60
   【合計1044】
[1047]かきくけこ 20319 1090 3870357
[1047]かきくけこ 20319 1101 3870369
   【合計1047】
[1051]さしすせそ 20328 1206 4131038 52
[1051]さしすせそ 20328 1206 4131045 52
[1051]さしすせそ 20328 1206 4131045 52
    【合計1047】    
    【累計】
<100200>
[1057]たちつてと 20328 1206 4131045 52
[1057]たちつてと 20328 1206 4131045 52

どうかよろしくお願いします。
454デフォルトの名無しさん:2008/06/11(水) 19:15:23
>>452
宿題を肩代わりするスレじゃないんだけど。
少しはperl文を書いてから出なおせ。
455デフォルトの名無しさん:2008/06/11(水) 19:33:31
たしかに最近どうみても入門者向けの課題を回答させようとする連中が多いような?
456デフォルトの名無しさん:2008/06/11(水) 19:39:49
>>451
push(@{$hoge->{'hoged'}}, $hoging);
457デフォルトの名無しさん:2008/06/11(水) 19:55:00
宿題を人に頼む奴は大学やめればいい

学部生いわく。
458443:2008/06/11(水) 19:59:01
>>446-450

おしかりありがとう御座います。
デバックの仕方を勉強します。
Data::Dumper
で一目瞭然でした。

猛省します。

原因はなんだったのかって?恥ずかしすぎて・・・。
言いたくないんですけど。

ループ内で。。。、DBハンドルが・・・。
ごめんなさいごめんなさいごめんなさい

猛省します。
大事なことなので2回言いました。
459デフォルトの名無しさん:2008/06/11(水) 20:17:52
>>456
ありがとう。解決した。
460454:2008/06/12(木) 01:05:52
>>454
すみません。bashで書いていたんですけどbashだとうまくいきそうにないので
perlでお願いしてみました。すみません。bashのコードとしては以下のような感じです。
無茶苦茶なコードですみません。

#!/bin/bash
for iii in `cat abc.txt`
jjj=`sed -n '2p'`
do
if test [ $jjj = "^20" ]
then
paste "$jjj" "\t" "$iii" > ccc.txt

else
fi
done

bashでは無理っぽいのでスクリプトも途中までの処理しかしてないです。
perlで処理すればと思ってお願いにきました。perlはあまりよくわからないのでお願いします
461452:2008/06/12(木) 01:08:15
寝ぼけてて名前間違えました。すみません。
462デフォルトの名無しさん:2008/06/12(木) 01:36:40
正直いうと、>>452に書いてある処理の一覧が全然論理的じゃないので俺には理解できない。

つまり、「一旦処理を終えて」と「その処理を終えて」がどう違うのかとか、
そもそも「その処理」や「その文字列」とは何なのかとか、
行の先頭が空白なのに行の先頭の[を読めとはどういうことなのかとか分からない。
463デフォルトの名無しさん:2008/06/12(木) 02:15:05
処理前と処理後を見ればやりたいことはわかるが、
この程度、forと正規表現使えばどうにでもできるだろ

あと、処理の方法はひどすぎる
自分でもう一回読んでみろ
464デフォルトの名無しさん:2008/06/12(木) 06:43:04
>>460
俺は、「perl文を書いてから出なおせ」と書いた。bashなんか求めてねえ
お前さんがperlで書く気0なのに答えてやる義理なんざねえよ
「perlの知識0です。エスパーしてください。」
って質問には>>428で答えてしまって反省してんだよ
>>436のリンク先でも読んでちったー自分で考えろ
465デフォルトの名無しさん:2008/06/12(木) 09:42:25
>>442

require するときに退避しといて戻せばいいんじゃない?

{
local *hoge::f;

require ...
}

これだと$hoge::fも影響受けるのがやりすぎだというなら、

{
local *hoge::f = sub{};

require ...
}
466デフォルトの名無しさん:2008/06/12(木) 11:03:25
>>442
オブジェクト指向に設計すれば問題なす
467デフォルトの名無しさん:2008/06/12(木) 11:08:45
オブジェクト指向までやらなくてもせめてモジュールにして
Exporter使う方が楽だろうと思う。

読みたいファイルが他人が作ったもので中身も見たくない
のならしょうがないけどな。
468デフォルトの名無しさん:2008/06/12(木) 11:20:59
5.10にしたらsvkが動かなったんだけどsvk使ってる人はどうしてんの?
469デフォルトの名無しさん:2008/06/13(金) 01:15:19
require や do でベタの perl を呼ぶ時に引数与えたい場合どうするのが普通なんでしょか?

% ./hanage.pl -help

を do とかを通してやりたい時、というです。


@ARGV=("-help");  # とかしておいて、
do "hanage.pl";    # とすると、実現できているようですけど、これが普通でしょか?

また、ほかに方法があれば。
470デフォルトの名無しさん:2008/06/13(金) 02:07:04
それで動いてるならいいじゃないの?何が不満なの?
471469:2008/06/13(金) 02:46:35
ひとつは、自信がないから。
ひとつは、ほかのやり方を知りたいから。"There's more than one way to do it"

目から鱗、鼻から悪魔、みたいな記述が perl ならまだある筈だと。
自分の例だと面白くも何ともないのでねぇ。
472デフォルトの名無しさん:2008/06/13(金) 06:34:01
{
local @ARGV=("-help");
do "hanage.pl";
}
とかでいいだろ。べつに@ARGVじゃなくてもいいけど。
473デフォルトの名無しさん:2008/06/13(金) 06:55:17
…do EXPR は、goto文並みにobsoleteな感じがするんだが、皆さん使うの?
require EXPR ですら、perl4的でどうしても避けられない場合にのみ嫌々使うんだけど
474デフォルトの名無しさん:2008/06/13(金) 08:10:51
すみません。ものすごい基本的なこともか知れませんが質問させて下さい。
@listに複数行に,で区切られた5つのデータがあるとします。

my $cnt = 0;
foreach( @list){
@list2[$cnt] = split( /,/, $_);
$cnt++;
}

というのを考えたのですが、
Use of implicit split to @_ is deprecated
どのようにすればいいのでしょうか?
475デフォルトの名無しさん:2008/06/13(金) 08:21:53
>>474
@list2[$cnt] = @_ = split( /,/, $_);
476デフォルトの名無しさん:2008/06/13(金) 08:22:41
475は無し。何も考えずに書き込んだ。
477デフォルトの名無しさん:2008/06/13(金) 08:54:07
>>474
@{list2->[$cnt]}

478デフォルトの名無しさん:2008/06/13(金) 08:58:33
>>474
@{$list2[$cnt]}
479デフォルトの名無しさん:2008/06/13(金) 09:27:49
>>473

#--- config.file ---
my $dir = '/path/to/base/dir';
{
  foo => 1,
  bar => [ 2..5 ],
  baz => "$dir/extra.file",
};
#---

なんて設定ファイルを作って

$conf = do '/path/to/config.file';

で読むという手抜き実装はよくする。
設定ファイルを Perl で書けるのが柔軟で楽。
480デフォルトの名無しさん:2008/06/13(金) 12:06:38
>>473
useだとコンパイル時に読み込まれちゃうから
動的に読み込むファイル決める場合は
"use $file;"するかdo "$file"するくらいしかないじゃん
前者よりはdoのほうが素直じゃね?
481デフォルトの名無しさん:2008/06/13(金) 12:21:25
>>480
動的に use したいだけなら require の方がもっと素直だね。
482デフォルトの名無しさん:2008/06/13(金) 12:34:19
>>479,>>480
レスthx.

config file だったらYAMLとかそっち使っちゃってるw
480の方は状況があまり想像出来ん。Storable知る前だったら
Data::Dumperの出力云々で使ったかもしれんが…。

俺に機会が無いだけなのねw
483デフォルトの名無しさん:2008/06/13(金) 12:38:20
あ。ちなみにData::Dumperの動的処理の時も(しぶしぶ)require使ってた。
481氏の意見と同じ感覚。
484デフォルトの名無しさん:2008/06/13(金) 13:34:15
CSVファイルがありこれをソートしたいのですが、
3番目の要素でソートしたりできませんか?
485デフォルトの名無しさん:2008/06/13(金) 13:38:49
>>484
perlを使うよりsortコマンドのほうが早そうだけど?
486デフォルトの名無しさん:2008/06/13(金) 13:41:01
CSVの扱いはPerl向きじゃない気がする。
487デフォルトの名無しさん:2008/06/13(金) 13:42:39
>>486 CSV 何で処理してる?

488デフォルトの名無しさん:2008/06/13(金) 14:09:47
>>482 delegateパターン実装とか
489デフォルトの名無しさん:2008/06/13(金) 14:27:27
エクセルでやれば?w
490デフォルトの名無しさん:2008/06/13(金) 14:29:25
Pythonだとこんな感じ

import sys, csv
from itertools import imap
from operator import itemgetter

writer = csv.writer(sys.stdout)
for row in sorted(csv.reader(sys.stdin), key=itemgetter(2)):
    writer.writerow(row)
491デフォルトの名無しさん:2008/06/13(金) 14:31:09
ああimapとかimportする必要ねえな
無視して
492デフォルトの名無しさん:2008/06/13(金) 14:31:49
なんでもデリミタをコロンにしてたらUNIX病だと怒られた
493デフォルトの名無しさん:2008/06/13(金) 15:02:19
あれ?PerlにもCVS用のモジュールがあったような?
494デフォルトの名無しさん:2008/06/13(金) 15:10:11
そしてSJISでハマるに一票。pythonも同じと思うが。
495デフォルトの名無しさん:2008/06/13(金) 15:31:56
基本すぎてわらけるかもしれないけど、教えてください。

関数の引数の扱いがよくわかりません。
たとえば、
sub test{
# $_[0] == "test";
# $_[1] == "test2";
}
&test( "test", "test2");
となるとおもうのですが、
@test = ( "test", "test2");
&test( "test", @test);
としたばあい、引数はどうなるのでしょうか?

色々と試してみたのですが、
&test( @test);
としたばあいは、
@_ == @test;
だということはわかったのですが・・。
(もし違っていたら指摘していただけるとありがたいです。
496デフォルトの名無しさん:2008/06/13(金) 15:35:18
>>495 やって美奈代


497デフォルトの名無しさん:2008/06/13(金) 17:04:22
perl -F',' -lane 'push @dat, [ @F, $_] ;}{ print $_->[-1] for sort {$a->[2] <=> $b->[2]} @dat; ' FILE
sort -k3 -t, -n < FILE
498デフォルトの名無しさん:2008/06/13(金) 18:04:30
require がうまくできません。
上記の質問を参考に、
test.cgi ---
require './hoge.pl';
とかいて、
hoge.pl ---
our $test = "hogee";
1;
とかいているのですが、
perl test.cgi
すると、$testは読めていないようです。

ながに悪いでしょうか?
499デフォルトの名無しさん:2008/06/13(金) 18:29:00
>>495
マニュアルを見ずに仕様を突き止めるゲームでも開催されてるの?
500デフォルトの名無しさん:2008/06/13(金) 18:36:22
>>498
「$testは読めていないようです。」の「ようです」に隠された何か。
501デフォルトの名無しさん:2008/06/13(金) 18:40:32
>>492
そうなのか。不治の病にかかってしまった。
502デフォルトの名無しさん:2008/06/13(金) 21:09:26
myにすればいいんだよ
503デフォルトの名無しさん:2008/06/14(土) 00:01:01
>>474
splitをスカラコンテクストで使ってはいけない。
504デフォルトの名無しさん:2008/06/14(土) 08:59:12
$input = <>;
というコードをwindows上で実行し入力待ちの状態でウィンドウ右上の×印を
押すと「すぐに終了」のダイアログが出てきてしまいます。
入力待ちの状態では$SIG{'QUIT'}をキャッチすることが出来ません。
Term::ReadLine等も試しましたが挙動は同じでした。
入力待ちの状態でも正常終了するようにすることは出来ないでしょうか。
505デフォルトの名無しさん:2008/06/14(土) 18:33:05
Ctrl + C ??
506デフォルトの名無しさん:2008/06/15(日) 00:06:19
>>504
自前でwindow開かないと無理と思われ。
507デフォルトの名無しさん:2008/06/15(日) 15:27:14
多次元配列があるのですが、2次元目のある要素を元に1次元目をソートさせることはできませんか?
508デフォルトの名無しさん:2008/06/15(日) 15:50:42
>>507
出来るよ。
509デフォルトの名無しさん:2008/06/15(日) 16:06:21
すみません。
簡単なサンプルでいいんでコードを書いて頂けませんか?
510デフォルトの名無しさん:2008/06/15(日) 16:17:38
>>509
ググれば例などいくらでも出てくるんだが?
perl -MData::Dumper -le 'print Dumper sort { $a->[1] <=> $b->[1] } ( [2,3],[3,2] ) ;'
$VAR1 = [ 3, 2 ];
$VAR2 = [ 2, 3 ];


511デフォルトの名無しさん:2008/06/16(月) 08:14:00
Perlでファイルの中の指定した文字列(正規表現".*hoge$"等)にマッチする行を
削除したいのですが、どうすれば良いでしょうか?
512デフォルトの名無しさん:2008/06/16(月) 09:38:40
>>511
http://perldoc.jp/docs/perl/5.10.0/perlfaq5.pod
を、「ファイルのある行を削除する」で検索。
513デフォルトの名無しさん:2008/06/16(月) 09:39:22
>>511

#!C:/perl/bin/perl

open(IN,"example.log");
while(<IN>){
if($_ =~ /hoge/){ $line .= "\n"; }
else{ $line .= "$_\n"; }
}
close(IN);

open(OUT,">exmple.cgi");
print OUT $line;
close(OUT);

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

print "消去完了";

みたいな感じですか?

Perlコーディング初心者質問スレ Part 57
http://pc11.2ch.net/test/read.cgi/php/1203935151/l50
514デフォルトの名無しさん:2008/06/16(月) 10:18:02
111
222
333
444
555
666
というようなファイルがあったとして(数字は仮定です)3行目の行の
先頭にtabを2つ入れたい場合、どのようにすればいいのでしょうか。
515デフォルトの名無しさん:2008/06/16(月) 10:24:45
くだすれ池
516デフォルトの名無しさん:2008/06/16(月) 10:28:50
>>514
……
行数を数えながら一行ずつ読み込むループにして

if 3行目 then
先頭にtabを2つ入れる
読み込んだ行を出力する

という中身を回せばいいよ。
517デフォルトの名無しさん:2008/06/16(月) 10:33:18
>>514

質問先は「くだすれPerl(超初心者用)2」
http://pc11.2ch.net/test/read.cgi/php/1204488452/l50
が良いらしいです。
518デフォルトの名無しさん:2008/06/16(月) 10:50:21
>>511
>>513

すいません、間違ってました。
http://pc11.2ch.net/test/read.cgi/tech/1208674881/511
519デフォルトの名無しさん:2008/06/16(月) 15:50:09
変数の中の文字列の頭のスペースを取り除きたいのですが、
どのようなほうほうがありますか?
520デフォルトの名無しさん:2008/06/16(月) 15:55:16
>519
正規表現使う典型ケースです
521デフォルトの名無しさん:2008/06/16(月) 16:00:36
>>519
http://perldoc.jp/docs/perl/5.10.0/perlfaq4.pod
を、「文字列の先頭や末尾にある空白を剥ぎ取るには?」で検索。
522デフォルトの名無しさん:2008/06/16(月) 16:01:41
523デフォルトの名無しさん:2008/06/16(月) 16:08:16
>>519
>>522

連投すいません。修正です。
http://pc11.2ch.net/test/read.cgi/php/1204488452/293

初歩質問はこちらが良いらしいです。
http://pc11.2ch.net/test/read.cgi/php/1204488452/l50
524デフォルトの名無しさん:2008/06/18(水) 01:11:06
質問です。
HTML数値エンティティを文字に変換する際にはどうすればよいでしょうか。
下記の通りに実行したのですがうまくいきません
(�-ÿしか対応していない?)

#!/usr/bin/perl
use HTML::Entities::Numbered;
$str='あいうえお';
print hex2name($str); #「あいうえお」を期待するが変換前と同じ$strが出力される
525524:2008/06/18(水) 01:12:01
$str='&#x3042;&#x3044;&#x3046;&#x3048;&#x304A;';

ですorz
526デフォルトの名無しさん:2008/06/18(水) 04:57:49
>>524
> print hex2name($str); #「あいうえお」を期待するが変換前と同じ$strが出力される

いや、期待するなよ。
527デフォルトの名無しさん:2008/06/18(水) 06:29:13
そのあたりに踏み入ったことはないのだが、マニュアルを見る限り

HTML::Entities::decode

を使うのではないか?
528デフォルトの名無しさん:2008/06/18(水) 12:04:39
すんごい初歩的な質問で申し訳ないのですが、
Perlやってる友達がお前こんなのもできないだろと自慢してくるので、明日までにこれをやらないとまたバカにされるのですが、
プログラム自体やったことがなく意味不明すぎてよくわかりません。。誰かもしよかったら教えてください。

キーボードから整数値$aの値を入力してEnterを押し、
続けて$bの値を入力してEnterを押すと、
$aを 3 倍した値と、$bを 8 倍した値の和 を計算して$cに代入し,
$cの値を画面に出力するプログラム

結果は
print "$cn";
の形で出力する
この結果の出力以外の画面出力はしないこと.
529デフォルトの名無しさん:2008/06/18(水) 12:10:09
>>528
その友達に教えてもらいなさい
530デフォルトの名無しさん:2008/06/18(水) 12:14:12
>529

というか、その友達から出された問題なんです。
531デフォルトの名無しさん:2008/06/18(水) 12:23:42
宿題だろ・・・
532デフォルトの名無しさん:2008/06/18(水) 12:37:23
それが出来たところで他の事聞かれてあぼんだな
533デフォルトの名無しさん:2008/06/18(水) 12:40:17
「1/10の確率」

を表現するのに、これ↓はありなのか?

return 0 if rand(1000) > 100;
534デフォルトの名無しさん:2008/06/18(水) 12:51:55
あり得ないという根拠は?
535デフォルトの名無しさん:2008/06/18(水) 12:52:56
>>533
randが正規乱数だと仮定するならありだろ。
536デフォルトの名無しさん:2008/06/18(水) 13:05:29
正規乱数だと仮定するならなしだろ
randが一様乱数を吐くのならありかもしれんが
537デフォルトの名無しさん:2008/06/18(水) 13:50:36
>>528
お前こんなのもできないのか
538デフォルトの名無しさん:2008/06/18(水) 14:25:04
綺麗な記述を勉強したいです。
どっかで配布されてる非常に綺麗で整理された記述を教えてください。
あまりにいっぱい配布されすぎててチェックできません。
539デフォルトの名無しさん:2008/06/18(水) 14:39:00
>>538
man perlstyle
つーか、好きにしろ
540デフォルトの名無しさん:2008/06/18(水) 16:10:12
>>538
perl medicとかは偏ってはいるけど
ポリシーとしてはまあ参考になるかもしれん
買うまでの事は無い本なので図書館で探せ
541524:2008/06/18(水) 21:54:54
>>527
HTML::Entities::decode で無事に出来ました
今後はマニュアルをしっかり読みますm(_ _)m
ありがとうございました
542デフォルトの名無しさん:2008/06/18(水) 22:32:54
>>538
ここはPerlのスレですよ?
543デフォルトの名無しさん:2008/06/18(水) 22:37:24
>538
Plagger読んどけ
544デフォルトの名無しさん:2008/06/18(水) 23:17:04
こっそり書いてみる。意味は教えないよ
perl -e 'print <STDIN>*3+<STDIN>*8,"\n"'
545デフォルトの名無しさん:2008/06/18(水) 23:37:40
$cに代入してないじゃん
546デフォルトの名無しさん:2008/06/18(水) 23:54:10
>>528

544とは別人だけど。

perl -e '$c=<>*8+<>*3;print"$c\n";'

また、次の問題を出されるだろうから、がんばって。
547デフォルトの名無しさん:2008/06/19(木) 02:35:19
>>546
> また、次の問題を出されるだろうから、がんばって。

なにを?
548デフォルトの名無しさん:2008/06/19(木) 02:42:54
腹筋と腕立て
549デフォルトの名無しさん:2008/06/19(木) 03:10:40
>>547
猫おばさん探し
550デフォルトの名無しさん:2008/06/19(木) 04:46:30
>>547
生きるべきか、死ぬべきか。

もちろん死ぬべきだけど。
551デフォルトの名無しさん:2008/06/19(木) 04:57:27
0 xor die;
552デフォルトの名無しさん:2008/06/19(木) 08:38:48
to be to be ten made to be
553デフォルトの名無しさん:2008/06/19(木) 09:00:27
「10%の確率」を表現する場合、
自分の考えだと、

return 1 if rand(1000) < 100

この方が人間がソースを読んだときに理解しやすいのだが、

もしかして、前述のは、
「90%の確率でボツにする」
って意味なのかな。
554デフォルトの名無しさん:2008/06/19(木) 09:23:22
それか、

(1)rand(100)で、0から99.9999までの数値を生成する。
(2)intで、小数点以下を切り捨てて、整数にする。
(3)できた数字に1を足す
(4)1から100までの数字ができる
(5)その中で、1から10までの範囲に入ったらtrueにする

↑こうしたほうが、人間が読んでわかりやすくて
なおかつ正確だと思う。
555デフォルトの名無しさん:2008/06/19(木) 10:13:54
質問

アンパサンド(&)がくっついてる文字列は
基本的にサブルーチンを呼び出している、って
考えていいの?

他にアンパサンド&が使われる局面は

&&でandって意味、っていうケースしか
ないみたいだけど。

他にもあるの?
556デフォルトの名無しさん:2008/06/19(木) 10:17:38
マニュアルを見ずに仕様を突き止めるゲームでも開催されてるの?
557デフォルトの名無しさん:2008/06/19(木) 10:24:26
逆引きできる本が無いと見つけにくいのかな
ぐぐっても検索できないし

ビット演算子で&てあるね
558デフォルトの名無しさん:2008/06/19(木) 10:25:17
質問

サブルーチンの中で、
my
を使わずに変数を宣言すると、
それは基本的に必ず自動的に全部
グローバル変数となってしまうの?
559デフォルトの名無しさん:2008/06/19(木) 10:26:37
「サブルーチンを呼び出す時は&を使います」

て解説は普通にどんな参考書にも載ってるけど、逆に

「&をソースコード中に発見したら、それは
どんな処理をしている可能性がありますか?
考えられる可能性を全部あげなさい」

って質問は、パールのことを熟知してる人しか
答えられない。
560デフォルトの名無しさん:2008/06/19(木) 10:27:13
宿題だ宿題。

ひとつの宿題に答えると、30の宿題が投入されます。
そして、Perlで良い成績を取ったPerlを知らないバカが業界にやってきます。
561デフォルトの名無しさん:2008/06/19(木) 10:31:03
ソースコード中に&を発見した場合、

(1)サブルーチンを呼び出している
(2)論理和andの意味である
(3)ビット演算をしている

以上の3つの可能性があり、
そのうちどれに該当するかは、
それを書いたププログラマーに
メールで質問するか、自分で
空気を読んで直感で判断する。

こうですか?わかりません
562デフォルトの名無しさん:2008/06/19(木) 10:31:10
>>559
それはウソ
563デフォルトの名無しさん:2008/06/19(木) 10:33:17
>>2に挙げた本をどれか一冊通読してから質問してほしいな。
質問するほうも答える方も時間の無駄だ。
564デフォルトの名無しさん:2008/06/19(木) 10:36:29
質問

myってサブルーチン内でしか宣言したらだめなの?

もしメインルーチン内でmyを宣言したらどうなるの?
エラーになるの?
565デフォルトの名無しさん:2008/06/19(木) 10:51:22
質問するより実行してみるほうが早いという考えに至らないのは何故なのか?
566デフォルトの名無しさん:2008/06/19(木) 10:52:51
クリティカルな業界にいると
なかなかそういう発想にはならないんだよ

脳外科手術とか、
飛行機の操縦とか、
宇宙船の建設とか。
567デフォルトの名無しさん:2008/06/19(木) 10:59:12
クリティカルな疑問を2chで質問して解決できるのはどういう業界だ?
568デフォルトの名無しさん:2008/06/19(木) 10:59:31
>>559
逆引きIndexが巻末に無いか?
569デフォルトの名無しさん:2008/06/19(木) 11:10:30
>>568
索引で&や&&はすぐ探せると思うけど、$&を探すのは結構大変だと思います。
570デフォルトの名無しさん:2008/06/19(木) 11:16:57
>>568
著者がバカだと載ってない。

ていうか、プログラマーって

「一度読んだら記憶する」

って記憶力が高い人が多いけど、

「自分は記憶してるから他人も記憶してるだろう」

っていう、勝手な性格な人が多い。
571デフォルトの名無しさん:2008/06/19(木) 12:21:50
まともなプログラマの多くは初心者向けの解説本を書けない。
それゆえ、初心者向けの解説本のほとんどはまともでないプログラマか、
そもそもプログラマでもないようなライターが書いていて、往々にして不正確である。
572sage:2008/06/19(木) 12:58:08
デバッグモードで入力コマンドのフォントに色がつきます
この色は変更できるのでしょうか?
573デフォルトの名無しさん:2008/06/19(木) 13:58:12
それ、 rand(100) < 10 でいいやん。
574デフォルトの名無しさん:2008/06/19(木) 13:58:54
>>554
それ、 rand(100) < 10 でいいやん。
575デフォルトの名無しさん:2008/06/19(木) 14:03:50
なんで100と10なんだ?
576デフォルトの名無しさん:2008/06/19(木) 16:11:54
>「自分は記憶してるから他人も記憶してるだろう」
>っていう、勝手な性格な人が多い


反面、言語仕様なんだから知ってて当たり前、
知らなかったら仕様くらい自分で調べろって風習もある
577デフォルトの名無しさん:2008/06/19(木) 16:15:51
そんな未開の部族の奇習を押し付けられても困ります!
だからセガガガでもはや人間ではなくなってしまった人々とかって
言われるんです!

だいたい人間から遠い順にクラス分けして
(1)0と1だけでプログラミングするヤツ
(2)マシン語だけで
(3)アセンブラで
(4)Cで
(5)VBで
(6)perlで
(7)HTMLで

って階層になってると思う。
数字が多いほど人間。
578デフォルトの名無しさん:2008/06/19(木) 16:19:08
>>574
これって
0から99.999999.....の数を生成して、
9.999999.....以下だったらtrueですよね。
本当に10%になってます?
579デフォルトの名無しさん:2008/06/19(木) 16:22:03
>>578はアホ
580デフォルトの名無しさん:2008/06/19(木) 16:26:39
>>578
実際にやってみると楽しめるんじゃないかな。
581デフォルトの名無しさん:2008/06/19(木) 16:29:55
>>578
違うだろww9.999999.....未満www
582デフォルトの名無しさん:2008/06/19(木) 16:40:11
>>543
どーも
583デフォルトの名無しさん:2008/06/19(木) 16:49:47
>>570
> プログラマーって「一度読んだら記憶する」って記憶力が高い人が多い
間違い。別に記憶力はそんなに高くない。
限りある記憶力を、どう駆使すれば効率よく作業できるかを日々模索しているだけ。
わかりやすい例としては「根っこの知識と、調べ方」を身につけて、その領域の殆どを"事実上"カバーするとか。

> 「自分は記憶してるから他人も記憶してるだろう」
これはもっと間違い。
「真面目に勉強しているなら、記憶力を上手に駆使する技術を磨こうとするだろう」
が正解。
君の書き方は、とびっきり馬鹿でとびっきり怠惰なクソ野郎が、現状をどう曲解すれば
「自分は悪くない、周囲のプログラマが勝手な性格なだけ」
という方向に話を持って行けるか、を頑張ってこじつけた結果に過ぎないよ。
584デフォルトの名無しさん:2008/06/19(木) 16:58:03
記憶力に限界があると思ってる奴は障害者の可能性が高い。
記憶するためには時間が必要で、時間は物理的な限界があるが。
585デフォルトの名無しさん:2008/06/19(木) 17:05:51
揚げ足取りもいいけど、この流れにそういう方向の細かさを適用するなら、
その「障害者」の判断なんかもっと突っ込みの対象だと思うよ。
自爆かこわるい。
586デフォルトの名無しさん:2008/06/19(木) 17:57:31
マニュアルを検索しましょう
587デフォルトの名無しさん:2008/06/19(木) 19:18:45
>>575
べつにぃ、rand(10) < 1 でも、rand(3) < 0.3 でも何でもいいよ。好きにすればぁ。
お題が「10%の確率」だから、「100 分の 10」と考えるのが自然だろ?
588デフォルトの名無しさん:2008/06/19(木) 21:46:45
>577
HTMLでプログラミングするやつは人間じゃないと思う。
あ、でも(1)よりは人間かもしれん。
589デフォルトの名無しさん:2008/06/19(木) 23:17:28
どうでも良いが、なんでモマイラはそんなに日本好きなのだw
関連スレに算譜系が一つもないのは何故なんだwww
590デフォルトの名無しさん:2008/06/19(木) 23:22:15
単なる言語仕様を自明の真理みたいに語る
プログラマは割とよく見かける
「当たり前じゃん何言ってんの」的な。
>自分が知っているから他人も知ってい
るだろう
591デフォルトの名無しさん:2008/06/20(金) 01:10:36
>>590
それはメチャメチャよくいる
592デフォルトの名無しさん:2008/06/20(金) 07:40:48
$SIG{INT}にハンドラを登録して、ctrl+Cを送るとハンドラは動作してくれますが、違うターミナルから、kill関数でINTを送信すると、ハンドラがはたらかずに死んでしまいます。
どうしてでしょう?
593デフォルトの名無しさん:2008/06/20(金) 07:41:33
プログラマは、作業環境などによってはコミュニケーションの
経験不足なんかもあるのかもしれんが、社会性が子供なのが一因かとも。
594デフォルトの名無しさん:2008/06/20(金) 08:53:57
>>592
本当にINTを送っているか点検せよ
595デフォルトの名無しさん:2008/06/20(金) 10:46:43
>>578
いいところに気がついたな。2進数が基本な大方のコンピュータの
擬似乱数発生器は大抵Nビットの整数を作るようになっているので
発生されうる数は2^N個だから、1回発生させた乱数がどの範囲に
あるかの判定だけでは絶対に1/10にはならない。
596デフォルトの名無しさん:2008/06/20(金) 12:41:10
>594
kill 'INT',殺すプロセス番号
と送っています。
ちなみにプラットホームはWinXP、Perl5.8.0
597デフォルトの名無しさん:2008/06/20(金) 12:59:13
> kill 'INT',殺すプロセス番号
こんな記法は誰から教わった? 闇討ちしてやれ。
598デフォルトの名無しさん:2008/06/20(金) 13:00:55
>>595
なんかすごい人がきたな。
あなたはパーラーレベル14以上ですね?
599デフォルトの名無しさん:2008/06/20(金) 13:03:32
あぁ、すまん。シグナル名でもOKなのか。
Xpは9と15しか送れないみたいだな。
C:\>kill -l
SIGKILL(9) SIGTERM(15)
600デフォルトの名無しさん:2008/06/20(金) 13:16:10
>>596
perl win32 signalでぐぐったらこんなのでました

ttp://aspn.activestate.com/ASPN/Mail/Message/pdk/1285590 (ほとんど同内容の質問)
ttp://aspn.activestate.com/ASPN/Mail/Message/pdk/2064809 (その回答)

かいつまんでいうとkillはTerminateProcessを呼んでるだけでどのシグナルか
という情報は落ちているからどうにもならんらしいよ。
601デフォルトの名無しさん:2008/06/20(金) 18:50:36
そんな事より犬夜叉と蟲師でも観ようぜ!
602デフォルトの名無しさん:2008/06/20(金) 18:57:21
>600
マジ?
そりゃ詐偽じゃない?
一言マニュアルに書いて欲しい…

603デフォルトの名無しさん:2008/06/20(金) 19:49:01
>>602
書いてある
604デフォルトの名無しさん:2008/06/20(金) 20:18:54
>>602
5.8.1で修正入ってるよ。Changes5.8.1に以下のような記述がある。

[ 20572]
Subject: [PATCH] kill 'INT' doesn't work on Windows
From: Jan Dubois <[email protected]>
Date: Fri, 08 Aug 2003 17:49:03 -0700
Message-ID: <[email protected]>

ソース(win32/win32.c)見たけどSIGINTのときは

GenerateConsoleCtrlEvent(CTRL_C_EVENT,pid)

を使ってそれっぽく動くように改良したらしい。
605デフォルトの名無しさん:2008/06/21(土) 04:39:05
sortって安定ソート?
不安定ソートだとしたら、そこそこ軽くて使いやすい安定ソートの方法は?

606デフォルトの名無しさん:2008/06/21(土) 05:24:08
perlのソートはどんなんなってるか忘れたけど、
いろんな状況でかなり速いです。
変な順の入れ替えは起きないって記憶してるから安定だと思います。

全部あやふやな回答ですが信用率90%です。(俺の自己採点)
607デフォルトの名無しさん:2008/06/21(土) 05:36:53
>>605
sortプラグマで切り替えられる。
perldoc sortでも読んどいてくれ。
608デフォルトの名無しさん:2008/06/21(土) 07:13:54
ありがとです。
ここ見てたんだけど、ダメなのかな。英語読むしかないかな……?
http://perldoc.jp/docs/perl/5.6.1/perlfunc.pod#item_sort_SUBNAME_LIST

>sortプラグマ
use sort 'stable';
あ、これっぽい。


これでバージョンの関係でダメだったら笑ってください。

609デフォルトの名無しさん:2008/06/21(土) 08:21:41
>>608
perl5.8 以降ではデフォのsortアルゴリズムは mergesort 。perl5.6 系では quicksort。
で 5.8 系 mergesort は望もうが望むまいが stable(5.6 系がそうなのかは知らん)。
610デフォルトの名無しさん:2008/06/21(土) 08:34:03
perlでバイナリファイル内の検索を行おうと思ってるんですが、
いちいちバイナリ=>文字列変換していると計算コストがかかってしまいます。
バイナリデータのままで比較することってできますか?

たとえばバイナリデータで00の箇所を文字列変換しないで探せないかどうか。
611デフォルトの名無しさん:2008/06/21(土) 10:16:47
例外処理のデバッグをしたくて、デバッガで $@ に値をセットして、
if($@){} のルートをとおそうとしています。
でも、$@ = error; などとしても、$@ は空のままでした。
$@ 変数に無理やり値をセットすることはできないのでしょうか?
612デフォルトの名無しさん:2008/06/21(土) 10:58:03
perlのみで以下のスクリプトが書けますでしょうか?

例えば、料理のサイトに検索ボックスが有ったとして、そこに『カレー』と打てば
カレーに関するレシピが出るという作りになっていたとします。
それを、perlのスクリプトを実行して、『カレー』のレシピが出で、連続して『肉じゃが』
と打てば肉じゃがのレシピが表示されるというようなスクリプトです。
一々、検索ボックスにマウスポインタを持っていかないで、コマンドプロンプトのみで
操作できると楽なんですが。
613デフォルトの名無しさん:2008/06/21(土) 11:10:51
>>612
それができない言語がもしあるなら教えて欲しいもんです
614デフォルトの名無しさん:2008/06/21(土) 12:16:10
>>610
"\x0"使えばいんじゃないの?
というか変換しないと探せないってどういう意味かよくわからない。
615デフォルトの名無しさん:2008/06/21(土) 12:17:40
>>611
$errcode = @$;
としてからこっちの変数つかえばいんじゃないの?
あと error じゃなく "error" じゃないの?
616デフォルトの名無しさん:2008/06/21(土) 14:04:46
>>610
> perlでバイナリファイル内の検索を行おうと思ってるんですが、
> いちいちバイナリ=>文字列変換していると計算コストがかかってしまいます。

バイナリ=>文字列変換なんて明示してやらせないぎり起きないだろう。

> バイナリデータのままで比較することってできますか?

できるよ。
617デフォルトの名無しさん:2008/06/21(土) 15:53:11
>>613
「指定したURLを何かのブラウザで表示する」という機能が必要だから
出来ない言語もあるんじゃね?
618デフォルトの名無しさん:2008/06/21(土) 16:15:23
>>617
勝手に条件を増やすなよ。
そんなことどこにも書いてないだろw
619デフォルトの名無しさん:2008/06/21(土) 16:27:28
「GRID化されたOracle10gにネイティブ接続する」という機能が必要だから
出来ない言語もあるんじゃね?
620デフォルトの名無しさん:2008/06/21(土) 16:35:35
>>618
料理のサイトで検索したレシピを表示する、っていうんだから、
単純に考えればそのサイトをブラウザで表示するってことだろ。
621612:2008/06/21(土) 16:42:37
何か色々とありがとうございます。
まだ勉強したての自分には難しそうですね。
感じとしては、スクリプトに<STDIN>
622612 :2008/06/21(土) 16:47:56
失礼しました。途中で書き込んでしまいました。

感じとしては、スクリプト内に<STDIN>を書いておいて、実行時に
『カレー』と打ち込んだら、サイト内にある検索ボックスにその文字が
反映されて自動的に検索できないかと考えています。
連続して『肉じゃが』と打ったら今度はその文字が検索ボックスに反映
されて、自動的にページを表示するようなスクリプトを書きたいと考えています。
623デフォルトの名無しさん:2008/06/21(土) 16:50:39
>>622
あそう。じゃあ書きなよ。
624デフォルトの名無しさん:2008/06/21(土) 16:58:12
>>623
不愉快な思いをさせて申し訳ありませんでした。
625デフォルトの名無しさん:2008/06/21(土) 17:00:33
AJAXって意味なのか?
626611:2008/06/21(土) 17:15:36
>>615

>$errcode = @$;
こんなやりかたがあるなんて知らなかったです。
これで、$@ に値をセットすることができるのでしょうか?
今度やってみます。
627デフォルトの名無しさん:2008/06/21(土) 17:20:37
>>622
HTMLでフレーム作れば済みそうだ。
自前の入力欄と、レシピ表示のフレームで。
Javascriptでいつでも検索欄にフォーカスがくるようにすればいいんじゃないかな。
628デフォルトの名無しさん:2008/06/21(土) 17:28:40
>>626
あたまわいてんのか
629デフォルトの名無しさん:2008/06/21(土) 22:16:57
Windows環境でMath::Random::MTを使ったスクリプトを動かす必要があるのですけども、
ActivePerlとCygwinのPerlではどちらがお薦めでしょうか?
630デフォルトの名無しさん:2008/06/21(土) 22:55:05
>>629
すべての実行端末に ActivePerl をインストールさせることが可能なら ActivePerl。
すべての実行端末に Cygwin 一式をインストールさせることが可能なら Cygwin。
631デフォルトの名無しさん:2008/06/21(土) 23:52:14
インストールの簡単さなら ActivePerl やろ。クリックするだけやもん。
環境変数 PATH も設定してくれるし、拡張子の関連付けもやってくれるし。
モジュールの追加のみ ppm コマンドを叩かないといかんが。
C> ppm install Math-Random-MT
632デフォルトの名無しさん:2008/06/22(日) 16:35:24
参考書読んだら#をハッシュと読めって書いてあるのだが、
本当にハッシュと読むのか。シャープじゃないのか。
633デフォルトの名無しさん:2008/06/22(日) 16:54:22
>>632
君が文面読み違えてんじゃないの?
634デフォルトの名無しさん:2008/06/22(日) 17:05:19
>>632
シャープは♯であって#ではない。
#はハッシュ、またはナンバーサインと呼ぶ。
635デフォルトの名無しさん:2008/06/22(日) 17:08:44
ちなみに日本語ではイゲタ
636デフォルトの名無しさん:2008/06/22(日) 17:30:05
電話のボタンだったら、シャープとか米印って言われた方がしっくりくるな
637デフォルトの名無しさん:2008/06/22(日) 20:50:54
電話の「#」は“シャープ”ではない
http://www.excite.co.jp/News/bit/00091187538923.html
638デフォルトの名無しさん:2008/06/22(日) 21:43:51
まあNTTが最初にシャープと言い出したのと
PC普及以前は身近で最も#を見かけるのが電話だったことから
日本ではシャープと呼ぶ慣習が定着してしまったんだろうな

ちなみにアメリカの電話では似たような文脈でパウンドサインと呼ばれるが
Wikipediaによると、それもローカルルールとのこと
639デフォルトの名無しさん:2008/06/22(日) 22:17:44
>電話のボタンだったら、シャープとか米印って言われた方がしっくりくるな

電話の米印は#じゃないほうの記号だけどね。
640デフォルトの名無しさん:2008/06/22(日) 22:18:15
プラットフォーム間の移植性に関する質問です。
100msec周期のインターバルタイマーが必要で、LinuxではTime::HiResの
setitimerを使っているのですが、Windows XPのActivePerlではsetitimerが
使えないようで、代替手段が無いものか探しています。よろしくお願いします。
641デフォルトの名無しさん:2008/06/22(日) 22:55:04
>>640
「使えない」の意味によって無駄なレスかもしれないけども、
もし「ppmに無い」という意味だったら、
Cコンパイラとnmakeを使ってCPAN経由でビルドしてみては?
642デフォルトの名無しさん:2008/06/22(日) 23:25:52
>>611
use Data::Dumper;
eval { die "hoge"; };
print Dumper($@);
eval { die ["hoge"]; };
print Dumper($@);
643デフォルトの名無しさん:2008/06/22(日) 23:29:02
>>641
setitimer が何なのかを把握した上で書き込みとかすればいいと思うよ。
無責任だと思わないかい?
644デフォルトの名無しさん:2008/06/23(月) 00:27:58
そういう>>643のカキコも何の追加情報もないけどな
というかそもそも2chでそないなこと言ってもなあ…わざわざそんなん言わんとなんでもありでいいんじゃねえの
645デフォルトの名無しさん:2008/06/23(月) 00:52:08
> そういう>>643のカキコも何の追加情報もないけどな
> というかそもそも2chでそないなこと言ってもなあ…わざわざそんなん言わんとなんでもありでいいんじゃねえの

というかそもそも2chでそないなこと言ってもなあ…わざわざそんなん言わんとなんでもありでいいんじゃねえの
646デフォルトの名無しさん:2008/06/23(月) 01:11:58
>639
「 * や # のことを、それぞれ〜」 っていうフレーズが抜けているだけだろう
647デフォルトの名無しさん:2008/06/23(月) 01:26:16
>>643 を2ちゃんねる用語に直すと 「ググレカス」 だな。
言い方を変えても、何も得ることが無い、非建設的な書き込みに変わりない。
648デフォルトの名無しさん:2008/06/23(月) 01:57:17
> 言い方を変えても、何も得ることが無い、非建設的な書き込みに変わりない。

オマエモナーwww
649611:2008/06/23(月) 02:32:34
>>642

ありがとうございます。
助かります。
650デフォルトの名無しさん:2008/06/23(月) 02:47:29
>>648
そうかそうか、自分の無意味さを認めたか。えらいぞー。
651デフォルトの名無しさん:2008/06/23(月) 04:12:39
>>640
Cygwin 上なら ITIMER_REAL 限定でエミュレートされているようだけれども、ActivePerl 縛りが漢のチャレンジャースピリッツ。
細かい精度は気にするとハゲる(負け惜しみ)。

# Time::HiRes::usleep() version
use Time::HiRes qw(usleep);
my $interval = 100000;
while (1) {
usleep($interval);
print "Get's!\n";
}

# Time::HiRes::tv_interval() version
use Time::HiRes qw(tv_interval gettimeofday);
my $floating_interval = 0.1;
my $mark = [gettimeofday()];
while (1) {
if ( tv_interval($mark) > $floating_interval ) {
print "Get's!\n";
$mark = [gettimeofday()];
}
}
652640:2008/06/23(月) 09:27:28
>>641-650
 私の説明不足で荒れてしまい、申し訳ありません。
>>651
ありがとうございます。どちらも動作することを確認しました。tv_intervalバージョンはCPU負荷が上がり
すぎるので、usleepバージョンの方がベターですね。
653デフォルトの名無しさん:2008/06/23(月) 10:31:23
>>630-631
レスをありがとうございます。
Cygwinが敷居が高いらしいので、
とりあえずActivePerl5.10.0を入れてみようと思います。
654デフォルトの名無しさん:2008/06/23(月) 14:58:18
0.1秒精度の alarm 相当が欲しいんじゃないのか?
sleep でいいなら最初から select(undef,undef,undef,0.1) でいいだろう。
655デフォルトの名無しさん:2008/06/23(月) 20:20:32
activeperlのダウンロードなんだけど、
参考にしているページでは、
5.8系と
5.6系とあって、
ほとんどのサーバーでは5.6系に対応しているので
5.6系をダウンロードしてください、
5.8系では対応してなくて動かない可能性があります、
と書いてあるのだが、実際activestateのページにいってみると、
なんと、5.6系は消えてしまって、
5.1系と、
5.8系の二つしか残っていないのだ。

この場合、どちらをダウンロードすればいいのだ?
656デフォルトの名無しさん:2008/06/23(月) 20:33:40
>>655
5.1じゃなくて5.10な。とりあえず5.8で問題ない。
657640:2008/06/23(月) 20:52:13
>>654
タイマーイベントが取れるならそれがベストです。良い方法をご存知であればご教示下さい。
658デフォルトの名無しさん:2008/06/23(月) 21:15:08
>>655
まず、その「参考にしているページ」とやらは参考にするな。
日本のサーバー屋は一時期Perl5.6同梱のLinuxを大量に設置したから、リプレースするのが面倒でそういう戯言を言う奴が多い。
Perlは基本的に(PHPと違って)バージョンアップによる互換性問題は少ない方だが、5.6系だけは鬼門というのが一般常識。
特にUNICODE関係※は痛いから、おとなしく5.8以降(今なら5.10)を使うべし。5.6を使うくらいなら、まだ5.005の方がまし。
それと、いまだに5.6を入れてるサーバー屋がいたら相手にしないこと。

※5.6の段階ではUNICODEとマルチスレッドは「実験的実装」とちゃんとアナウンスがあったから、5.6でUNICODEを使った奴がお馬鹿さんとも言う。
659デフォルトの名無しさん:2008/06/23(月) 22:02:12
>>658
世間知らず
660デフォルトの名無しさん:2008/06/23(月) 22:08:12
>>658
>5.8以降(今なら5.10)を使うべし

え?どっち?
661デフォルトの名無しさん:2008/06/23(月) 22:15:35
安定動作なら5.8のが良いってDLページにかいてあるじゃん
662デフォルトの名無しさん:2008/06/23(月) 22:17:39
>>660
5.6がベストってことだよ
663デフォルトの名無しさん:2008/06/23(月) 22:18:52
混乱してきたww
664デフォルトの名無しさん:2008/06/23(月) 22:23:30
>>655
用途は知らんが今からActivePerl使うなら5.8以降でないと色々ツライ目に合うかもしれん。5.6系以前は問題外だ。
5.10は使いたいモジュールのPPMが無かったりすると手間取るからな。
665デフォルトの名無しさん:2008/06/23(月) 22:28:46
>>662
いまどき5.6なんて言ってるととほほでK.NTになっちまうぞ?
666デフォルトの名無しさん:2008/06/23(月) 23:21:09
サーバにインスコしてあるバージョンに合わせんと意味無いだろ。
自宅のPCに 5.10 インスコしてデバッグしても、サーバが 5.6 だから動かないんじゃ
何のためのデバッグかわからんだろが。
まずは自分の使う予定のサーバを調べろ。
667デフォルトの名無しさん:2008/06/24(火) 00:02:11
自宅PCに5.6インスコしたところで、腐れ鯖屋はどうせ拡張モジュールのインスコ許可してなかったり、奇妙キテレツな鯖設定してたり、自宅PCと鯖屋のapache(httpd)設定およびライブラリ関係が同一の筈が無いんだから同じ事だろ
64ビットマシンに32ビットOSをインスコして料金だけ64ビットマシン級のボッタクリをする鯖屋なんぞ、それこそ腐るほどあるぞ
perlのバージョンだけ何が何でも5.6に執着する意味がわからん
668デフォルトの名無しさん:2008/06/24(火) 01:03:25
こんな風だからいまだにPerlのCGI関係じゃjcode.plとかがのさばってんのな
669デフォルトの名無しさん:2008/06/24(火) 01:24:08
5.6がベストとかどこで刷り込まれたんだよ
jcode.pl最強厨と同じだろ
670デフォルトの名無しさん:2008/06/24(火) 01:29:21
おとなしく Moooooooooooooose とかいっとけばいいじゃん。
671デフォルトの名無しさん:2008/06/24(火) 02:20:01
>>655 の言う 「参考にしているページ」 とやらが、いったい何処の何なのか、それが不明だな。
文書を読む際は、それが書かれた年月日を考慮すること。
日付の無い文書は信用しないこと。
672デフォルトの名無しさん:2008/06/24(火) 02:28:28
手元で 5.10.0 を愛用しつつ、貸鯖で走らせにゃならん時だけ 5.005 向けにバックポートしている俺はマゾ。
673デフォルトの名無しさん:2008/06/24(火) 03:02:45
>>658
世間知らず
674デフォルトの名無しさん:2008/06/24(火) 10:36:51
以前サイトを移転した時に
貸鯖はわざわざ5.8系を探して使ってたので知らなかったが
まだそんなに5.6系以下のとこが多いのか…
675デフォルトの名無しさん:2008/06/24(火) 12:34:59
infoseek とか wakwak とか
676デフォルトの名無しさん:2008/06/24(火) 20:24:30
よくわかりませんが、5.8と5.6二つインストールされてます。俺は。
ところが、5.6で動かしたことありません。俺。
677デフォルトの名無しさん:2008/06/24(火) 20:34:58
>>676
おまいは、>658の説教を小一時間聞かなければならない刑に処す
678デフォルトの名無しさん:2008/06/24(火) 20:41:07
まあ5.6で貸鯖がバンバン立った時期って某所や某所で汚いPerlのCGIが大量に出回り始めた時期だよな?
そういうレガシーコードで動いてる掲示板とか日記とかがまだ大量にあるんだろうな
679デフォルトの名無しさん:2008/06/24(火) 20:47:10
>>678
5.6.0 のリリースは2000年。matt's、レスキュー、KENTがPerl4ベースの
汚いスクリプトを撒き散らし始めたのは90年代前半から。
680デフォルトの名無しさん:2008/06/24(火) 20:57:02
汚い汚い言っててもしょうがないので、モダンなperlを紹介していけばいい。
Moooooooooooooooooooooooooose
681デフォルトの名無しさん:2008/06/24(火) 21:43:51
put @cards S1;

って書いてて、

「おかしーなー動かない動かない」


ってうめいてたら、教科書よくよんだら、
putじゃなくてpushじゃん。
なんだよputって。
682デフォルトの名無しさん:2008/06/24(火) 21:44:21
くやしかった、らおまいが「美しいコード」を一般公開してみろやwww

ま、どうせ出来んだろうけどね。口ばっかり達者で何一つ行動できないおまいさんにはな。
683デフォルトの名無しさん:2008/06/24(火) 22:22:05
このすれのどこかに
> 「美しいコード」
ってかいてある?
684デフォルトの名無しさん:2008/06/24(火) 23:05:41
>>681
5.10じゃCのputみたいなsayもあるじゃないかw
685デフォルトの名無しさん:2008/06/24(火) 23:49:49
「Cのput」
686デフォルトの名無しさん:2008/06/25(水) 00:46:40
思わず笑っちまったよ。
プッっと
687デフォルトの名無しさん:2008/06/25(水) 01:04:51
よし、最近perlの勉強している俺が晒してみる。
添削よろしく
長すぎたので二つに分割しました。

begin-base64 644 hanoi.pl
IyEvdXNyL2Jpbi9wZXJsIC13CnVzZSBzdHJpY3Q7CnVzZSBjb25zdGFudCBUT1dFUk1BWCA9PiA4
OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMg5YaG55uk5pyA5aSn5pWwCm15
ICRkaXNrID0gIiI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICMgZGlza+aemuaVsOOBr+aWh+Wtl+WIlwoKZG8geyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyDlhobnm6TmlbDlhaXlipvjg6vj
g7zjg5cKICAgIHByaW50ICLlhobnm6Tjga7mnprmlbDjga8xfiIsIFRPV0VSTUFYLCAi44G+44Gn
44CCOiAiOwogICAgY2hvbXAoJGRpc2sgPSBzY2FsYXIoPFNURElOPikpCn0gdW50aWwgKCRkaXNr
ID1+IG0vXltcZCtdJC8gJiYgKCRkaXNrIDw9IFRPV0VSTUFYICYmICRkaXNrID4gMCkpOwoKbXkg
JXBlZyA9IG1hcCB7JF8gPT4ge1NUQUNLID0+IFtdfX0gJ0EnLi4nQyc7ICAgICAgICAgICAgICAg
ICAgIyDjgrnjgr/jg4Pjgq/jga7liJ3mnJ/ljJYKZm9yIChyZXZlcnNlIDEuLiRkaXNrKSB7ICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyDloZRB44GrZGlza+OBruaemuaV
sOWIhgogICAgcHVzaCBAeyRwZWd7J0EnfS0+e1NUQUNLfX0sICRfICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAjIOWIneacn+WApOOCkuWFpeOCjOOCiwp9CiZkaXNwbGF5OyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMg5Yid5pyf55S76Z2i
6KGo56S6Cm15ICRjb3VudGRpc2sgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICMg6Kmm6KGM5Zue5pWw44Gu5Yid5pyf5YyWCiZIYW5vaSgkZGlzaywgJ0En
LCAnQicsICdDJyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMg44OP44OO44Kk
44G4R28KcHJpbnQgJGNvdW50ZGlzaywgIuWbnuOBp+e1guS6huOBl+OBvuOBl+OBn+OAglxuIjsK
ZXhpdDsKCnN1YiBIYW5vaSB7CiAgICBteSAoJGQsICRBLCAkQiwgJEMpID0gQF87CgogICAgaWYg
KCRkID4gMCkgewogICAgICAgICZIYW5vaSgkZCAtIDEsICRBLCAkQywgJEIpOwogICAgICAgIHBy
688デフォルトの名無しさん:2008/06/25(水) 01:05:52
>>687
つづき2
aW50ICRkLCAi55Wq44Gu5YaG55uk44KSIiwgJEEsICLjgYvjgokiLCAkQywgIuOBuOenu+WLleOB
meOCi1xuIjsKICAgICAgICBwdXNoIEB7JHBlZ3skQ30tPntTVEFDS319LCBwb3AgQHskcGVneyRB
fS0+e1NUQUNLfX07ICAgIyDjgrnjgr/jg4Pjgq/np7vli5UKICAgICAgICAmZGlzcGxheTsKICAg
ICAgICAkY291bnRkaXNrKys7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIyDoqabooYzlm57mlbDjgpLoqJjpjLIKICAgICAgICAmSGFub2koJGQgLSAxLCAkQiwgJEEs
ICRDKQogICAgfQp9CnN1YiBkaXNwbGF5IHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICMg56e75YuV5o6o56e744KS6KGo56S6CiAgICB1c2UgY29uc3Rh
bnQge0hMID0+IDEyLCBUMSA9PiA1LCBGSVQgPT4gMSwgQUREID0+IDJ9OyAgICAgICMg6KGo56S6
6Kq/56+A5a6a5pWwCiAgICB1c2UgY29uc3RhbnQgTklMVE9XRVIgPT4gKCcgJyB4IEhMIC4gJ3wn
IC4gJyAnIHggSEwpOyAgICAgICMg56m65aGUCiAgICBwcmludCBtYXAgKCgnICcgeCBITCAuICRf
IC4gJyAnIHggSEwpLCAnQScuLidDJyk7ICAgICAgICAgICMg5aGUQUJD44Oe44O844Kv6KGo56S6
CiAgICBwcmludCAiXG4iLCBOSUxUT1dFUiwgTklMVE9XRVIsIE5JTFRPV0VSLCAiXG4iOyAgICAg
ICAgICAgICMg5aGU5YWI56uv6KGo56S6CgogICAgZm9yIG15ICRkaCAocmV2ZXJzZSAxLi4kZGlz
aykgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIOWGhuebpOaemuaVsOWIhuODq+ODvOOD
689デフォルトの名無しさん:2008/06/25(水) 01:06:18
>>688
つづき3

lwogICAgICAgIGZvciAoJ0EnLi4nQycpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAjIEHjgYvjgolD44G+44Gn44K544K/44OD44Kv5qSc5p+7CiAgICAgICAgICAgIG5l
eHQgaWYgKCgkZGggPiBAeyRwZWd7JF99LT57U1RBQ0t9fSkgJiYgICAgICAgICAgICMg5YaG55uk
5p6a5pWw44Gv44K544K/44OD44Kv44KI44KK5aSn77yfCiAgICAgICAgICAgICAgICAgICAgKHBy
aW50IE5JTFRPV0VSKSk7ICAgICAgICAgICAgICAgICAgICAgICAgICMg56m644Gu5YaG55uk44Gn
44GX44GfCiAgICAgICAgICAgIG15ICRkbiA9ICRwZWd7JF99LT57U1RBQ0t9WyRkaCAtIEZJVF07
ICAgICAgICAgICAgICMg5YaG55uk55Wq5Y+344KS5Y+W44KK5Ye644GZCiAgICAgICAgICAgIHBy
aW50ICcgJyB4IChITCAtICgkZG4gKyBGSVQpKSwgICAgICAgICAgICAgICAgICAgICMgICAgICDl
t6bnqbrnmb0KICAgICAgICAgICAgICAgICAgJGRuIHggKFQxICsgKCRkbiAtIEZJVCkgKiBBREQp
LCAgICAgICAgICAgICAgIyAgICAgIOWGhuebpOeVquWPtwogICAgICAgICAgICAgICAgICAnICcg
eCAoSEwgLSAoJGRuICsgRklUKSkgICAgICAgICAgICAgICAgICAgICAjICAgICAg5Y+z56m655m9
CiAgICAgICAgfSBwcmludCAiXG4iCiAgICB9Cn0KX19FTkRfXwojICAgICBlbmpveSBoYW5vaSAg
ICAgICAgIHBlcmwsIHY1LjguNgojICAgICAgICAgIHwgICAgICAgICAgIFRoZSBUb3dlcnMgT2Yg
SGFub2kKIyAgICAgICAgKioqKiogICAgICAgICAgICAgICBEc2lwbGF5CiMgICAgICAgKioqKioq
KiAgICAgICAgQVNDSUkgR3JhcGggVG93ZXJzCiMgICAgICAqKioqKioqKiogICAgIAojICAgICAq
KioqKioqKioqKiAgICAgIEF1dGhvcjogWmlua2UgTW90bwojICAgICoqKioqKioqKioqKiogICAK
IyAgICoqKioqKioqKioqKioqKiAgU2F0IEp1biAyMSAyMDA4IDE6MTM6MzggQU0KIyAgKioqKioq
KioqKioqKioqKiogCiMgKioqKioqKioqKioqKioqKioqKg==
====
690デフォルトの名無しさん:2008/06/25(水) 01:08:35
ごめん三つに分割しちゃったよ。改行多すぎるって
プルグラムは、よくあるハノイの塔をperlで書いた物です。
厳しいご意見お待ちします。
691デフォルトの名無しさん:2008/06/25(水) 01:11:08
>>683
汚い、汚いを連呼するキチガイがおるだろ!!!
692デフォルトの名無しさん:2008/06/25(水) 01:11:11
とりあえずbase64を選んだセンスにでもつっこんでおくか
693デフォルトの名無しさん:2008/06/25(水) 01:12:20
美しいコードを書いてみろよ、キチガイ
694デフォルトの名無しさん:2008/06/25(水) 01:13:17
キチガイくんは、さぞかしご立派なコードを書いてるんだろ?
695デフォルトの名無しさん:2008/06/25(水) 01:14:25
結局、口ばっかり達者で何一つ行動できないんだな、キチガイくんw
696デフォルトの名無しさん:2008/06/25(水) 01:45:22
そういや弾も名指しで某Kを馬鹿にしてたな
弾に文句を言えないからといってこんなとこで暴れるなよ>K
697デフォルトの名無しさん:2008/06/25(水) 02:09:42
>>687
まあ良いんでないの?

ハノイを見て思ったことだけど、
cgi系にひどいコードが多いのは、元々出力物自体が構造も
へったくれもないもんだったことが原因なんだろうな。
逆強制ギプスみたいなもん。
698デフォルトの名無しさん:2008/06/25(水) 02:24:59
> そういや弾も名指しで某Kを馬鹿にしてたな

permalink でくれ
699687:2008/06/25(水) 02:25:29
>>697
特に、手直しするような所は無いと受取ってよろしいのですね。
タワー表示部分くらいしか、いぢる所が無かったので、どうしても
ありがちなコードに成ってしまいました。
まだ、小さなスクリプトしか書けませんが、徐々に精進します。
評価をありがとございました。
700デフォルトの名無しさん:2008/06/25(水) 17:49:27
で、キチガイ君は、どれほどご立派なコードが書けるんだい?
みんな待ってるよ、早く、ご立派なコードを公開してくれるのをさwww
さぁ早く。みんな待ってるんだよ。手元にたくさん在るんだろ?ご立派なコードが。
たくさん在りすぎて迷ってるのかい?
701デフォルトの名無しさん:2008/06/25(水) 19:57:39
>>697
出力部分をモジュール化して、書き込みとかログ管理の部分もモジュール化してやれば
いいんだろうけど、そこまでやるほどのものかって言うと微妙なんだよな。
702デフォルトの名無しさん:2008/06/25(水) 22:10:57

   /         ドッカン
  / /    ,,_     ドッカン
 ━━━━━'), )=         ☆ゴガギーン
      ∧_∧ヽ\         /          / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
     (   ) 〉 〉_ _ ____      ∧_∧ ∠  おらっ!出てこい、キチガイ!
     / ⌒ ̄ / "'''"'|    ||     (`∀´ )  \ おまいのご立派なコード晒せや!
      |   | ̄l    |    |/      /     \   \___________
.      |    |  |     |    ||      | |   /\ヽ
       |   |  .|     |    |     へ//|  |  | |
      (   |  .|   ロ|ロ   ゙!l''ヽ/,へ \|_  |   | |
       | .lヽ \ |    |   ヽ\/  \_ / ( )
      | .|  〉 .〉    |    |        | |
     / / / / |     |    〈|      | |
     / / / / |     |    ||      | |
    / /  / / └──┴──┘       | |
703デフォルトの名無しさん:2008/06/25(水) 23:11:36
この人大丈夫なんだろうか
704デフォルトの名無しさん:2008/06/26(木) 01:48:58
後日、自分のレスを見てキチガイは自分だったと気が付くのかな
705デフォルトの名無しさん:2008/06/26(木) 14:10:31
「Perlはじめの一歩」(カットシステム 豊沢 聡)って
わかりやすいよねー
706デフォルトの名無しさん:2008/06/26(木) 14:45:13
それで?
707デフォルトの名無しさん:2008/06/26(木) 14:48:29
著者乙
708デフォルトの名無しさん:2008/06/26(木) 15:01:05
2レスもするほど妬まなくても(^_^;
709デフォルトの名無しさん:2008/06/26(木) 16:51:13
危うい自尊心
710デフォルトの名無しさん:2008/06/26(木) 22:11:04
perlって死んだ言語なのに
今年に入ってから、3冊も
新書出てるんだよねー

でも漏れが調べた範囲内では、
>>705が一番わかりやすいけど。
711デフォルトの名無しさん:2008/06/26(木) 22:14:34
もうしばらくしたらperl6本がいっぱいでるよ
712デフォルトの名無しさん:2008/06/27(金) 00:33:29
PHPって生きてる言語らしいけど
今年1月に出る筈だった5.3は風の噂にも聞かなくなったよねー
その癖、4系絶滅宣言と同時に5.2系絶滅宣言も出しちゃったりして

Zend社ロードマップ:
4系 → もー面倒みません><
5.2系 → もうすぐ5.3出すからさっさと捨てな
6系 → いつ出るかって?知るかボケ!

で?今PHPの旬のバージョンって何だっけ?
713デフォルトの名無しさん:2008/06/27(金) 02:11:07
新しいのばっか追いかける必要は無いだろ。
インストールが趣味?
よくいるよね、インストールしただけ満足するやつ。
714デフォルトの名無しさん:2008/06/27(金) 06:25:54
そういうのがよくいるレベルの職場にしか就職できないんですね、わかります。
715デフォルトの名無しさん:2008/06/27(金) 09:58:54
今週はずっとくだらない言い合いだな
716デフォルトの名無しさん:2008/06/27(金) 10:05:06
一人で暴れてるへんなのがいるだけ
717デフォルトの名無しさん:2008/06/27(金) 10:50:48
そういう時は「またお前か」とレスすればいい
718デフォルトの名無しさん:2008/06/27(金) 14:37:51
昨日、ActivePerl 5.10.0 で Perl/Tk が削除されていることに気がついた。
互換性が無い Tkx に置き換えられてるし… (ノ´Д`)ノ⌒┻━┻
速攻で 5.8.8 に戻した。
719デフォルトの名無しさん:2008/06/27(金) 19:48:45
perl/tkなんて本当に使える人いるのか。
都市伝説じゃないのか。
720デフォルトの名無しさん:2008/06/28(土) 00:33:39
え????tk使えないの????アホなの???????????????
721デフォルトの名無しさん:2008/06/28(土) 00:51:12
かつてはwish使ってましたが何か?
722デフォルトの名無しさん:2008/06/28(土) 03:12:07
スペシャルラーメンタイマーくらいしか作れない
723デフォルトの名無しさん:2008/06/28(土) 15:42:59
「スペシャル」の内容次第では称賛に値するな。
ラーメンできるまでの間、ペンタゴンに侵入してやりたい放題できるとか。
724デフォルトの名無しさん:2008/06/28(土) 16:29:56
それはバージョン2で対応します
725デフォルトの名無しさん:2008/06/28(土) 19:01:22
今正規表現の勉強してるんだが、
^(ハット)って出てきたとき、
行頭、って意味の場合と、
否定、って意味と、二つの場合があるよね。

これってどうやって見分けるの?
ザナドゥの毒薬ポーションみたいに
1ドットだけ違うとかかんべんしてほしいんだけど。
726デフォルトの名無しさん:2008/06/28(土) 19:13:54
あー、あとさー。
perlのゲーム作れないかな?

「ゆうしゃはforeachを覚えた!」
とか、魔法のようにして関数を
覚えていくの。
727デフォルトの名無しさん:2008/06/28(土) 19:14:37
それとsortするときに、
昇順、とか降順、を表すのに、
$a<>$bとかってでてきたんだけど、
これって予約語ですか?
728デフォルトの名無しさん:2008/06/28(土) 19:15:21
あと@allって予約語?
729デフォルトの名無しさん:2008/06/28(土) 19:21:19
一冊、Perlの本を買ったらどうかな。
730デフォルトの名無しさん:2008/06/28(土) 19:27:18
噛んで含めるような本の方がいいかもね
http://www.amazon.co.jp/exec/obidos/ASIN/4774135046
731 ◆TWARamEjuA :2008/06/28(土) 19:28:33
パンチ3/5!?
・・・だったっけ?
732デフォルトの名無しさん:2008/06/28(土) 20:10:41
あと..なんだけど、
配列で、1..100ってやったら、
1から100までの数字を一気に
生成する、って意味だけど、
それとはべつに、正規表現で
..って使う場合もあるよね。
まぎらわしくない?
どうやって見分けてるの?
733デフォルトの名無しさん:2008/06/28(土) 20:15:56
なんか本かって嫁
734デフォルトの名無しさん:2008/06/28(土) 20:44:58
>>730
これ立ち読みしたけどけっこう良さそう.
入門者の一冊目ではないけど
735デフォルトの名無しさん:2008/06/28(土) 21:01:41
     |┃三        / ̄\
     |┃         |     |
     |┃          \_/
 ガラッ. |┃            |
     |┃  ノ//   ./ ̄ ̄ ̄ \
     |┃三    /  ::\:::/:::: \
     |┃     /  <●>::::::<●>  \
     |┃     |    (__人__)     |
     |┃三   \    ` ⌒´    /
     |┃三   / ̄ ̄ ̄ ̄ ̄ ̄ ̄ \
736デフォルトの名無しさん:2008/06/28(土) 21:05:31
今日ヨドバシ行ったらKENTの本があってびっくりした。
2007年に出た本なのに、中身はPerl4。
737デフォルトの名無しさん:2008/06/28(土) 21:27:16
>>736
http://www.amazon.co.jp/dp/4883375358
これか?酷いよなw
738デフォルトの名無しさん:2008/06/28(土) 21:38:14
KENTさん最強じゃねぇか
あの人以上のプログラマなんてこの世に存在せんぜ
739デフォルトの名無しさん:2008/06/28(土) 21:47:00
   /         ドッカン
  / /    ,,_     ドッカン
 ━━━━━'), )=         ☆ゴガギーン    / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
      ∧_∧ヽ\         /          / お!まだやるつもりか?
     (   ) 〉 〉_ _ ____      ∧_∧ ∠  おらっ!出てこい、キチガイ!
     / ⌒ ̄ / "'''"'|    ||     (`∀´ )  \ おまいのご立派なコード晒せや!
      |   | ̄l    |    |/      /     \   \___________
.      |    |  |     |    ||      | |   /\ヽ
       |   |  .|     |    |     へ//|  |  | |
      (   |  .|   ロ|ロ   ゙!l''ヽ/,へ \|_  |   | |
       | .lヽ \ |    |   ヽ\/  \_ / ( )
      | .|  〉 .〉    |    |        | |
     / / / / |     |    〈|      | |
     / / / / |     |    ||      | |
    / /  / / └──┴──┘       | |
740デフォルトの名無しさん:2008/06/28(土) 22:36:06
全てのオチはここにたどり着くのかw
741デフォルトの名無しさん:2008/06/28(土) 23:01:13
>>725
正規表現内部でエスケープされない [ ] で囲まれた部分は文字クラスの定義です。
文字クラスの内側では ^ はその文字クラス全体の否定を表します。
文字クラスの外側では ^ は文字列先頭にマッチするアンカーです。
詳細は perlretut 及び perlre マニュアルページで楽しんでください。

>>726
作ってうpれです。でもこのスレではウケない気がします。

>>727
それはたぶん $a <=> $b のことだと思います。
そうであれば $a と $b はスカラ変数、<=> は数値比較演算子の一種です。
<=> は Perl の組込の演算子なので予約語と言えなくもありません。
$a, $b は他の変数と同様に利用でき、通常は変数名を予約語とは呼びませんが、大人の事情によりこの二つの名前は Perl によってこっそり特別扱いされます。どんな事情かは宿題にします。
perldoc -f sort がヒントです。

>>728
@all は通常の配列です。
Perl の変数にはいくつか種類があります。perlvar マニュアルページを調べてみましょう。

>>732
正規表現の外では . は文字列連結演算子です。最近は以前ほど出番が多くありません。
.. と ... は双子の範囲演算子です。ラテン系の配管工に例えると .. が赤いほうです。
perlop マニュアルページに演算子の完全なリストがあります。
あなたが m// の内側(つまり正規表現のパターン部)を見ているなら、.. は . メタキャラクタが二つ続いた姿です。

Perlな人はこれらを、ほとんど脊髄反射で区別しています。
みんな変態ですが、要は慣れです。がんばりましょう。

そして次からは http://pc11.2ch.net/test/read.cgi/php/1204488452/ で質問してください。
742デフォルトの名無しさん:2008/06/28(土) 23:04:38
自治すんな
743デフォルトの名無しさん:2008/06/28(土) 23:25:56
>>741
わかりましたありがとう。
744デフォルトの名無しさん:2008/06/28(土) 23:27:55
もしかして専用エディタ使えば
色で判断できるのかな?
745デフォルトの名無しさん:2008/06/28(土) 23:40:03
英語のonlyって形容詞と副詞の、
二つの意味があるよね。

これってどうやって見分けるの?
746デフォルトの名無しさん:2008/06/28(土) 23:47:07
接続助詞もあるよ
747デフォルトの名無しさん:2008/06/29(日) 00:30:11
文脈
748デフォルトの名無しさん:2008/06/29(日) 01:31:48
m(_ _)m は正規表現かもしれない。
749デフォルトの名無しさん:2008/06/29(日) 01:55:32
ミニマルPerlが結構良い
750デフォルトの名無しさん:2008/06/29(日) 02:37:45
完成した自作ソフトチューニングの為に、ベンチマークを取りたいのですが
例えばソフト1回の実行で各関数が何%の実行時間を占めているかを
取得する方法は有るでしょうか?
751デフォルトの名無しさん:2008/06/29(日) 04:35:39
Devel::DProf
でググるといいんじゃないかな
752750:2008/06/29(日) 11:47:31
>>751
希望のものができました。有難う御座いました
753デフォルトの名無しさん:2008/06/30(月) 00:02:08
お願いします。範囲演算子で
---
&list(1..15);
sub list {
    foreach  (@_) {
print " $_" if($_ == 5 .. $_ == 10);
    }
}
---
とすれば5から10まで表示されますが、これを
&list(1..7);
&list(1..15);
とすると、最初の&listで5から7が、後の&listで1から10が表示されます。
最初の&listで範囲演算子の右辺が真になる前に終了しているから
なんですが、これをリセットする(5から7と、5から10を表示させる)方法って
あるのでしょうか?
754デフォルトの名無しさん:2008/06/30(月) 00:12:07
前調べたことがあるんだが、結局そんな方法は見つからなかったなあ
俺のケースでは..の後ろにリストの一番最後であるという条件を加えた。
755デフォルトの名無しさん:2008/06/30(月) 00:32:36
>>754
んーやっぱりないですか。コードの別のとこで
見直してみることにします。
ありがとうございます。
756デフォルトの名無しさん:2008/06/30(月) 00:38:26
>>753
# 要はループ最終回までに右辺が真になりゃいいので
sub list {
my $end_of_range = '10E0';
push @_, $end_of_range;
foreach (@_) {
if($_ == 5 .. $_ >= $end_of_range) {
last if /E0/;
print ' ', $_;
}
}
}

# 一方ロシアは
print " $_" if($_ >= 5 and $_ <= 10);
757デフォルトの名無しさん:2008/06/30(月) 00:56:16
>>756
リストの末尾に直接最終値をぶち込んでおく手か。
なるほど・・・
758756:2008/06/30(月) 01:07:04
>>757
いや、前半丸ごとネタ…
759756:2008/06/30(月) 01:24:07
補足すると、

$_ >= 5 and $_ <= 10

に対して、E0 バージョンはアドホックで小汚く、何より明白なバグがある。
なのでその要件なら範囲演算子にこだわらず、比較同士の論理積を取ればよかろう、と。
760デフォルトの名無しさん:2008/06/30(月) 13:09:44
すごいアイデアを思いつきました。

http://cat.piq.jp/

↑このサイトみたいに、
ふたつの「キチガイ」書き込みを
左右に並べて表示して、

「どちらの書き込みのほうがキチガイだと
思いますか?」

と表示して、クリックで投票できるようにして、
ランキングを表示できると面白いと思うんです!
761デフォルトの名無しさん:2008/06/30(月) 13:10:59
「左側のキチガイ書き込み」 vs 「右側のキチガイ書き込み」

こんな風にして、クリックで投票させて、
キチガイランキングをつくるんです。

材料は、ユーザーに投稿させればいいんです!
762デフォルトの名無しさん:2008/06/30(月) 13:16:02
>>760-761
俺もすごいアイデアを思いついたぜ
ここはお前の日記帳じゃないんだ、チラシの裏にでも書いてろ、な?
763デフォルトの名無しさん:2008/06/30(月) 13:22:56
いま、
「これだけで身につく Perl入門例題80」
という本の、2004年発行の初版を読んでいるのですが、
175ページのQ110の、説明を読んでいるのですが、

キーを表す変数 値を表す変数
    ↓           ↓
  $value   = $uriage {$key};

と書いてあるのですが、これって誤植
ですよね?説明が逆だと思うのですが。
764デフォルトの名無しさん:2008/06/30(月) 13:40:52
たぶん誤植だな
変数名を見ても間違いない
765デフォルトの名無しさん:2008/06/30(月) 13:41:10
>>763
その本読むの止めた方が良いかもね。
766デフォルトの名無しさん:2008/06/30(月) 13:57:57
>>763
せっかく読んでるんだから読むのを止めろとは言わないが刊行年が微妙だな。
既に5.8系が出てる時期だけども多分記述はそれ以前の古い物だろう、
それを念頭に置いて読むなら為にはなるかもしれん。
あとmyやlocalやourの説明はまだ先なのか、それとも今後も全然出て来ないのか…。
767デフォルトの名無しさん:2008/06/30(月) 19:26:42
素人がなんとか『Perl言語プロブラミングレッスン[入門編]』というのを読み終わったんですが、
ステップアップとしてお薦めのPerl本といえば何になりますでしょうか?
やっぱりラクダ本がいいんでしょうか?
768デフォルトの名無しさん:2008/06/30(月) 19:45:10
769デフォルトの名無しさん:2008/06/30(月) 21:12:08
>>767
まず、本から離れろ。
770デフォルトの名無しさん:2008/06/30(月) 22:46:52
>>767
リャマ→ラクダ→PBP
というオライリーコンボが王道かな。
読むのと平行して必ず何か書き続けると吉な予感。

# それにしても結城さんの本はハズれないなあ。
771デフォルトの名無しさん:2008/06/30(月) 23:02:52
>>699
> 特に、手直しするような所は無いと受取ってよろしいのですね。

受取るのはそりゃかまいませんが、突っ込みどころがないわけでもないんです。
単に BASE64 で寄越すあたりで萎えちゃってるんだと思うですよ。遅レス失礼。
772デフォルトの名無しさん:2008/06/30(月) 23:06:58
結城は地雷多すぎだろ
773デフォルトの名無しさん:2008/06/30(月) 23:16:53
>>771
んなもん何でも良いじゃん。小姑みたいなやつだ。
774767:2008/06/30(月) 23:17:25
>>770
ハイ。その順番で頑張ります。
ところで、リャマ本というのは『はじめてのPerl』の事でOKでしょうか?
775デフォルトの名無しさん:2008/06/30(月) 23:27:03
>>774
はじめてのPerl×
初めてのPerl 第3版 ○
776デフォルトの名無しさん:2008/06/30(月) 23:29:09
>>775
サンキューです。週末にでも本屋さんで確認して買ってみます。
777デフォルトの名無しさん:2008/06/30(月) 23:31:43
アルパカ本(続・初めてのPerl 改訂版)も忘れないでください
778デフォルトの名無しさん:2008/07/01(火) 02:01:31
とりあえず本を買うとは、、、普通ならこうでしょ?
% man perl
% man perlsyn
% man perlsub
% man perlfunc
% man ...

まあ、適当に何冊も本読み散らかして理解した気になってればいいんじゃない?
779デフォルトの名無しさん:2008/07/01(火) 02:07:34
そうは言うが
オフラインにはオフラインの良さがあるよ
と思う俺は異端なのかね?
さすがにラクダ本は腕がくたびれるが
780デフォルトの名無しさん:2008/07/01(火) 02:17:54
とりあえず気になった本は(会社のお金で)買いまくる派なうちのおすすめは
初めてのperl
effective perl
らくだ
クックブック
#それぞれ最新のやつ…最近続とかついてよくわからんね(汗


>>779
pdfとかソースもとりあえず印刷しちゃうオフライン派
(そしていろいろめんどくさいから用がなくなったらシュレッダー)
エコってなんだろとか思うけどorz

781デフォルトの名無しさん:2008/07/01(火) 02:21:29
>>778
manなりperldocなりはリファレンスにはなるがチュートリアルにはならん。
目的が違うなら手段も違う、初心者にいきなり薦めるのは無謀。
782デフォルトの名無しさん:2008/07/01(火) 03:18:08
>>781
最近はチュートリアルも man に含まれているようですが。

だいたいperlなんか学ぼうとするヤツの目的はヒマつぶしなんだろうから、
いっぱい本買って小説みたいに読むのがいいとおもうよ
783デフォルトの名無しさん:2008/07/01(火) 03:38:55
別れた二人が惹かれ合うところ辺りから引き込まれるんだよな
784デフォルトの名無しさん:2008/07/01(火) 05:35:56
>>781
横レスだが
man ( perldoc ) perlは、ラクダ本のまんまだぞ?
お前の言うことは「ラクダ本を初心者にいきなり勧めるのは無謀」

…なんだ、正しいな。
785デフォルトの名無しさん:2008/07/01(火) 07:13:32
俺は初心者にはリャマ本一択だな
あれを面白いと思える奴は見どころがある…と思う
786デフォルトの名無しさん:2008/07/01(火) 08:40:43
思ったんだけど、もしかして英語が読めない人っているんじゃないかな?
いや、そんなはずないか。バカなことを言っちゃいました。
787デフォルトの名無しさん:2008/07/01(火) 08:45:42
>>778
> まあ、適当に何冊も本読み散らかして理解した気になってればいいんじゃない?

逃避行動として本に執着して「勉強しているふり」をして、いつまでもプログラムを
書かない奴を何人も見てきた。「次の本」とか言う奴を見かけると、その点が気になる。
788デフォルトの名無しさん:2008/07/01(火) 12:31:19
正直、長文の英語はあんまり読みたくないなあ。
まあ、プログラミング関係の英文は、文法が正直だと言われる工学系の文章の中でも、特に簡単なほうだとは思うけど……。
789デフォルトの名無しさん:2008/07/01(火) 13:55:30
まぁ、たいして英語が読めない俺が言うのもなんですが、
会話の言語だろうとプログラムの言語だろうと、実践と慣れですよね。

頭の中で日本語に変換されないで直で読めると取りあえずOKだと思います。
俺は英語の場合はけっこう日本語に変換されるけど。

本はあれです、いい所もあるけど、悪いところもあります。
俺は画面で字をずっと読んでると具合悪くなるので印刷したり本で読んだりもします。

790デフォルトの名無しさん:2008/07/01(火) 18:32:29
CPANモジュール使うのに英文不可避だろ。
英語読めなかったらもう致命的。ていうか日本語だけでよくやってきたな、と感心する。
791デフォルトの名無しさん:2008/07/01(火) 18:32:38
Perlはちょっと前に始めたんだけど、書籍はかなり買ってしまった。
初めてのPerlや、ラクダ本2冊、クックブック2冊などなど。

しかーし!なんとPerl6では、5を勉強した人が発狂するほど書式や
言語使用が変わるという話じゃないですか!もう5勉強する気なくなりました。
今のうちに本を売りさばいとくのが得策ですよね?あと6っていつごろ
リリースされそうなんでしょうか…。そもそもPerlに未来はあるのでしょうか。
こんな仕打ち、C++言語をやってるときには、くらったことない。
互換性って大事だなぁ。
792デフォルトの名無しさん:2008/07/01(火) 18:40:32
> CPANモジュール使うのに英文不可避だろ。

ソース読めばおk
793デフォルトの名無しさん:2008/07/01(火) 18:51:00
駄目な奴は何をやっても駄目
794デフォルトの名無しさん:2008/07/01(火) 19:07:36
つまり、一つでも駄目じゃないものがあったら、そいつは駄目な奴ではない。
そういう意味では非常に「査定の甘い」言葉である。
795デフォルトの名無しさん:2008/07/01(火) 19:09:50
とはいえ自分に一つでも駄目じゃないものがあるかと問われると難しいものがある

>>791
君にはpythonが向いてるんじゃない?
796デフォルトの名無しさん:2008/07/01(火) 19:29:32
>>791
時代によって要求言語そのものがガラッと変わるのなんてザラだし
(Web時代に入ってからえらく変わった)、その程度で
ピーピー言ってるようじゃ どの道だめだね。
797デフォルトの名無しさん:2008/07/01(火) 19:33:37
Perl5->6の変化なんて、D言語に比べたらかわいいもんだろ。
798デフォルトの名無しさん:2008/07/01(火) 19:34:33
でもラクダ本とかいつまでも持っててもしょうがないですよねぇ?
799デフォルトの名無しさん:2008/07/01(火) 19:46:19
燃料にでもすれば
800デフォルトの名無しさん:2008/07/01(火) 19:49:37
イチャモンつけたいだけだろww
801デフォルトの名無しさん:2008/07/01(火) 19:53:44
いまだに「はじめて読む8086」を持ってる俺に対する挑戦か?
本って一旦買うと捨てられなくってな。
802デフォルトの名無しさん:2008/07/01(火) 19:55:38
図書館にでも寄贈すればいいよ。
803デフォルトの名無しさん:2008/07/01(火) 20:08:17
>>796
一見すると、この世界の諸行無常を正論で語ってるように見えるけど、
Perl5と6の違いをそこに絡めて「その程度」扱いするのは、幾ら何でも不自然だよ。

あと、>>791にダメの烙印押すより先に、Perl6の先行きのほうがもっとダメっぽいことを
ちゃんと言ってあげたほうがいいと思うよ。
804デフォルトの名無しさん:2008/07/01(火) 20:12:07
pythonでもつかってろよ
805デフォルトの名無しさん:2008/07/01(火) 20:16:41
だからPerl6の行く末の話は厳禁なんだって
信者がありとあらゆる手で話をそらして噛み付くから
806デフォルトの名無しさん:2008/07/01(火) 20:19:52
人にどう対応するか指示を出すだけで、自分は対応しない人ってなんなの?
807デフォルトの名無しさん:2008/07/01(火) 20:32:23
Perlはもはや終わりという話は、過言でもなかったのか。
オブジェクト指向取り入れたあたりから、言語が肥大化して
Perlの価値が薄れていったんだろうけど。6で決定的になりそうな予感。
808デフォルトの名無しさん:2008/07/01(火) 22:35:51
ぶっちゃけ、新人にはPythonやっとけと言いたい。
809デフォルトの名無しさん:2008/07/02(水) 00:05:26
>>791
手元に動くおもちゃがあるのに、届くかどうかもわからんクリスマスプレゼントを待つというなら止めやしません。
仮に届いたとして、その Perl6 のノウハウが固まる頃には、きっと Perl7(仮) のリリース予定がアナウンスされているだろうけれど、そん時ぁどうすんだべ。
ちなみに Perl6 は鳳たんの Pugs で遊べるよ♪
810デフォルトの名無しさん:2008/07/02(水) 00:15:40
Perl6 はプロジェクトのコアとなる Parrot による多言語統合実行環境という側面も併せ持っています。
当然 Perl6 及び 5 をサポートしますが、結果としての姿は「次世代のPerl」というよりも、むしろ「ボトムアップから生まれた UNIX 文化風味の .NET」とでも言うべきものになるでしょう。
811デフォルトの名無しさん:2008/07/02(水) 00:19:38
Perl6がリリースされても、Perl5書き続けるだろうな。ほとんど保守のために。
Perl6はPerlとは別の言語って認識になるような気がする。

つまり俺が知ってるPerlは5で打ち止めってことだな。
812デフォルトの名無しさん:2008/07/02(水) 00:20:31
-> かわいいよ ->
813デフォルトの名無しさん:2008/07/02(水) 00:25:08
>>791
安心しる、Perl6なんて一部の言語マニア以外誰も使わんから。
UNIX系OSの大半に/usr/bin/perlが入ってる時点で、Perl5は覚えて損はない。
814デフォルトの名無しさん:2008/07/02(水) 01:00:12
$@%文化がPHPと同じ$文化になる時点で終わりだな
815デフォルトの名無しさん:2008/07/02(水) 01:12:30
-> も . に替るんだっけ?
816デフォルトの名無しさん:2008/07/02(水) 02:28:19
>>813
ほほう。最近の perl の居場所は /usr/local/bin/ ではないのか。
817デフォルトの名無しさん:2008/07/02(水) 03:10:26
FHS準拠だと /usr/bin/ だろうね
818デフォルトの名無しさん:2008/07/02(水) 06:15:15
調子に乗って cygwin 版 perl を 5.8.5 から 5.10.0 にしたら namazu が動かなくなってハマった。

始めは cpan で 5.8.8 を /usr/local/bin に入れたんだけど kakasi の dll モジュールのロードでこける。
kakasi 本体でなら動いたけど処理が遅い。

結局、kakasi を cygwin 版をやめてソースから入れ直し + 5.10.0 用の NKF.pm と kakasi.pm 作成で 5.10 から動かす事に。
5.8.8 を入れた意味が無かった。

要するに、こんな長文読んでくれた人乙って事だ。
819デフォルトの名無しさん:2008/07/02(水) 14:34:08
要するに、こんな長文
まで読んだ
820デフォルトの名無しさん:2008/07/02(水) 14:55:46
なんというツンデレ
821デフォルトの名無しさん:2008/07/02(水) 15:25:35
>>820
ツンデレっていう言葉を使いたかったんだろうけど、使い方を間違ってるよ。
822デフォルトの名無しさん:2008/07/02(水) 20:20:47
質問させて下さい。
変数$str1 中にある「あいうえお」を「かきくけこ」
に変換しようとしています。しかし、$str1はhtml文字列で、
不定箇所にタグが含まれています。
(但し、ここでは、問題になるタグは<b>と</b>のみとします)
現在、$str1中で<b>と</b>に囲まれた部分は各文字の後に、
普通は使わない特殊な文字(ここでは「★」とします)
を付けるようにして対処しています。
例えば$str1が「あい<b>うえおさ</b>しすせそ」であれば、
これを「あいう★え★お★さ★しすせそ」に変換し、
$str1 =~ s/あ(★?)い(★?)う(★?)え(★?)お(★?)/か$1き$2く$3け$4こ$5/g;
を実行して「かきく★け★こ★さ★しすせそ」を得た後に
「かき<b>くけこさ</b>しすせそ」に変換しています。

もっとスマートなやり方はないでしょうか?
823デフォルトの名無しさん:2008/07/02(水) 20:24:20
s/あ((?:<.+?>)?)い((?:<.+?>)?)う((?:<.+?>)?)え((?:<.+?>)?)お/か$1き$2く$3け$4こ/g;
824デフォルトの名無しさん:2008/07/02(水) 23:05:03
>>823
こういうカキコ見ると
一瞬、「荒らしか?」と思うよな。
でもちゃんと回答してるんだぜ
825デフォルトの名無しさん:2008/07/02(水) 23:09:18
>824
とりあえずラリー先生に謝ろうぜw
826デフォルトの名無しさん:2008/07/02(水) 23:57:22
… tr/// が使えるケースでは無いのか?
827デフォルトの名無しさん:2008/07/02(水) 23:58:49
>>822
単純にあ→か、い→き、・・・、と置換するのではだめなのか?
それなら間のタグとか意識する必要もないが。

まあどうせ元の文はもっと複雑でここに書かれていないいろんな条件が付くんだろうけど。
828デフォルトの名無しさん:2008/07/03(木) 00:05:41
>>822
$str =~ tr/あ-お/か-こ/
829デフォルトの名無しさん:2008/07/03(木) 00:06:11
「あ」→「か」じゃなく、あくまでも「あいうえお」→「かきくけこ」なんじゃない?
830822:2008/07/03(木) 00:11:11
>>823
ありがとうございました。
やっぱり、$1 $2 $3 …の行列になるのは仕方ないようですね。
831デフォルトの名無しさん:2008/07/03(木) 00:45:49
>>830

my $replacement = '';

$str1 =~ s/(あ(?:<.*?>)?い(?:<.*?>)?う(?:<.*?>)?え(?:<.*?>)?お)/
$replacement = $1;
$replacement =~ tr/あ-お/か-こ/;
$replacement;
/eg;

# ちょいと意固地になってみやした。
832デフォルトの名無しさん:2008/07/03(木) 01:17:55
>>828
これで
「おはようございます」
を返還したら
「こはようござきます」
になるの?
833デフォルトの名無しさん:2008/07/03(木) 01:22:55
$abc="おはようございます";

$abc =~ tr/あ-お/か-こ/;
print $abc;

↑これだとなぜか動きません。
バグはどこですか?
834デフォルトの名無しさん:2008/07/03(木) 01:40:16
use encoding
835デフォルトの名無しさん:2008/07/03(木) 01:45:46
$w = 'おはようございます';
$w =~ tr/お/こ/; # 小文字に正規化
print $w,"\n";


↑これなら動く。でもこれ↓だと

$w = 'おはようございます';
$w =~ tr/あ-お/こ/; # 小文字に正規化
print $w,"\n";

エラーになる。なんで?

Invalid range "?αソソセ?-?αソソセ・ in transliteration operator at a.pl line 2.
836デフォルトの名無しさん:2008/07/03(木) 01:48:49
use encoding
837デフォルトの名無しさん:2008/07/03(木) 01:59:40
イマドキはむしろ use utf8 及び use Encode を勧めるところでしょう。
838デフォルトの名無しさん:2008/07/03(木) 02:09:29
>>833
>>835
序盤に下記二行を加え、スクリプトそのものは UTF-8 で書いてね♪

use utf8; # スクリプトを utf8 として扱う
use Encode; # 入出力用(decode(), encode() 他がエクスポートされる)
839デフォルトの名無しさん:2008/07/03(木) 02:14:49
日本語使うなら、ファイルの先頭に
use utf8;
binmode STDOUT => "encoding(cp932)";
と書いて、ソースをUTF8で書くのが一つのパターンだな。
あるいは、
use encoding "cp932";
と書いて、ソースをSJISで書くか。
いまどき、SJISで書く人は奇特だといえるが。
840デフォルトの名無しさん:2008/07/03(木) 02:19:33
小文字に正規化ってコメントが謎だな
841デフォルトの名無しさん:2008/07/03(木) 02:41:52
(^_^;)
842デフォルトの名無しさん:2008/07/03(木) 09:27:26
perlでオブジェクト指向なプログラミングの
よさげなサイト教えて下しあ
843デフォルトの名無しさん:2008/07/03(木) 11:10:23
次スレからは、このテンプレ入れようよ。
---------------------------------------------------------


#  【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)";
# 次に、あなたが実行したい処理の内容を入れて下さい。
print "SJISには、「十表貼申予暴」のようなダメ文字がある。\n";
sleep(1);
# 以上の内容は、日本語処理が解らない人でも、とりあえず日本語処理ができてしまう
# おまじないです。条件が異なる場合の対処方法は、ご自分で勉強して下さい。

844デフォルトの名無しさん:2008/07/03(木) 13:26:43
>>842
まずは、
% perldoc perlboot

% perldoc perltoot

% perldoc perltooc

して読んでみては?

日本語訳ページ
http://fleur.hio.jp/perldoc/perl/5.8.8/pod/perlboot.ja.html
http://perldoc.jp/docs/perl/5.10.0/perltoot.pod
http://perldoc.jp/docs/perl/5.10.0/perltooc.pod
845デフォルトの名無しさん:2008/07/03(木) 16:38:55
>839
CGIでの話になるんだけど、携帯電話のブラウザはShift_JISが基本だから、
さくっとShift_JISで書いてしまうことはある。

いや、ちゃんとしたコードを書くときはHTML::Templateとかで表示を分けるんだけどさ。
846デフォルトの名無しさん:2008/07/03(木) 16:51:10
>>843
先生!
open FILE, '<:encoding(cp932)', 'C:/Documents and Settings/NECPCuser/デスクトップ/07年度売上.csv';
がエラーになります!なんで???
ちゃんと utf8 でコードを書いたのに。
847デフォルトの名無しさん:2008/07/03(木) 17:03:06
>>845
IOフィルタかましてUTF-8で書けばいいじゃん。
理由になってないよ
848デフォルトの名無しさん:2008/07/03(木) 17:56:33
>>846
>>843の通りにやったのなら、
open FILE, 'C:/Documents and Settings/NECPCuser/デスクトップ/07年度売上.csv';
と書くべきだと思われる。
849デフォルトの名無しさん:2008/07/03(木) 17:57:23
おなじだろ。
850デフォルトの名無しさん:2008/07/03(木) 18:38:05
use utf8してんでそ?
ファイルのパスがutf8 flaggedなだけじゃないかな

つーかファイル開く時に例外処理入れるのは乳児でも忘れない常識
それとopenは引数3つにするかIO::Fileなり便利なモジュールを使うべし
open my $fh, '<', $file or die $!;
851デフォルトの名無しさん:2008/07/03(木) 19:25:33
>>843 を使っても、ファイルパスに指定する文字列は sjis でないとダメ。
readidir の返り値とかも utf8 フラグ無しの sjis だったりするから注意。
852デフォルトの名無しさん:2008/07/03(木) 19:26:22
訂正
× readidir
○ readdir
853デフォルトの名無しさん:2008/07/03(木) 19:30:47
そのへん5.10でも改善されてないの?
854デフォルトの名無しさん:2008/07/03(木) 21:50:18
>847
いやだから、さくっと書くときって言ってるじゃん。
855デフォルトの名無しさん:2008/07/03(木) 22:15:47
>>848
ありがとうございます。さっそくそのとおりやってみましたが、ダメでした。
「No such file or directory at C:\TEMP\f.pl line 8.」 と出ます。
もちろん、07年度売上.csv というファイルはデスクトップの上にあります。

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

$file = 'C:/Documents and Settings/NECPCuser/デスクトップ/07年度売上.csv';
open my $fh, '<', $file or die $!;

試しに下記のバッチファイルを作ってみたら、ちゃんと内容が表示されます。
type "C:\Documents and Settings\NECPCuser\デスクトップ\07年度売上.csv"

もうワケがわかりません。
856デフォルトの名無しさん:2008/07/03(木) 22:17:32
アンカーミスです。
>>850 の方法も、 >>848 の方法でも、どちらもダメでした。
857デフォルトの名無しさん:2008/07/03(木) 22:26:01
>>850 さんのアドバイス通り、 IO::File というのを使ってみました。

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

my $io = IO::File->new();
$io->open('C:/Documents and Settings/NECPCuser/デスクトップ/07年度売上.csv', 'r') or die $!;

・・・やっぱ 「No such file or directory line 8」 です orz
858デフォルトの名無しさん:2008/07/03(木) 22:29:55
#use utf8;
#use open IO => ":encoding(cp932)";
#binmode STDIN => ":encoding(cp932)";
#binmode STDOUT => ":encoding(cp932)";
#binmode STDERR => ":encoding(cp932)";

$file = 'C:/Documents and Settings/NECPCuser/デスクトップ/07年度売上.csv';
open my $fh, '<', $file or die $!;
print <$fh>;

当然ですが、スクリプトをシフトジスで保存したら正常に動きます。
という事は、>>843 が間違っているのでしょうか???
859デフォルトの名無しさん:2008/07/03(木) 23:59:05
# utf8 で保存
use utf8;
use open IO => ":encoding(cp932)";
binmode STDIN => ":encoding(cp932)";
binmode STDOUT => ":encoding(cp932)";
binmode STDERR => ":encoding(cp932)";
use Encode;

$file = 'C:/Documents and Settings/NECPCuser/デスクトップ/07年度売上.csv';
open my $fh, '<', encode("cp932", $file) or die $!;
860デフォルトの名無しさん:2008/07/04(金) 00:22:19
文字コードの扱いに関する限りPerlとActivePerlは別物と考えたほうがいい
861デフォルトの名無しさん:2008/07/04(金) 01:28:06
850,851に答え書いてあるじゃん
単にファイルパスがutf8フラグのついたUTF8文字列になってるからPerlがファイルを見つけられてないだけ
862デフォルトの名無しさん:2008/07/04(金) 02:48:58
NTFSはファイル名をウニコードで持ってるのに、
なんでANSI文字コードじゃないといかんの?

まさか、CreateFileAつかってるんか?
863デフォルトの名無しさん:2008/07/04(金) 03:16:28
>>842
他の言語でオブジェクト指向してみたことあるなら、そのめんどくささと脇の甘さに嫌気がさす。
オブジェクト指向に触れたことがないなら、それを学ぶために別の言語から入る事を勧める。



ようするに perl OO なんてやめとけ。
864デフォルトの名無しさん:2008/07/04(金) 10:54:30
>>862
昔の「しがらみ」というものがあるだろう。
ウニコードでやりとりするようにすると、昔のソフトが全滅する。
865デフォルトの名無しさん:2008/07/04(金) 12:38:27
Perlのオブジェクト指向は、サブルーチンの呼び出し、引数渡しの手続きを省力化する手法という認識だな。
他言語のオブジェクト指向の制約の厳しさを考えると、オブジェクト指向と呼んでいいものかどうか。

そういうふうに割り切って考えると、Perlのオブジェクト指向(みたいなもの)は案外悪くない。
866デフォルトの名無しさん:2008/07/04(金) 12:59:04
>>843
binmode STDERR => ":encoding(cp932)";

はやめたほうがいいかもね。例えば die "finish";
を実行すると、STDERR に
finish at (ファイル名)(行番号)
と出力されるが、ソースファイルが日本語のファイル名だと、
元々sjisの文字列をutf8とみなして、さらにsjisに変換しようとするから、
エラーが起こって何も出力されなくなる。
STDERR に日本語出力するときは、その都度変換すべきだろうね。
867デフォルトの名無しさん:2008/07/04(金) 15:21:33
質問です。
指定したディレクトリの直下にあるファイルのファイル名を
全て取得するには、どうすれば良いのでしょうか?
よろしくお願いします。
868デフォルトの名無しさん:2008/07/04(金) 17:04:42
>>867
File::Slurpのread_dirを使う。
869デフォルトの名無しさん:2008/07/04(金) 18:48:35
File::Find::Rule とかもべんりだゼ!
870デフォルトの名無しさん:2008/07/05(土) 00:47:49
>>864
いや、utf8フラグたってるかどうかで切り分ければいいんだから、そんな問題は発生しないはずだ
871デフォルトの名無しさん:2008/07/05(土) 04:21:31
>>862
UnicodeとUTF-8の違いを理解してないアフォ発見!
このスレを1から全部読め。
  ↓
http://pc11.2ch.net/test/read.cgi/tech/1177930957/
872デフォルトの名無しさん:2008/07/05(土) 12:37:41
> このスレを1から全部読め。

説明できないということは、お前さんも結局何も知らないわけですね。
873デフォルトの名無しさん:2008/07/05(土) 12:55:28
>>862
W系使う直前で MultiByteToWideChar(CP_ACP,.. してるから。
(W系で受け取った結果は CP_ACPでMultiByte文字列化)
それはもう、utf8フラグなんて無視してCP_ACP(システムのデフォルトコードページ)のみ。

このへんは(utf8フラグを見てCP_ACPとCP_UTF8を使い分けていた)5.6の方がマトモなんだよな。
874デフォルトの名無しさん:2008/07/05(土) 13:52:51
Perlはutf8フラグの存在が癌

プログラム言語史上かつてないほどの
糞仕様を作ってしまった。
875デフォルトの名無しさん:2008/07/05(土) 14:10:36
>>873
酷いな。なんでそんなことしちゃったん?

>>874
それはちがう。
perlに明示的な型がない以上、バイナリシーケンスと文字列を区別するために何らかのフラグは必要。
876デフォルトの名無しさん:2008/07/05(土) 14:11:38
>>874
つかいかたを理解できなかったからって、こんな場所でつまんないこと書くなよw
877デフォルトの名無しさん:2008/07/05(土) 20:01:51
>>872
「説明しない」のは「説明できない」からだ、というのを論理的に証明できれるなら、その結論もアリ。
がんばって。
878デフォルトの名無しさん:2008/07/05(土) 20:33:26
できれる
879デフォルトの名無しさん:2008/07/05(土) 21:29:46
we can be able to do it.
880デフォルトの名無しさん:2008/07/05(土) 22:35:18
おかげさまで売り上げの集計ができそうです。
ところが、今度は rename で 「No such file or directory」 エラーが出ます。

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

$file = 'C:/Documents and Settings/NECPCuser/デスクトップ/07年度売上.csv';
$bak = 'C:/Documents and Settings/NECPCuser/デスクトップ/07年度売上(集計済).csv';
open my $fh, '<', encode("cp932", $file) or die $!;
# (中略)
close $fh;
rename $file, $bak or die $!; # ☜ ここ

集計済にしておかないと、売り上げが重複してとんでも無いことになっちゃうんです・・・
881デフォルトの名無しさん:2008/07/05(土) 22:38:06
>>879
「出来る」ことをそこまで強調した英文を初めて見た。
882デフォルトの名無しさん:2008/07/05(土) 22:38:08
頭が極端に悪い人?
883デフォルトの名無しさん:2008/07/05(土) 23:07:49
>>880
同様にencodeしろよ。
884デフォルトの名無しさん:2008/07/06(日) 01:46:14
ようはアルファべットでは問題なくても
日本語を正規表現で置換するときには
utfなんちゃんらの処理が必要ってこと?
885デフォルトの名無しさん:2008/07/06(日) 01:54:26
もうちょっとはっきり言ってくれないと。
yesともnoとも答えてやれんがな。
886デフォルトの名無しさん:2008/07/06(日) 02:38:16
頭が悪すぎる
887デフォルトの名無しさん:2008/07/06(日) 03:04:47
だから。
tr///の正規表現で置換するとき、
アルファベットは問題なくても、
日本語では問題が出るのかって聞いてるの。
888デフォルトの名無しさん:2008/07/06(日) 03:27:17
そんなことどこで訊いてたんだよ。
889デフォルトの名無しさん:2008/07/06(日) 09:13:30
どんな問題を解決したいのかを明確に書きましょう。
890デフォルトの名無しさん:2008/07/06(日) 12:25:16
>>887
問題ない。
原因は他にあると思われ。
891デフォルトの名無しさん:2008/07/06(日) 13:58:07
今までの話をまとめて、>>843 のこのテンプレは、こんなもんでどう?
---------------------------------------------------------

#  【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でエンコードする必要があります。
892デフォルトの名無しさん:2008/07/06(日) 14:03:43
いい加減今の時代にDOS窓って呼び方はやめないかw
893デフォルトの名無しさん:2008/07/06(日) 15:42:45
>>887
# >>884 の内容から >>887 を導けたらエスパーなので、「だから。」とイキまれても困ります。
# tr/// の痴漢モジリストは正規表現と違うけれど本題でないのでスルー。
# 「アルファベット」が us-ascii なのか [:alpha:] なのか不明ですが面倒なので us-ascii と仮定。

utf8 プラグマの効果範囲でマルチバイトの文字列操作が正しく行われるためには

  ・扱う文字列が、Perl ソースコード中に正しく UTF-8 で記述されたリテラルであるか、
  ・または Perl 内部表現に正しく decode() された文字列である
  ・そして、出力時には出力先にとって処理可能な形式に encode() する

必要があります。

つまりこゆこと (UTF-8 で書き、cmd.exe 又は command.com 等の cp932 環境上で実行):

use utf8;
use Encode;

my $ウホッ = 'ぷるん';
$ウホッ =~ s/ぷ/にゅ/;
print encode('cp932', $ウホッ . さぶ());

sub さぶ {
return('アッー!');
}
894デフォルトの名無しさん:2008/07/06(日) 19:02:14
http://pc11.2ch.net/test/read.cgi/prog/1211724956/327

有望そうなperlの新人を発見しました
895デフォルトの名無しさん:2008/07/06(日) 21:12:31
皆様の暖かいアドバイスのおかげで、やっと意味が理解できました!
ファイル名と思しきとこは全て、encode("cp932",ほげほげ) するんですね!
open だけかと思ってました。rename も encode("cp932",ほげほげ) が必要なんです。

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

$file = 'C:/Documents and Settings/NECPCuser/デスクトップ/07年度売上.csv';
$bak = 'C:/Documents and Settings/NECPCuser/デスクトップ/07年度売上(集計済).csv';
open my $fh, '<', encode("cp932", $file) or die $!;
# (中略)
close $fh;
rename encode("cp932", $file), encode("cp932", $bak) or die $!; # ☜ ここ改良!

いろいろ実験してみたら、他にも
unlink, utime, stat, -f -e -s など、
さらには LWP::UserAgent の mirror メソッドするときも
$ua->mirror("http://ほげほげ.com/", encode("cp932", "ほげほげ.html"));
って感じで、なんでもかんでも encode("cp932", ほげほげ) するワケですね。





一体全体、なんでまたこんなクソ仕様にしたんでしょう???使えねーーーーーーよ。
死ね perl !
896デフォルトの名無しさん:2008/07/06(日) 21:21:18
馬鹿は大変だな。
897デフォルトの名無しさん:2008/07/06(日) 21:30:25
つか、どういう意図でこんなクソ仕様にしたんでしょう?
898デフォルトの名無しさん:2008/07/06(日) 21:31:43
>>897
もう解決したんだろ。さようなら。
899デフォルトの名無しさん:2008/07/06(日) 21:31:44
ちょっと手元のスクリプトを Windows 対応にしてみたら
30箇所も encode("cp932", ほげほげ) する必要があった。
perl 死ね!
900デフォルトの名無しさん:2008/07/06(日) 21:36:05
>>899
× Windows 対応
○ 日本語版 Windows 対応
901デフォルトの名無しさん:2008/07/06(日) 21:37:02

まるで 「日本語死ね!」 とでも言いたげだな
902デフォルトの名無しさん:2008/07/06(日) 21:39:15
900=左斜め上の国の人?
903デフォルトの名無しさん:2008/07/06(日) 21:39:29
>30箇所も encode("cp932", ほげほげ) する必要があった。
あーあ
904デフォルトの名無しさん:2008/07/06(日) 21:41:41
いいよね、日本語つかわなくて済む国の人は。うらやましいよ。

つうか、perl 使わなければ日本でも問題なし。perl 死ね!
905デフォルトの名無しさん:2008/07/06(日) 21:44:02
>>895
# 下記のように先に保管してしまう手もあります。
# マルチバイトのファイル名操作が必要だったり
# マルチバイトのファイル名をハードコードする必要があったり
# といったむずがゆい場合に少し楽ができます。

my $file = 'C:/Documents and Settings/NECPCuser/デスクトップ/07年度売上.csv';
my $bak = $file;
$bak =~ s/\.csv$/(集計済).csv/;

my %filename = (
utf8perl => $file,
cp932 => encode('cp932', $file),
bak => encode('cp932', $bak),
);

# ここではたまたまハッシュに格納していますが別に何でも可。
906デフォルトの名無しさん:2008/07/06(日) 21:56:01
>>897
シングルバイト圏の連中があいかわらずA系のAPIを使ってるから。
こういう仕様にしようと思ったからこうなってるんじゃなくて、
何も考えてないからこういう結果になっただけだ。
これじゃ困るから全部W系のAPIを呼ぶようにしろと説得してくれ。
907デフォルトの名無しさん:2008/07/06(日) 22:02:09
困ったのが opendir/readdir
opendir するときは、引数のディレクトリ名は encode("cp932", ほげほげ) しなきゃいけない。
ところが readdir で返される配列は、ななんとシフトJIS!
ということは、返された値を1個1個、decode("cp932", ほげほげ) しなきゃならない。
これをやらないと、今度は、この値を使って open/rename/unlink/-f -d -e -s などなどするとき
間違って encode("cp932", ほげほげ) してしまいそう。
また、ファイル名を正規表現で加工したいときもあるだろう。
だから、readdir で返される配列は、decode("cp932", ほげほげ) しといたほうが安全。
混乱を避けるためには decode("cp932", ほげほげ) しときなさい、ってこと。

あと、__FILE__ も、@ARGV もだ。

こんなことしてたら、マトモなアプリなら30箇所でも40箇所でも
encode("cp932", ほげほげ)/decode("cp932", ほげほげ) が出てくる。

perl 死ね!
908デフォルトの名無しさん:2008/07/06(日) 22:07:34
>>905
open FILE,'<',$file; を、

open FILE,'<',encode("cp932"',$file); に書き換えるコストと
open FILE,'<',filename{cp932} に書き換えるコストと

どっちも大してかわらない気がする。
どうせエディタで置換するわけだし。
909デフォルトの名無しさん:2008/07/06(日) 22:09:10
>>906
まだ言ってるよ、コイツ。

このスレを100回読め。
  ↓
http://pc11.2ch.net/test/read.cgi/tech/1177930957/
910デフォルトの名無しさん:2008/07/06(日) 22:10:19
use utf8;

これは、utf8 でコーエィングされてる、という意味。
use ユニコード・・・ではないんだよ。
911デフォルトの名無しさん:2008/07/06(日) 22:11:16
use utf8;

これは、utf8 でコーディングされてる、という意味。
文字列の内部表現も utf8 ってこと。
use ユニコード・・・ではないんだよ。
912デフォルトの名無しさん:2008/07/06(日) 22:24:38
>>909
間違ってるのはお前だって
913デフォルトの名無しさん:2008/07/06(日) 22:27:05
>>909
文字列の内部表現はUTF8なのに、
OSの機能を呼び出すときにUTF16じゃなくてANSIに変換してるのが問題なの。

そのスレを出すのは意味不明。
914デフォルトの名無しさん:2008/07/06(日) 22:36:18
ほうほうほうw
それじゃぁお尋ねしますがねぇw
>全部W系のAPIを呼ぶようにしろ
これで解決するんですかい?
「W系のAPI」 とやらに utf8 文字を渡すつもりwww
915デフォルトの名無しさん:2008/07/06(日) 22:40:17
この問題を解決するには、
utf8 文字を UTF-16LE に変換して 「W系のAPI」 に渡す
utf8 文字を ANSI(CP932) に 変換して 「A系のAPI」 に渡す
いずれにしても、変換が必要。

>>906 が utf8 と ユニコードの違いがわかっていない証拠
916デフォルトの名無しさん:2008/07/06(日) 23:20:24
……何を言っても無駄か
917905:2008/07/06(日) 23:40:01
>>908
> どっちも大してかわらない気がする。
同感ですがご意見を振り切って暴走の結果 MultiEncodingHash.pm ができました。

package MultiEncodingHash;

use strict;
use warnings;
use utf8;
use Carp;
use Encode;

use Tie::Hash;
our @ISA = 'Tie::StdHash';

sub FETCH {
my ($self, $enc) = @_;
return $self->{org} if $enc eq 'org';
return encode( $enc, $self->{org} );
}

1;
918デフォルトの名無しさん:2008/07/06(日) 23:59:47
>>914
UTF-8⇔UTF-16の変換は単純な演算でできるんだから、
そうやって渡すよう実装するに決まってるだろう。
UTF-8 Cygwinと同じことをするわけだな。
そんなこと考えるまでもないだろうに、
わざわざ説明しないとわからないくらい馬鹿なのか?
919デフォルトの名無しさん:2008/07/07(月) 00:22:48
>>918
おめえutf8 cygwin使ってねえだろ。
920デフォルトの名無しさん:2008/07/07(月) 00:25:06
>>916
そういうことですね。

あなたに言えることの中には、有効なものは一つも無いわけです。
まさに無駄です。
921デフォルトの名無しさん:2008/07/07(月) 00:38:16
trってなんの略?
gがグローバルってのは参考書に書いてあった。
でもsは載ってない。
922デフォルトの名無しさん:2008/07/07(月) 00:41:39
>>919
?
ttp://www.okisoft.co.jp/esc/utf8-cygwin/implementation.html#layer
変換してるようですが?
# 自前で変換してると思ってたのは誤解だったけど。
# WindowsAPIで変換してたのね……。
923デフォルトの名無しさん:2008/07/07(月) 00:42:58
>>921
tr/// => transliteration
s/// => substitution
924デフォルトの名無しさん:2008/07/07(月) 00:46:30
Perl の内部表現は UTF-8 と一致しているわけではないので
どちらにしろ utf8 flagged な文字列をそのまま外には出せません。
925デフォルトの名無しさん:2008/07/07(月) 01:16:04
>>923
translation
926デフォルトの名無しさん:2008/07/07(月) 01:19:26
>>923,925
サンキュー
どこかのWEBに載ってるの?
927デフォルトの名無しさん:2008/07/07(月) 01:21:39
質問

perlの予約語とかを
色分けして表示するエディターで
windows向けので一番いいのを教えて。
無料のやつで。
928デフォルトの名無しさん:2008/07/07(月) 01:22:55
>>927
emacs
929デフォルトの名無しさん:2008/07/07(月) 01:24:24
>>927
探せばいくつでも見つかるので片っ端から試して一番いいやつを教えてください。
930デフォルトの名無しさん:2008/07/07(月) 01:30:39
  ↑
言葉遣いはやさしいが、言ってることは 「ググレカス」 と同じ。
931デフォルトの名無しさん:2008/07/07(月) 03:16:06
>>926
> サンキュー
> どこかのWEBに載ってるの?

添付マニュアルに書いてあるから、どこかのWebにも確実に載っている。
932デフォルトの名無しさん:2008/07/07(月) 07:46:46
>>930
一番優れた回答だよね。
933デフォルトの名無しさん:2008/07/07(月) 14:17:15
馬鹿であることの証明にほかならない。
そしておれも馬鹿。
934デフォルトの名無しさん:2008/07/07(月) 14:30:28
馬鹿の考える証明なんて証明でもなんでもない。
935デフォルトの名無しさん:2008/07/07(月) 19:06:59
ランキングサイトとかってないの?
それこそperlで実装しろや、って感じだけど。
936デフォルトの名無しさん:2008/07/07(月) 19:26:09
>>935
任せた。
937デフォルトの名無しさん:2008/07/07(月) 19:37:49
>>935
がんばって!!
938デフォルトの名無しさん:2008/07/07(月) 20:28:08
>>935
くじけないで!!
939デフォルトの名無しさん:2008/07/07(月) 23:02:33
>>907
入出力にutf8が一切絡まないなら、ソースもsjisで書いたら? dirtyかもしれないけど何も苦労しないよ。
処理内容によっては別の苦労があるにせよ、オレなら迷わずそうする。文字列内の2バイト目が\x5cの文字に注意。
940デフォルトの名無しさん:2008/07/07(月) 23:41:07
  ↑
コイツ最高にアフォ!

いったい何のために、せっせと苦労して utf8 してるのか全く理解しとらんな。

>別の苦労があるにせよ、オレなら迷わずそうする。文字列内の2バイト目が\x5cの文字に注意。

その、「別の苦労」 があるから utf8 するんじゃないかよ。
「2バイト目が\x5c」 だから utf8 するんじゃないかよ!
話が堂々めぐりになるだろ。
941デフォルトの名無しさん:2008/07/07(月) 23:43:53
utf8するってどんな動詞だよ。
942デフォルトの名無しさん:2008/07/07(月) 23:46:57
>>941
空気嫁
943デフォルトの名無しさん:2008/07/07(月) 23:56:39
utf8, vi. (utf8s; utf8ed; utf8ing; utf8ed).
944デフォルトの名無しさん:2008/07/08(火) 00:03:19
>>941
ブライト艦長の「スタンバッておけ」と同じ用法だ
945デフォルトの名無しさん:2008/07/08(火) 00:05:08
考えてみりゃ「ググる」も同じだよな

「こないだヤフーでググったらさぁ」 ← 微妙に違うw
946デフォルトの名無しさん:2008/07/08(火) 00:13:18
英語圏でも"Google it."っていうからな。
名詞の動詞化はよくあること。なし崩しに「通じないほうが馬鹿」って流れになっていく。
947デフォルトの名無しさん:2008/07/08(火) 00:17:05
それでもutf8するはないわ
948デフォルトの名無しさん:2008/07/08(火) 00:55:05
別の苦労があるにせよ、オレなら迷わずググル。
949デフォルトの名無しさん:2008/07/08(火) 05:16:44
「表」とか?
ちなみに2ちゃんねるは
文字コードはどういう実装にしてるの?
950デフォルトの名無しさん:2008/07/08(火) 06:06:55
質問です。
WWW::Mechanize を用いてフォームに入力するプログラムを作っています。
プルダウンに値を入力するのですが、その前に入力する値のリストを取得したいのです。つまり

<SELECT name="hoge">
<OPTION VALUE="AAA">BBB
<OPTION VALUE="CCC">DDD
<OPTION VALUE="CCC">FFF
<OPTION VALUE="EEE">HHH
<OPTION SELECTED VALUE="III">JJJ
</SELECT>

となっているソースから値のリストを取り出したいのです。
直接ソースから自作のプログラムを書いて抜き出してもいいのですが、そういったモジュールがあればそれも含めて教えていただけないでしょうか。
951デフォルトの名無しさん:2008/07/08(火) 09:07:19
>>950
$input->possible_values();
$input->value_names();

つ http://search.cpan.org/~gaas/libwww-perl-5.813/lib/HTML/Form.pm
952950:2008/07/08(火) 09:42:35
>>951
まさに期待通りの答えでした。
どうもありがとうございました。
953867:2008/07/08(火) 16:32:30
>>868,869

レスありがとうございます。
954デフォルトの名無しさん:2008/07/08(火) 18:46:24
以外の2つについて日本語でわかりやすく説明したいのですが、どう説明したらいいでしょうか?

$esc_0208 = shift || $esc_0208;

$_[$[] =~ /($re_jis0208)/o && ($esc_0208 = $1)

955デフォルトの名無しさん:2008/07/08(火) 18:49:40
>>954
コードの意味は分かってるが日本語で説明する方法が分からないのか、
それともコードの意味すら分からないのかどっちなんだ。
956デフォルトの名無しさん:2008/07/08(火) 18:55:39
上は||は分かるのですが、この場合どう解釈すればいいかがわかりません
下はコードの意味がわかりません
957デフォルトの名無しさん:2008/07/08(火) 19:00:27
jcode.plの一部ですね。

とりあえず自分なりに書けば誰か添削してくれるんじゃない?
でもいちいち説明がいるほど難しいコードだろうか
958デフォルトの名無しさん:2008/07/08(火) 19:05:20
>>956
演算子の意味が分からないならperlop嫁。
下は、perlvar嫁
959デフォルトの名無しさん:2008/07/08(火) 19:08:56
上は$esc_ascがshiftならshiftを、shiftじゃなければ$esc_ascを返す でいいんですか?
960デフォルトの名無しさん:2008/07/08(火) 19:10:54
>>959
そんなわけがないだろ。
演算子の優先順位考えろよ
$esc_0208 = (shift || $esc_0208);
961デフォルトの名無しさん:2008/07/08(火) 19:29:40
shiftが真ならshift、shiftが偽なら$esc_0280を返すでいいでしょうか?
962デフォルトの名無しさん:2008/07/08(火) 19:56:33
>>961
マルチも大概にしとけ。
http://okwave.jp/qa4156647.html

まあほしい答えがもらえたみたいだからもう出てこないだろうけど。
963 ◆TWARamEjuA :2008/07/08(火) 21:13:21 BE:7841298-2BP(7089)
(´-`).。oO(マルチと言うよりも、or脳っていうのかなぁ。。。)
964デフォルトの名無しさん:2008/07/08(火) 22:44:23
マルチといったら「はわわ」と返さないお前らに絶望した
965デフォルトの名無しさん:2008/07/08(火) 22:55:33
なにそれ?
966デフォルトの名無しさん:2008/07/08(火) 23:28:56
perlで彼女が出来るプログラムとかって書けますでしょうか?
967デフォルトの名無しさん:2008/07/09(水) 00:22:25
シフトJIS環境に固有の問題とPerlのi18nの問題をわけて議論しろよ
968デフォルトの名無しさん:2008/07/09(水) 00:38:42
もうその話はおわったよ…
969デフォルトの名無しさん:2008/07/09(水) 00:40:25
use 彼女;
970デフォルトの名無しさん:2008/07/09(水) 00:54:32
syntax error.
971デフォルトの名無しさん:2008/07/09(水) 00:55:00
>>969
Can't locate 彼女.pm in @INC....
972デフォルトの名無しさん:2008/07/09(水) 01:15:39
参考書読んでたら、なんかDBMってのがあって、
ビルトインのデーターベースみたいで、
もしかしてこれ使えば
mysqlとか入れなくていいの?
973デフォルトの名無しさん:2008/07/09(水) 01:32:29
>>972
連想リスト/ハッシュを永続化する程度の機能しかないし、よく壊れるし。
まあ、DBMで済むことをmysqlとか使っててバカだなと思うことはあるが。
974デフォルトの名無しさん:2008/07/09(水) 03:37:47
そこでSQLiteですよ
と思っていた時期が私にもありました
975デフォルトの名無しさん:2008/07/09(水) 03:46:17
まあ、ある要求があって、
DBMで済むことなのか、
mysql入れないとだめなのか、
それを判断できるのはプロに
頼まないとだめなんじゃない?
976デフォルトの名無しさん:2008/07/09(水) 04:05:45
まあ、もともとDBMは、1000行のファイルを線形探索するのは
重すぎて論外だったので存在するようなもんだからな。
20年以上前に。
977デフォルトの名無しさん:2008/07/09(水) 09:15:56
その判断できるプロってのがなかなかいないんだよね〜
978デフォルトの名無しさん:2008/07/09(水) 09:25:07
連想リストって何?
979デフォルトの名無しさん:2008/07/09(水) 11:05:30
次スレ立てますね。 >>891 もテンプレ追加で。
980デフォルトの名無しさん:2008/07/09(水) 11:12:05
よろしく。

>>233の普通の文字操作も入れておいたほうが良いんじゃないかな。

# 次に、あなたが実行したい処理の内容を入れて下さい。
print "SJISには、「十表貼申予暴」のようなダメ文字がある。\n";
981デフォルトの名無しさん:2008/07/09(水) 11:20:27
立てました。

Perlについての質問箱 36箱目
http://pc11.2ch.net/test/read.cgi/tech/1215569470/l50

>>980
ああ、そうですね。
もう立てちゃったんで、次からということで。
982デフォルトの名無しさん:2008/07/09(水) 15:17:09
use utf8;
use open IO => ":encoding(cp932)";
binmode STDIN => ":encoding(cp932)";
binmode STDOUT => ":encoding(cp932)";
binmode STDERR => ":encoding(cp932)"; # ※1
use Encode;

これは余計な混乱や誤解生むだけだから入れないほうがいいと思うよ
983デフォルトの名無しさん:2008/07/09(水) 18:37:39
>>982
「余計な混乱や誤解」って具体的に何?
984デフォルトの名無しさん:2008/07/09(水) 23:14:47
>>983
おまい perl 使ったこと無いのか?
985デフォルトの名無しさん:2008/07/10(木) 00:09:37
pearlなら少々
986デフォルトの名無しさん:2008/07/10(木) 00:26:09
>>985
ドラマー乙。
987デフォルトの名無しさん:2008/07/10(木) 17:59:10
> マルチも大概にしとけ。

なにか問題あるの?
988デフォルトの名無しさん:2008/07/10(木) 20:15:45
ある。
989デフォルトの名無しさん:2008/07/10(木) 21:53:49
マルチの何が問題なの?
990デフォルトの名無しさん:2008/07/10(木) 22:06:58
なんで問題ないと思うの?
991デフォルトの名無しさん:2008/07/10(木) 22:21:16
マルチを良しとするやつは、解答者を使い捨てにして構わないと思っている異常者
992デフォルトの名無しさん:2008/07/10(木) 23:13:16
>>990
それ、いわゆる 「悪魔の証明」 ってヤツだね。
993デフォルトの名無しさん:2008/07/11(金) 00:20:54
>>992
「問題あるだろ、常識で考えて」ってレスが付くもんに
「悪魔の証明だね」なんて言ったら鼻で笑われるぞ。
994デフォルトの名無しさん:2008/07/11(金) 01:35:02
じゃぁ話を整理すると、

  設問: マルチの何が問題なの?
  回答: 問題あるだろ、常識で考え

って事だな。ぜんぜん回答になっていない。
「常識」 で済むなら警察いらん。裁判いらん。
これ、中世の魔女裁判でよく使われたやりくちじゃないか!

じゃぁ、こんなのはどうだ?
  設問: 光速に近いスピードで移動する物体は、なぜ時間が遅れるのか?証明せよ
  回答: ふつう、そうだろ、常識で考え
おれって天才?
995デフォルトの名無しさん:2008/07/11(金) 01:35:46
て抜きですまん
996デフォルトの名無しさん:2008/07/11(金) 01:36:27
ネチケット(笑)ってやつでしょ?
997デフォルトの名無しさん:2008/07/11(金) 02:05:32
よくいるんだよ。自分の無知棚に上げて>>994みたいに屁理屈コネ出す奴
998デフォルトの名無しさん:2008/07/11(金) 02:06:47
ほっとけ、天動説がどうとか言いだすからw
999デフォルトの名無しさん:2008/07/11(金) 02:15:12
それでも地球は回ってる
1000デフォルトの名無しさん:2008/07/11(金) 02:32:34
常識で考えて問題ないなら、問題ないなんていわんだろ、常識で考えて。
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。