トップページphp
981コメント337KB

くだすれPerl(超初心者用)3

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん2009/03/31(火) 22:20:27ID:???
このスレッドは、他のスレッドでは書き込めない超低レベル、
もしくは質問者自身何が何だが分からない質問を勇気を持って書き込むスレッドです。
Perl使いが優しくコメントを返しますが、
お礼はPerlの布教と初心者の救済をお願いします。

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

関連スレ
Perlについての質問箱 39箱目
http://pc12.2ch.net/test/read.cgi/tech/1234181856/
Perlコーディング初心者質問スレ Part 59
http://pc11.2ch.net/test/read.cgi/php/1234752149/
【Perl上級者コーナーPart01】
http://pc11.2ch.net/test/read.cgi/php/1024741312/
0722nobodyさん2010/03/07(日) 16:23:25ID:???
すんません。ビープ音を止められないんです。><
添削してやってください。

use strict;
use warnings;
open (INFILE, $ARGV[0]) or die "file open error: $!";
binmode INFILE;
while( <INFILE> ){
chomp;
print "$_\n";
}
close INFILE;
07237222010/03/07(日) 16:51:32ID:???
すみません。binmodeでchomp使ったからですね。
0724nobodyさん2010/03/08(月) 00:24:49ID:???
テキストファイルを一行ずつ読み込むサンプルに手を加えたいのですが…

AAA
BBB
CCC

↑こんなファイルを読み込んで、以下のように出力したいのです

XXXAAA
XXXBBB
XXXCCC

単純に、whileなりforeachなりループの中のprintの部分を以下のような感じに変更するだけで良いかと思ったのですが、

print "XXX".$_;

しかし結果は以下のようになってしまいます

XXXAAA
BBB
CCC

これは何が原因でしょうか?
0725nobodyさん2010/03/08(月) 01:14:56ID:???
コードを全部見せてくれないとちょっとわかんない
0726nobodyさん2010/03/08(月) 01:33:22ID:???
>>724
$_に全行入っちゃってるだけじゃないでしょうか。
ループのところ、特にファイルハンドルから取得してるところのコード書いてみてください。
07277242010/03/08(月) 01:47:54ID:???
>>726
分かりました

#----
open FH, "< (ファイル名)";
my @list = <FH>;
foreach(@list){
chomp;
print "XXX".$_;
}
close(FH);
#----

主要部分はこんな感じです
ループ部分を、一行読み込み→出力→次の行へ…というイメージでとらえていたのですが…
0728nobodyさん2010/03/08(月) 01:59:03ID:???
>>727
コードそのものには特に問題はありません。(closeの位置とか気にはなりますが)
読み込ませてるファイルの改行コードは何ですか?
0729nobodyさん2010/03/08(月) 02:03:49ID:???
このコードの通りだったら
XXXAAAXXXBBBXXXCCC にならんか?
0730nobodyさん2010/03/08(月) 02:11:49ID:???
なりますね。
ただ、現象としては>>724のようなので$list[0]にしかfetchされてないようです。
07317242010/03/08(月) 02:52:04ID:???
あれから色々試してみました
実は、>>727の前には色々と前処理が入っていました

そこで試しに、>>727の部分だけを抜き出して別ファイルで保存し実行した所
期待通りの動作(全ての行にXXXが追加される)をしてくれました

原因はこの前段階にありそうですので、もうしばらくこちらで調べてみます
ありがとうございました
0732nobodyさん2010/03/08(月) 02:55:51ID:???
だから全コードさらせと言ったのに
0733nobodyさん2010/03/08(月) 16:09:12ID:???
後出しじゃんけんの典型を見た気がする。
0734nobodyさん2010/03/09(火) 00:17:57ID:???
前処理でどうやれば>>724になるんだかわからん
0735nobodyさん2010/03/09(火) 00:36:00ID:???
$/ = "";
0736nobodyさん2010/03/09(火) 11:48:41ID:???
すみません、教えてください。
PerlでSOAP通信でデータを相手サーバーに送った後、
その処理結果をSOAP通信でこちらのサーバー(エンドポイントURL)に投げてくれる
サービスを使おうとしているのですが、送信は下記ページで紹介されているものを
応用してできると思うのですが、どうやって処理結果を受け取るのかがまったくわかりません。

ちなみに、WSDLは公開されていて、受け取りたいmethod名、key名はわかっている状況です。
参考文献、サンプルソースなど頂ければとても助かります。
よろしくお願いいたします。

(送信サンプルにしたものです↓)
ttp://www.thinkit.co.jp/cert/article/0609/8/3/2.htm
0737nobodyさん2010/03/09(火) 12:56:45ID:???
SOAPと聞いて

オラなんだかワクワクしてきたっゾ
07387362010/03/09(火) 16:28:23ID:???
その後、google先生になんとかサンプルソースをもらい、WinXP+ActivePerlの環境で
下記のコードをコマンドプロンプトから試してみましたが、
なにも出力されません。。エラーすら吐かれません。。SOAP::Liteはインスト済みです。
添削お願いできますでしょうか。。
--------------server.cgi
#!/usr/bin/perl

use strict;
use SOAP::Transport::HTTP;

SOAP::Transport::HTTP::CGI
->dispatch_to('Call')
->handle;

package Call;
sub testMes($$){return join(', ', @_);}
--------------
--------------client.cgi
#!/usr/bin/perl

use strict;
use SOAP::Lite;

print SOAP::Lite
->uri("http://localhost/Call")
->proxy("http://localhost/server.cgi")
->testMes('TEST')
->result;
--------------
0739nobodyさん2010/03/09(火) 16:57:24ID:???
/usr/bin/perlの意味解ってるよな?
07407362010/03/09(火) 17:04:30ID:???
>>739
はい、Perlを実行するプログラムを指定しているパスです。
0741nobodyさん2010/03/09(火) 21:03:56ID:???
ActivePerlだよね…
07427362010/03/09(火) 21:21:32ID:???
入れなくてもいいのはわかっているのですが、おまじない的に入れてます。
server.cgi,client.cgiどちらも消してみましたが同じでした。。
0743nobodyさん2010/03/09(火) 21:28:59ID:???
そういうことじゃないと思うが
0744nobodyさん2010/03/09(火) 22:18:43ID:???
だが、どういうことなのかは言えないという不思議な状態なんだよねw
0745nobodyさん2010/03/10(水) 01:27:55ID:???
CGI実行されてないだろカスってことだろ
0746nobodyさん2010/03/11(木) 12:44:28ID:???
httpd何使ってるかわからんが、.cgiに実行権限与えてないとかじゃねーの

それとWindowsならshebangは関係ないよ
0747nobodyさん2010/03/11(木) 17:34:09ID:???
お尋ねします
スペック:OSはXPのホームエディションsp3
でActivePerl 5.8.0 Build 806 Windows MSI 11.5MB を落とせるサイトを探してます
自分で探しているのですが見つからず・・・
もうないのでしょうか・・・
0748nobodyさん2010/03/11(木) 18:26:22ID:???
ttp://141.20.126.79/~mh/software/perl/

ググれ
0749nobodyさん2010/03/11(木) 20:17:58ID:???
>>748
ありがとうございます

またまた質問で申し訳ないです
インストールしてpc再起動後コマンドプロプトでC:\Documents and Setting\○▽■>perl-vを入力したのですが、
『perl-vは内部コマンドまたは外部コマンド、操作可能なプログラムまたはバッチ ファイルと
して認識されていません。』と出ます。
何が原因として考えられるのでしょう?
0750nobodyさん2010/03/11(木) 20:25:56ID:???
>>749
perl と-vはくっつけちゃいかんだろ
半角スペース入れんと
0751nobodyさん2010/03/12(金) 13:11:45ID:???
>>750
ありがとうございます
動作確認できました
0752nobodyさん2010/03/12(金) 13:17:35ID:???
MySQLでUTF8で保存したいのですが、なかなかうまく出来ません。
ソース
$que=$db->prepare(<<"EOF");
insert into chara values(NULL,"$name",$sex,$age,$color,$icon,$rank,$tatiba,"$mail","$uri","あいうえお")
今は"あいうえお"実際はフォームからうけとった"$prof" それでselect文で表示させたら、 ?????†???? と文字化け
SQL側の設定もclient mysqldの文字セットはutf-8、GUI版のSQLクライアントから日本語を入れたらちゃんと表示されるんですが。
フォームからやっても、perlから直接"あいうえお"とやっても文字化けしてしまいます。
解決策を教えてください。

フォームの場合
add.cgi?prof=あいうえお
直接の場合は
"あいうえお"

0753nobodyさん2010/03/12(金) 14:05:24ID:???
自己解決しました
$dbh->do("SET NAMES utf8");
が必要だったみたいです。
0754nobodyさん2010/03/12(金) 23:26:14ID:???
いやそれは解決方法じゃない
0755nobodyさん2010/03/12(金) 23:54:33ID:???
とりあえずここ読めば解決するかも。
http://d.hatena.ne.jp/a666666/20090826/1251270979
0756nobodyさん2010/03/13(土) 07:29:42ID:???
最近の DBD::mysql なら mysql_enable_utf8 => 1 を指定するだけでフラグドutf8でやりとりできるわな
>>752はutf8フラグとかわかってなさそうだけど
0757nobodyさん2010/03/13(土) 16:02:02ID:???
配列の参照の事でお聞きしたい事があります。
#!/usr/bin/perl
@data=(
["array","code"],
["point","test"]
);
print "$data[0][0]\n";
print "$data[0][1]\n";
この場合array codeと出力されますが、コード1行でarray codeと出力する事は出来ないのでしょうか?
C言語みたいに$data[0]でarray codeが出力されるかと思ったらうまくいきませんでした。
どなたか教えてください。
0758nobodyさん2010/03/13(土) 17:32:00ID:???
print "$data[0][0] $data[0][1]¥n";
一行だよ
えっ、違う?
0759nobodyさん2010/03/13(土) 17:51:31ID:???
print "@{$data[0]}\n";
0760nobodyさん2010/03/13(土) 17:55:05ID:???
print @{$data[0]}, "\n";

これのこと?
07617602010/03/13(土) 17:56:01ID:???
リロードしてなかった
0762nobodyさん2010/03/13(土) 18:54:32ID:???
回答ありがとうございます。
print "@{$data[0]}\n";
これでできたとは、文法が複雑ですね。
perlは覚える事がおおすぎる。
0763nobodyさん2010/03/13(土) 19:53:49ID:???
いや配列入れ子にしてるだけだろ
0764nobodyさん2010/03/13(土) 19:59:10ID:???
@{ $array_ref } は配列リファレンスを配列にデリファレンスすること
"@array" は配列を $" の中身(デフォルトは半角スペース)で区切られた文字列に展開すること
これがわかってりゃなんてことない話なんだけどな
0765nobodyさん2010/03/14(日) 09:26:53ID:???
リファレンスとそうでないものが存在するのが厄介なのだ
いっそ全てリファレンスだったらと思うことがある
0766nobodyさん2010/03/18(木) 21:32:34ID:???
ユーザ名がマルチバイト文字(日本語)なのが原因でPPMが起動出来ず困っています
環境はWindows7、ActivePerl最新版です
一時的にユーザ名をAdminなどに変更してみたのですがUsers直下のユーザ名フォルダは変更されませんでした
何か良い対策はありますでしょうか?
0767nobodyさん2010/03/18(木) 21:42:36ID:???
自分もそれで引っかかったときあったw

Admin でログインして、権限の強い perl っていうユーザーを作ります。

で、ppm のショートカットの設定にあると思うんだけど、指定したユーザーで
実行するようにする。

こうすれば PPM 実行できる。


ハズ
07687662010/03/18(木) 21:50:39ID:???
>>767
ありがとうございます
まずは試してみます
07697662010/03/18(木) 22:13:32ID:???
続報です
あれからさらに検索した所、以下のような情報を見つけ、且つ成功したので報告します

ttp://blog.mukairiku.net/.m/2008/01/activeperl-%E3%81%AE-ppm-%E3%81%8C%E8%B5%B7%E5%8B%95%E3%81%97%E3%81%AA%E3%81%84%E3%81%AE%E3%81%A7%E3%81%99.html

PPMを叩く前に、環境変数ACTIVEPERL_PPM_HOMEをPPMフォルダパスにSETしてやる事で起動しました
0770nobodyさん2010/03/20(土) 14:30:28ID:???
初歩的な事ですが、何故ライブラリではなく、モジュールが主流なのでしょうか?
何故わざわざjcode.plをjcode.pmに作り直すのか教えてください
0771nobodyさん2010/03/20(土) 15:18:45ID:???
cpanなりppmで管理できるから。
後者についてはJcode.pmの実体について調べればすぐわかる。
0772nobodyさん2010/03/20(土) 15:55:08ID:???
Encode.pm使えよ
0773nobodyさん2010/03/20(土) 16:07:23ID:???
質問が伝わってないなw
0774nobodyさん2010/03/20(土) 18:01:10ID:???
何でもモジュールにするのがperlの中でのステイタスなのだろうか。
無駄にがんばってる気がするけどしょうがない。
0775nobodyさん2010/03/20(土) 18:32:43ID:???
なんでもjarにするJava
なんでもeggにするPython
なんか問題あるのか
0776nobodyさん2010/03/20(土) 19:10:35ID:???
jarまずそう
eggおいしい
pm食えない
0777nobodyさん2010/03/20(土) 22:25:30ID:/W705D6D
>>770

「オブジェクト指向だと使いやすいから。」と考える人は作り直す
と思います。でもその反対にわざわざオブジェクト指向を導入する
必要がないと考える人もいるでしょう。だから jacode.pl が作られ
たのだと思います。
0778nobodyさん2010/03/21(日) 00:13:01ID:???
Encode.pmの恩恵を受ければわかる
0779nobodyさん2010/03/21(日) 02:16:04ID:???
jcode.plのころなんてPerlでOOの概念なんて無かっただろ
0780nobodyさん2010/03/24(水) 01:03:23ID:N7x4Tlpb
MIME::Parser 以外でメールの解析して添付ファイルを一発で保存できるモジュールってご存知ありませんか?
0781nobodyさん2010/03/24(水) 01:31:29ID:???
MIME::Parserが何でダメなん?
0782nobodyさん2010/03/24(水) 02:07:39ID:???
>>781
Perl5.8.8なのにMIME::Parserが入ってないレン鯖に手動コピーでは無理だったのと、
他のレン鯖ではJParserがうまく動かず、執着するのもなんなのでいっそのこと他にあればなぁと思いまして。

さきほどEmail::MIME::Attachment::Stripperを見つけて試していますが、タコなのでいいサンプルがないと使いこなせない^^;
0783nobody2010/03/25(木) 00:21:12ID:???
>>778

被害範囲はEncode内にとどまらずperlそのものが使いにくくなった。
perlはCGIで爆発的に普及したものの、WWWに対応しようと試みて
ユニコード化し、残念ながら失敗した。

もしEncodeがなかったらPHPもRubyも必要なかったのに。
0784nobodyさん2010/03/25(木) 00:29:49ID:???
はい?
0785nobodyさん2010/03/25(木) 01:06:49ID:bcbloiJg
Encodeがあるからわかりやすいけどなぁ。
まだ問題があるにしても、入りと出で変換しましょうってポリシーはわかりやすいと思う。
0786nobodyさん2010/03/26(金) 17:33:17ID:Tt84M8Ng
テキストボックスに入力された絵文字をutf8からsjisに上手く変換すること
ができません。

use Encode qw/ from_to /;
from_to($str, "utf8", "sjis");

で変換しようとしているのですが、太陽の絵文字を使うと16進でee98be→3f
となってしまいます。f89fに変換するにはどうしたらよいのでしょうか?
よろしくお願いします。
0787nobodyさん2010/03/26(金) 18:00:24ID:???
絵文字はメーカーが勝手に割り当ててるから文字コード変換できないでしょ
変換テーブル用意するとかしないと
0788nobodyさん2010/03/26(金) 18:01:01ID:???
テーブル用意すれば?
0789nobodyさん2010/03/28(日) 01:54:04ID:???
>>785 「入りと出で変換しましょうってポリシー」

そのポリシーが本当に分かりやすいのなら Unicode は生まれなかっ
たはず。

すでにあった ISO 2022 はそういった考えで世界中の文字を同時に
扱うことを考えていたのだけれど、現実は理想通りにはならなかっ
た。オクテット列が今、何の符号化なのか状態をもつようになるの
で検索や置換がとてもやりずらくて使い物にならない。

そこでエスケープシーケンスのないコードとして Unicode が開発
されたのでござる。

でも Encode は "フラグ" を再発明してしまって、同じ失敗を繰り
返してしまった。

これはきっとバベルの呪いだと思う。

0790nobodyさん2010/03/28(日) 03:13:58ID:???
めんどくせーから全世界の文字列を 64bit で割り当てちゃえよ

00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000


先頭の 1bit が右から読むのか左から読むのか
2 〜 16 bit が言語コード
残りが文字コード

ほら簡単
0791nobodyさん2010/03/28(日) 08:35:53ID:???
>>789
いいから取り込んだら全部UTF8にしてフラグ建てて、出すとき好きなもんに変換しなされ。それだけだ。
0792nobodyさん2010/03/28(日) 08:56:47ID:???
自分で全部書くんなら別になんの問題もないけど、モジュールによってはフラグのあるなしで挙動が変わるのも多いし、どっちで渡すべきなのかPODに書いてなかったりするから困る。
0793nobodyさん2010/03/28(日) 11:17:51ID:Rvgpa/pp
>>792
>モジュールによってはフラグのあるなしで挙動が変わるのも多いし、どっちで渡すべきなのかPODに書いてなかったりするから困る。
あぁ、これは確かにそうだね
POD内でまずutf8とか検索したりする
0794nobodyさん2010/03/28(日) 20:17:39ID:???
『王様は裸だ』って言うのは、コメディアンの役割なんでしょうね
0795nobodyさん2010/04/01(木) 11:06:29ID:???
>>791
Perlのバージョンによっては無理ぽ
0796nobodyさん2010/04/01(木) 19:06:37ID:???
今時Perlのバージョンで困るのなんてWebArena使ってる奴くらいだろ
0797nobodyさん2010/04/02(金) 10:24:03ID:???
5.6なところって意外とあったりするんだよな
kawaisosu
ttp://www.value-domain.com/xreaip.php
0798nobodyさん2010/04/02(金) 11:31:49ID:???
そこはすげー昔から借りてる人がそのままってだけ
新規に借りて5.6なんてのは某大手のあそこくらいだな
0799nobodyさん2010/04/02(金) 11:41:29ID:???
>>796
ネット上のPerlの解説サイトって未だに結構多かったりする。
そういうサイトで独学している人ってそれなりの数がいると思うのね。
本気だして新刊を買わずにブックオフとかで入門書の古本を購入して独学する人もいるのではないかなと。
そういう目でネット上の解説サイトを眺めると2003年くらいの情報が意外に多かったりする。言わば最新バージョンに合わせて更新をしていないわけ。
今も昔も解説書に共通しているのはPerl ScriptやCGIを自作したらサーバーの負荷が多くならないように自前のサーバを立てて練習しようよねとも書かれてる。

Windowsに限って言えばダウンロードするPerlは5.6や5.8、中には5.10もあったりする。でも書籍は古いまま。
意外にバージョンの確認を怠った結果、動かないってことがあるのでは?と思った。
0800nobodyさん2010/04/02(金) 11:49:30ID:???
顧客情報漏れ祭り
http://anchorage.2ch.net/test/read.cgi/gamenews/1270138389/
0801nobodyさん2010/04/02(金) 13:09:21ID:???
>>799
他の言語でもよくある話だけど、そういうサイトを参考にするなって話だよね
情報が溢れちゃってて探しにくいってのがperlの良くないところということか
0802nobodyさん2010/04/02(金) 13:18:05ID:???
>>801
参考にしてはいけないサイトをGoogleさんに教えてあげてくださいw

マルチポストではないと思うのだけど、
"Perlを勉強しているのですが正規表現についてよくわからないので教えてください。"
でググると情報が溢れていて且つ重複しているのが目につくよね。
0803nobodyさん2010/04/02(金) 13:27:48ID:???
それokwaveと提携してるとこ(gooとmsnとexciteとimpressと...)が引っかかってるだけ
まぁ重複してるといえばそうだけど、マルチポストではないはずだよ
0804nobodyさん2010/04/02(金) 14:04:15ID:???
宣伝収入目的で異なるサイトで重複コンテンツのオンパレード。
検索エンジンの中の人も大変そう。

ところでダンプリストからキーワードAとキーワードBの区間を抽出して
元に戻すのは次のどちらがより良いんでしょう。
$_=~ s/([a-fA-F0-9]{2})/pack("C", hex($1))/ego;
$_=~ s/([a-fA-F0-9]{2})/chr(hex $1)/eg;
0805nobodyさん2010/04/02(金) 16:17:20ID:???
質問です
ファイル名にそのファイルが作成された日時(YYYYMMDDhhmmss.拡張子)が含まれているファイルがあります
ファイル名のフォーマットはそれで全て統一されています
一つディレクトリにそんなファイルが数百〜数千は存在しています

何年何月何日にいくつのファイルが作られたのかをCSVなりTSVなりで一覧化して出力したいです
例:YYYYMMDD,n(その日作られたファイルの総数)

このような処理で、何か一般的なアプローチの仕方はありますでしょうか?
キーワードだけでも何でも良いのでご教示をお願いします
0806nobodyさん2010/04/02(金) 16:24:00ID:???
ファイル名から年月日を取り出して連想配列のキーにして
$list{'2010-04-02'}++;
みたいにカウントしていけばいいのでは
0807nobodyさん2010/04/06(火) 21:47:39ID:???
質問なのですが
perlでNet::Ping;を使いping監視をしてるのですが
ping(ホスト先, タイムアウト数)でping送信させてるのですがこれにpingサイズを指定して送るにはどうすればよいのでしょうか?
0808nobodyさん2010/04/09(金) 23:18:29ID:???
パケットサイズのことなら、newするときの引数に$bytesってのがあるように見えるけど
0809nobodyさん2010/04/11(日) 02:01:29ID:???
他の言語を学ばずにPerlを学び始めたところなんですが
諸先輩方はPerlの各種変数をどのように体得したのですか?
0810nobodyさん2010/04/11(日) 02:25:58ID:???
これどうやるんだっけ→perldoc→くりかえし
0811nobodyさん2010/04/11(日) 13:08:05ID:???
これどうやるんだっけ→sex→くりかえし
0812nobodyさん2010/04/11(日) 15:56:17ID:???
俺はこんなこともできないなんて→入信→くりかえし
0813nobodyさん2010/04/11(日) 16:25:03ID:???
>>810
ふむふむ。やはりくりかえしですよね。
ところで、どのくらいの期間、
そして、何回くらい「これどうやるんだっけ→perldoc→繰り返し」を
やりつづけてなんとなくつかめてきましたか?
なんと申しますか、個人差もあるのでしょうが、自分の言葉で理解できるまで
どのくらいかかるものなのか知りたくなりました。
0814nobodyさん2010/04/11(日) 16:38:34ID:???
型のことなら概念を理解しさえすれば覚えるまでも無い
特殊変数なんて覚えるだけ時間の無駄
0815nobodyさん2010/04/11(日) 17:01:07ID:???
人間とは面白い生き物で、生まれてきてからこのかた家庭教師も含めて
他人に物事を教えたことのない奴ほど横道にそれたレスが格好いいと
思い込むようだ。
喩えれば>>811のようにやったこともない妄想をさもやってきたかのようにな。
0816nobodyさん2010/04/11(日) 17:01:53ID:???
> 概念を理解しさえすれば
0817nobodyさん2010/04/11(日) 17:50:30ID:???
初めてのPerl 第二版買って来た。
これから頑張って覚えるぞ。
0818nobodyさん2010/04/11(日) 17:55:01ID:???
第五版でなく第二版?
0819nobodyさん2010/04/11(日) 22:46:17ID:???
ごめん第五版。
一緒に初めてのJavaScript第二版買っていたから混同しちゃった。
0820nobodyさん2010/04/12(月) 01:11:54ID:???
>>809
釣りなのは分かっているが...

$ は $calar(Scalar)
@ は @rray(array)
% は key/value(%)

特殊変数は実際には何個かしか使わないのですぐ覚えられる。
0821nobodyさん2010/04/12(月) 02:20:48ID:u6Su4USy
どのようにもくそも、覚えなきゃ何も出来ないからねぇw
■ このスレッドは過去ログ倉庫に格納されています