くだすれ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/
0711nobodyさん
2010/02/22(月) 20:01:01ID:???遅くなって申し訳ないです。
参考になりました。とりあえずもうちょっとコンピュータの初歩的な知識を入れるところから始めます。
0712nobodyさん
2010/02/26(金) 13:28:32ID:???とりあえず動かしてみようとしたのですが、Undefined subroutineが返ってきました
ttp://www.stackasterisk.jp/tech/program/perl03_03.jsp
エラーメッセージは以下です
> Undefined subroutine &main::myCreateTextFunction called at test4.pl line 9.
おそらく「$attach_data = &myCreateTextFunction;」でサブルーチンが見つからないという事だと思いますが
ソースを追っても何が原因なのかよく分かりませんでした
こちらの環境は以下の通りです
WindowsXP Home
ActivePerl v5.10.1
sendmailの代わりに以下を導入しています
ttp://homepage1.nifty.com/yito/anhttpd/faq/sendmane.html
このプログラムの設定自体は正常です(コマンドラインからのテスト実行でメールは正しく受信出来ました)
ソース内のsendmailの記述(42行目あたり)も上記プログラムのパスに置き換えています
mimew.plとjcode.plはどちらもスクリプトと同じディレクトリに格納しています
何かヒントだけでも結構ですのでお願いします
0713nobodyさん
2010/02/26(金) 16:35:26ID:???sub myCreateTextFunction {} が本当にないからそのエラーが出るのは仕方ないね。
$attach_data に入れる値の用意ぐらい自分でしろということなんでしょう。
そこのサンプルは古風すぎるし Net::SMTP を使ってるサンプルで覚えるほうがいいよ。
0714nobodyさん
2010/02/26(金) 18:46:59ID:???後、2004年にその書き方をしてるってーのはどーよ…
http://www.stackasterisk.jp/tech/program/index.jsp;jsessionid=aPeJyFylGm44
0715712
2010/02/26(金) 19:28:45ID:???回答感謝です
とりあえず自分の学習用にいじくるつもりだったのですが、
Net::SMTPにも注目したいと思います
0716nobodyさん
2010/03/06(土) 17:25:20ID:???そのファイルを、作成されるのとほぼ同時に任意のメールアドレスへ送りたいです
メールへの送信はON/OFFを任意に切り替えられるようにしたいです
ちなみに、作成される日時などは完全にランダムで、全く作られない日が数日続く事もあれば
数分おきに作られ続ける事もあります
また、作成されたファイルが上書きされたりすることはありません
一度作られたらずっとそのままです
しかし、一度作られたファイルは後から削除されたりすることもあります
そういう事はPerlでは可能でしょうか?
ご意見をお願いします
0717nobodyさん
2010/03/06(土) 17:27:58ID:???ファイルを作るプログラムから呼び出せば別だが
0718nobodyさん
2010/03/06(土) 20:58:00ID:???もっと短い間隔だったらTime::HiResでミリ秒単位のウェイトをかけてループで監視。
くらいかな。
同時にしたけりゃファイルシステムにフックかける必要があるね。やりかたは知らん。
0719716
2010/03/07(日) 00:17:02ID:???「ほぼ同時」は、「数分以内」と読み替えてください
あと、あれから検索してみたのですが、
File::Monitorというモジュールが目的に近そうだという事まで分かりました
ttp://search.cpan.org/~andya/File-Monitor-0.10/lib/File/Monitor.pm
どうやら、新規作成、削除、変更されたファイルやフォルダを検知できるようです
とりあえずこれをしばらくいじってみようと思います
0720nobodyさん
2010/03/07(日) 14:03:50ID:???それが発火するタイミングにひっかければいいんじゃないか?
0721nobodyさん
2010/03/07(日) 14:17:12ID:???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;
0723722
2010/03/07(日) 16:51:32ID:???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:???$_に全行入っちゃってるだけじゃないでしょうか。
ループのところ、特にファイルハンドルから取得してるところのコード書いてみてください。
0727724
2010/03/08(月) 01:47:54ID:???分かりました
#----
open FH, "< (ファイル名)";
my @list = <FH>;
foreach(@list){
chomp;
print "XXX".$_;
}
close(FH);
#----
主要部分はこんな感じです
ループ部分を、一行読み込み→出力→次の行へ…というイメージでとらえていたのですが…
0728nobodyさん
2010/03/08(月) 01:59:03ID:???コードそのものには特に問題はありません。(closeの位置とか気にはなりますが)
読み込ませてるファイルの改行コードは何ですか?
0729nobodyさん
2010/03/08(月) 02:03:49ID:???XXXAAAXXXBBBXXXCCC にならんか?
0731724
2010/03/08(月) 02:52:04ID:???実は、>>727の前には色々と前処理が入っていました
そこで試しに、>>727の部分だけを抜き出して別ファイルで保存し実行した所
期待通りの動作(全ての行にXXXが追加される)をしてくれました
原因はこの前段階にありそうですので、もうしばらくこちらで調べてみます
ありがとうございました
0732nobodyさん
2010/03/08(月) 02:55:51ID:???0733nobodyさん
2010/03/08(月) 16:09:12ID:???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:???オラなんだかワクワクしてきたっゾ
0738736
2010/03/09(火) 16:28:23ID:???下記のコードをコマンドプロンプトから試してみましたが、
なにも出力されません。。エラーすら吐かれません。。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:???0741nobodyさん
2010/03/09(火) 21:03:56ID:???0742736
2010/03/09(火) 21:21:32ID:???server.cgi,client.cgiどちらも消してみましたが同じでした。。
0743nobodyさん
2010/03/09(火) 21:28:59ID:???0744nobodyさん
2010/03/09(火) 22:18:43ID:???0745nobodyさん
2010/03/10(水) 01:27:55ID:???0746nobodyさん
2010/03/11(木) 12:44:28ID:???それと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:???ググれ
0749nobodyさん
2010/03/11(木) 20:17:58ID:???ありがとうございます
またまた質問で申し訳ないです
インストールしてpc再起動後コマンドプロプトでC:\Documents and Setting\○▽■>perl-vを入力したのですが、
『perl-vは内部コマンドまたは外部コマンド、操作可能なプログラムまたはバッチ ファイルと
して認識されていません。』と出ます。
何が原因として考えられるのでしょう?
0752nobodyさん
2010/03/12(金) 13:17:35ID:???ソース
$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:???>>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:???一行だよ
えっ、違う?
0759nobodyさん
2010/03/13(土) 17:51:31ID:???0760nobodyさん
2010/03/13(土) 17:55:05ID:???これのこと?
0761760
2010/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" は配列を $" の中身(デフォルトは半角スペース)で区切られた文字列に展開すること
これがわかってりゃなんてことない話なんだけどな
0765nobodyさん
2010/03/14(日) 09:26:53ID:???いっそ全てリファレンスだったらと思うことがある
0766nobodyさん
2010/03/18(木) 21:32:34ID:???環境はWindows7、ActivePerl最新版です
一時的にユーザ名をAdminなどに変更してみたのですがUsers直下のユーザ名フォルダは変更されませんでした
何か良い対策はありますでしょうか?
0767nobodyさん
2010/03/18(木) 21:42:36ID:???Admin でログインして、権限の強い perl っていうユーザーを作ります。
で、ppm のショートカットの設定にあると思うんだけど、指定したユーザーで
実行するようにする。
こうすれば PPM 実行できる。
ハズ
0769766
2010/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:???後者についてはJcode.pmの実体について調べればすぐわかる。
0772nobodyさん
2010/03/20(土) 15:55:08ID:???0773nobodyさん
2010/03/20(土) 16:07:23ID:???0774nobodyさん
2010/03/20(土) 18:01:10ID:???無駄にがんばってる気がするけどしょうがない。
0775nobodyさん
2010/03/20(土) 18:32:43ID:???なんでもeggにするPython
なんか問題あるのか
0776nobodyさん
2010/03/20(土) 19:10:35ID:???eggおいしい
pm食えない
0777nobodyさん
2010/03/20(土) 22:25:30ID:/W705D6D「オブジェクト指向だと使いやすいから。」と考える人は作り直す
と思います。でもその反対にわざわざオブジェクト指向を導入する
必要がないと考える人もいるでしょう。だから jacode.pl が作られ
たのだと思います。
0778nobodyさん
2010/03/21(日) 00:13:01ID:???0779nobodyさん
2010/03/21(日) 02:16:04ID:???0780nobodyさん
2010/03/24(水) 01:03:23ID:N7x4Tlpb0781nobodyさん
2010/03/24(水) 01:31:29ID:???0782nobodyさん
2010/03/24(水) 02:07:39ID:???Perl5.8.8なのにMIME::Parserが入ってないレン鯖に手動コピーでは無理だったのと、
他のレン鯖ではJParserがうまく動かず、執着するのもなんなのでいっそのこと他にあればなぁと思いまして。
さきほどEmail::MIME::Attachment::Stripperを見つけて試していますが、タコなのでいいサンプルがないと使いこなせない^^;
0783nobody
2010/03/25(木) 00:21:12ID:???被害範囲はEncode内にとどまらずperlそのものが使いにくくなった。
perlはCGIで爆発的に普及したものの、WWWに対応しようと試みて
ユニコード化し、残念ながら失敗した。
もしEncodeがなかったらPHPもRubyも必要なかったのに。
0784nobodyさん
2010/03/25(木) 00:29:49ID:???0785nobodyさん
2010/03/25(木) 01:06:49ID:bcbloiJgまだ問題があるにしても、入りと出で変換しましょうってポリシーはわかりやすいと思う。
0786nobodyさん
2010/03/26(金) 17:33:17ID:Tt84M8Ngができません。
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:???そのポリシーが本当に分かりやすいのなら Unicode は生まれなかっ
たはず。
すでにあった ISO 2022 はそういった考えで世界中の文字を同時に
扱うことを考えていたのだけれど、現実は理想通りにはならなかっ
た。オクテット列が今、何の符号化なのか状態をもつようになるの
で検索や置換がとてもやりずらくて使い物にならない。
そこでエスケープシーケンスのないコードとして Unicode が開発
されたのでござる。
でも Encode は "フラグ" を再発明してしまって、同じ失敗を繰り
返してしまった。
これはきっとバベルの呪いだと思う。
0790nobodyさん
2010/03/28(日) 03:13:58ID:???00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
先頭の 1bit が右から読むのか左から読むのか
2 〜 16 bit が言語コード
残りが文字コード
ほら簡単
0792nobodyさん
2010/03/28(日) 08:56:47ID:???0793nobodyさん
2010/03/28(日) 11:17:51ID:Rvgpa/pp>モジュールによってはフラグのあるなしで挙動が変わるのも多いし、どっちで渡すべきなのかPODに書いてなかったりするから困る。
あぁ、これは確かにそうだね
POD内でまずutf8とか検索したりする
0794nobodyさん
2010/03/28(日) 20:17:39ID:???0796nobodyさん
2010/04/01(木) 19:06:37ID:???0797nobodyさん
2010/04/02(金) 10:24:03ID:???kawaisosu
ttp://www.value-domain.com/xreaip.php
0798nobodyさん
2010/04/02(金) 11:31:49ID:???新規に借りて5.6なんてのは某大手のあそこくらいだな
0799nobodyさん
2010/04/02(金) 11:41:29ID:???ネット上の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:???他の言語でもよくある話だけど、そういうサイトを参考にするなって話だよね
情報が溢れちゃってて探しにくいってのがperlの良くないところということか
0802nobodyさん
2010/04/02(金) 13:18:05ID:???参考にしてはいけないサイトをGoogleさんに教えてあげてくださいw
マルチポストではないと思うのだけど、
"Perlを勉強しているのですが正規表現についてよくわからないので教えてください。"
でググると情報が溢れていて且つ重複しているのが目につくよね。
0803nobodyさん
2010/04/02(金) 13:27:48ID:???まぁ重複してるといえばそうだけど、マルチポストではないはずだよ
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:???0809nobodyさん
2010/04/11(日) 02:01:29ID:???諸先輩方はPerlの各種変数をどのように体得したのですか?
0810nobodyさん
2010/04/11(日) 02:25:58ID:???0811nobodyさん
2010/04/11(日) 13:08:05ID:???■ このスレッドは過去ログ倉庫に格納されています