トップページphp
1001コメント296KB

Perlコーディング初心者質問スレ Part 58

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん2008/08/06(水) 22:54:32ID:???
Perlのコーディングで困ってる人のスレです。

【投稿する際の注意】
質問するときは内容をよく吟味してから投稿してください。
「コマンドの意味がわかんない」とかはマニュアル見ましょう。
回答者さんは何でも屋じゃありません。

1: 自分はこういう事がしたい。
2: それでこんな風にやってみたが・・・
3: こんなエラーが出て上手く行かなかった。

最低でも1と3が無いと誰も答えられないよ。
良い回答は良い質問から。一緒に勉強しましょう。

お勧めサイトは >2 以降

前スレ http://pc11.2ch.net/test/read.cgi/php/1203935151/
過去ログ倉庫 ttp://user.ftth100.com/mirrorhenkan/perl/
0713nobodyさん2009/01/31(土) 17:30:56ID:???
パッケージが変数とかwww
0714nobodyさん2009/01/31(土) 20:28:20ID:???
>>712
単刀直入すぎ。
それは出来ないけど、Sub::InstallとかClass::MOPとか、その辺使ってみるとか。

標準的なクラス型のオブジェクト指向では使わないから、そこは考えて使ってね。
0715nobodyさん2009/01/31(土) 20:50:36ID:IExMyMgz
プログラムが美味く動かないのですがどうやら原因はサブルーチンが作動していないようです。
以下はプログラムの一部。

#サブルーチンの呼び出し
&aaa();
exit(0);
# サブルーチンの宣言と定義
sub aaa{
print "あいうえお";
}

0716nobodyさん2009/01/31(土) 20:55:59ID:???
エラー内容をよく読むべし!
0717nobodyさん2009/01/31(土) 20:58:57ID:IExMyMgz
直接サーバーで動かしているのでエラーは戻ってきません。
0718nobodyさん2009/01/31(土) 21:10:13ID:???
>>717
まあ、まずは落ち着いて、君のPCにPerlを入れないか。
0719nobodyさん2009/01/31(土) 21:16:46ID:???
・どういう風に直接サーバで動かしているのか
・どういう風にサブルーチンが作動していないことを確認したのか
まさかこのプログラムをa.cgiとかにしてCGIで実行しているんじゃないよな・・・?
0720nobodyさん2009/01/31(土) 21:18:18ID:???
っとここはWebProg板だからその可能性が高そうだ
0721nobodyさん2009/01/31(土) 21:25:24ID:IExMyMgz
>>719
そうです。
0722nobodyさん2009/01/31(土) 21:47:12ID:???
>>721
初心者っぽいから言っておくが
サブルーチンの動作を省略せずにきちんと書いてみ
そしたらそのプログラムに何が足りないかすぐわかるはずだ。
0723nobodyさん2009/01/31(土) 22:22:12ID:???
初心者こそ初めは省略せずに丁寧にプログラムを書くべきだと思うんだが
今時の人はそういう事をしないのカネ
0724nobodyさん2009/01/31(土) 22:58:38ID:???
考えられるのは

- #!/usr/bin/perl のようなperlのパスを書いてない
- 実行権限がない
- web?? なら print "Content-type:text/html \n\n"; 的な記述がない

とかとか
0725nobodyさん2009/01/31(土) 23:50:05ID:???
モダン(笑)
0726nobodyさん2009/01/31(土) 23:51:42ID:???
つかfatalsToBrowswerでいんじゃね
0727nobodyさん2009/02/01(日) 00:24:54ID:???
単純にルーチンから引き渡せてないだけだろwww
0728nobodyさん2009/02/01(日) 00:36:42ID:???
>>727違うだろw

>>724のどれかじゃね?
エラー内容を書いてないし自分で解決するんだろ
0729nobodyさん2009/02/01(日) 02:37:45ID:8RIm5Wux
Python始まったな
Python 3が後方互換性を捨ててでも求めたもの
ttp://www.atmarkit.co.jp/fcoding/articles/python3/01/python301a.html
0730nobodyさん2009/02/01(日) 03:03:40ID:???
pythonは流行らないよ
ttp://d.hatena.ne.jp/seiunsky/20080417/1208454191
0731nobodyさん2009/02/01(日) 04:13:30ID:???
>>730
日本では流行らないだろw
世界的にはすでに流行ってる
0732nobodyさん2009/02/01(日) 04:55:13ID:???
ttp://ziddy.japan.zdnet.com/qa4086953.html
この状況と同じです。OSはXP、perlはv5.10.0です。
>ppm-shell
>install DBI
>install DBD-mysql
でパッケージが無くインストールできません。
>ppm でppmのGUI立ち上げてリポジトリ追加後にDBI,DBDと検索するとたくさん出てきます。
DBDで検索したのからDBD-mysqlPPだけインストールしました。
DBIで検索したのからよくわからないので大量ですが全部入れておきました。
○DBDはDBD-mysqlPPだけでよいですか?DBD-mysqlというのはなかったのでDBD-mysqlPP入れておきました。
○DBIはどれが必要なのでしょうか?
まだサンプルプログラムが動かない状態です。よろしくお願いします。
07337322009/02/01(日) 05:20:39ID:???
>ppm install DBI
Downloading ActiveState Package Repository packlist...not modified
No missing packages to install

>ppm install DBD-mysql
Downloading ActiveState Package Repository packlist...not modified
ppm install failed: Can't find any package that provides DBD-mysql

エラー内容貼らせていただきました。
DBIはインストールされているっぽいですか。
DBD-mysqlPPだけ入れればいいんでしょうか。。。
07347322009/02/01(日) 05:44:24ID:???
ttp://cpan.uwinnipeg.ca/PPMPackages/10xx/
ここに書いてあるコマンド直接書いてみたらできました。
>ppm install http://cpan.uwinnipeg.ca/PPMPackages/10xx/DBD-mysql.ppd
サンプルプログラムも動きました。

リポジトリに追加したときURLが間違っていたので
DBD-mysqlが無かったのかもしれません。
0735nobodyさん2009/02/02(月) 10:41:30ID:WfkTEh9p
すみませんvistaにmod_perlを導入したいのですが
ソースコードしか手に入らず困り果ててます
コンパイル済みのmod_perlはどこで入手できますでしょうか?
0736nobodyさん2009/02/02(月) 11:11:06ID:???
ggrks
0737nobodyさん2009/02/02(月) 11:45:22ID:???
>>736
シネカス
0738nobodyさん2009/02/02(月) 11:46:24ID:???
>>735
ActivePerlなら、ppmを使ってUwinnipegのリポジトリから取れるよ。
http://perl.apache.org/docs/2.0/os/win32/install.html
0739nobodyさん2009/02/02(月) 12:10:46ID:???
ググればすぐわかる内容をわざわざ掲示板で聞くとか頭悪過ぎ
0740nobodyさん2009/02/02(月) 12:45:35ID:???
テンプレにこれでも入れとくか
http://www.y2sunlight.com/ground/?ActivePerl5.8%2F6.mod_perl
0741nobodyさん2009/02/02(月) 14:11:48ID:???
> ググればすぐわかる内容をわざわざ掲示板で聞くとか頭悪過ぎ

ググって正しい内容に到達できるといいけどね。
古かったり、間違った情報だったりすることって多々あるよね。
ブログ書いてると分かると思うけど、pod とか他人からのコピペだったり、
試行錯誤してることを載せること多いよね。
その分野に疎かったら、古かったり、間違った情報だとしてもわかんないよね。
だから、知ってる人に質問したほうがいいと思うんだ。
0742nobodyさん2009/02/02(月) 14:33:05ID:qwoAnWRh
print "content-type:text/html\n\n";の\nはなぜ2つ書かないとcgiとして動作しないのでしょうか?
0743nobodyさん2009/02/02(月) 14:39:45ID:???
HTTP ヘッダが空行をヘッダとデータの区切りとして定義されてるから
0744nobodyさん2009/02/02(月) 14:48:06ID:???
そういう意味があったんですね
\nがひとつだと500エラーになったのはそういうこだったんですね
ありがとうございました
0745nobodyさん2009/02/02(月) 16:35:52ID:P7XLmGHa
何らかの原因でbuf1という変数が空になってしまうのですが

$buf1 = "$a[0]","&","$a[1]";

↑とりあえずこの表記は正しいでしょうか?
0746nobodyさん2009/02/02(月) 16:47:09ID:???
$buf1 = $a[0] . "&" . $a[1];
0747nobodyさん2009/02/02(月) 17:03:56ID:???
ありがとう^^
0748nobodyさん2009/02/02(月) 18:11:38ID:???
$buf1 = join("&", @a); とかじゃないかもしかして
0749nobodyさん2009/02/02(月) 18:24:35ID:???
Lingua::JA::kana というモジュールを使って
ローマ字をひらがなに変換しようとしています。
コマンドラインだと

$ perl -M'Encode' -M'Lingua::JA::Kana' -w -e 'print romaji2hiragana(@ARGV);' hogehoge(エンター)
Wide character in print at -e line 1.
ほげほげ

と表示されるのですが、

use strict;
use warnings;
use Encode;
use Lingua::JA::kana;
print romaji2hiragana(@ARGV);

という内容のスクリプトファイルをコマンドラインから実行すると

$ perl /Users/anon/Desktop/test.pl hogehoge(エンター)
Undefined subroutine &main::romaji2hiragana called at /Users/anon/Desktop/test.pl line 5.

と表示されてしまいます。
なぜスクリプトファイルの方は "Undefined subroutine" と
なってしまうのでしょうか?
0750nobodyさん2009/02/02(月) 18:41:51ID:???
>>749
Lingua::JA::"k"ana は書き込み時のミスか?
0751nobodyさん2009/02/02(月) 18:45:54ID:???
>>746
先生!動きません。
>>748
&で分割した処理の逆をやりたいのです。
0752nobodyさん2009/02/02(月) 19:05:10ID:???
print encode("shiftjis", romaji2hiragana("aka"));

で Win コンソールででけたよ
0753nobodyさん2009/02/02(月) 19:13:08ID:???
>>751
my @a = split(/&/, $xxx); したものなら >>748 で結合できる。
小出しにせずに、周辺のコードも晒すといいよ。

変数の様子が意味不明の時は、手当たり次第 Data::Dumper に食わせてみるといいよ。

use Data::Dumper;
warn Dumper($str);
warn Dumper(\@array);
warn Dumper(\%hash);
0754nobodyさん2009/02/02(月) 19:13:52ID:???
普通に

my @a = qw( a1 a2 );
my $buf1 = $a[0] . '&' . $a[1];
print "\nbuf1 = $buf1\n";

でできないか?
0755nobodyさん2009/02/02(月) 19:34:09ID:???
>>478さんの言うとおりにします。
しかし動かない理由も気になります周辺のコードです。

open(IN, "a.txt") or die;
read(IN, $a, -s IN);
my @pairs = split(/,/,$a);

@data = split(/&/,$pairs[0]);

if (data[1] == 12){@b = "3&@b";
$baf1 = $a[0] ."&". $a[1] ."&". $a[2]";

ちなみにこれです。これが動きません


0756nobodyさん2009/02/02(月) 20:00:19ID:???
>>755
{ に対応する } がないし、変数とおぼしきところに $ とかがないので、
今のままだと動かないと思う。

use strict; をスクリプトの一番最初に書くと、文法チェックしてくれるよ。
どんな理由があろうとも use strict; をつけるのは perl の基本だから、
その上でがんばってほしいです。

出てきそうな質問に答えておくと、"" で囲まれた中に @ を含めたいときは
\@ にするか、"" をやめて '' でくくったりする。
0757nobodyさん2009/02/02(月) 20:03:10ID:???
ありがとう御座いますがんばります。
07587492009/02/02(月) 20:24:03ID:???
>>750
おっしゃる通りでした。Lingua::JA::"K"ana に直したらちゃんと動きました。
典型的なケアレスミスでお恥ずかしいかぎりです。
最初 use kana; とだけ書いたときに出ていた Can't locate kana.pm in @INC
のエラーが、use Lingua::JA::kana; と書いたら出なくなったので、
この部分は通っているものと思い込んでいました。
ここできかなかったらずっとわからなかったと思います。
どうもありがとうございました。

>>752
わざわざ試していただいてありがとうございます。
そうすれば文字コードの指定も同時にできるんですね。
そちらを使わせていただくことにします。どうもありがとうございました。
0759nobodyさん2009/02/02(月) 20:36:37ID:???
>>758
> 典型的なケアレスミスでお恥ずかしいかぎりです。

あんまり謙遜すると、キチガイにつけ込まれるよ。
0760nobodyさん2009/02/02(月) 21:17:04ID:???
sub a{
&a
sub b{
}
}
このサブルーチンの使い方は間違っていますか?
0761nobodyさん2009/02/02(月) 21:28:52ID:???
>>760
何をしたくてそう書いたの?
0762nobodyさん2009/02/02(月) 23:25:18ID:???
Markdownのような記法からS5のようなスライドのHTMLを生成するモジュールをご存じであれば教えていただきたいです。
0763nobodyさん2009/02/02(月) 23:56:04ID:???
>>761
見た目がわかり易かっただけですorz

0764nobodyさん2009/02/02(月) 23:58:27ID:???
$a[1..9] = $b[1..9];
この記述はあってますか?

いったいどこが悪くて動かないのかわからないので総当り中。
0765nobodyさん2009/02/03(火) 00:00:23ID:???
>>764
まあ、まずは落ち着いて、君のPCにPerlを入れないか。
0766nobodyさん2009/02/03(火) 00:09:30ID:???
>>764
それ @a = @b; でできるよ
0767nobodyさん2009/02/03(火) 00:12:32ID:???
>>766
インデックスの0だけを据え置いて配列の内容を交換したいのですorz
0768nobodyさん2009/02/03(火) 00:12:39ID:???
@a = @b;

だと

@a[0..9] = @b[0..9];

になる気がする。

@a[1..9] = @b[1..9];

か。脳内だけど。
0769nobodyさん2009/02/03(火) 00:19:34ID:???
@a = @b;
shift(@a);
unshift(@a, $b[0]);
0770nobodyさん2009/02/03(火) 00:57:59ID:???
useするだけで色んなサブルーチンが使えるようになるモジュールって、全部use base "Exporter"してour @EXPORTにサブルーチン名代入する作りになってるんですか?
0771nobodyさん2009/02/03(火) 01:03:32ID:???
Perlのスライスは分かりづらいよな。何で@にしたんだろ。
0772nobodyさん2009/02/03(火) 01:56:59ID:???
a[0..9]が表すものはリストだから
a[0]ならスカラーだから$なのと一緒
0773nobodyさん2009/02/03(火) 02:11:03ID:???
$ @ % & などは、変数とかを表すものでなく、
実は一貫してアクセスの種類示すものとして使われている。

$aaa; #「スカラー変数aaa」ではなくて「スカラー名aaaへのアクセス」

>>770
オブジェクトじゃなければ、だいたいそう。
ひねくれ作者だったら知らん。
0774nobodyさん2009/02/03(火) 08:12:43ID:???
検索どころか、ちょっと試せば分かることをなぜ試さないのか。
質問者は>>1を熟読した上で、質問してほしい。
0775nobodyさん2009/02/03(火) 14:14:36ID:???
>>774
そんな風に煽るから、やる気なくすんじゃないの。
0776nobodyさん2009/02/03(火) 14:17:47ID:???
>>774
答えたい人が答えればいいだけだから、
スルーしろよ。
0777nobodyさん2009/02/03(火) 14:40:43ID:???
いやしくも「教えてクン」たるもの、努力をしてはならない。
過去ログを読んだり、検索してはいけない。
「英語は苦手なので、分かりません。」は、高く評価できる。
辞書片手にマニュアルやReadMeを読むなど、決してしてはならない。
他力本願と言われようと、自分で調べたり試行錯誤したりせず、他人の努力の結果を搾取するのが、正しい「教えてクン」である。
また、「もう何が悪いのかサッパリ分かりません。」と言ってふてくされるのも有効である。
「サッパリ」という単語が「やる気の無さ」を効果的に表現している。
「原因を特定するには、何をすべきでしょうか?」と訊いてしまうと自己の積極性が現れてしまうので、「教えてクン」失格である。
0778nobodyさん2009/02/03(火) 15:52:49ID:???
>>777
荒らすな>>774
0779nobodyさん2009/02/03(火) 16:38:22ID:???
>>773
それ本読んだ事ある人なら知ってる内容だよね
0780nobodyさん2009/02/03(火) 19:46:43ID:???
@a = shift(@a) ;
unshift (@a , 1) ;

この記述はあってますか?、それと日本語使えてウインドウズに入るPerlって売ってますか?
0781nobodyさん2009/02/03(火) 19:55:35ID:???
店長、ネタレス>>780入りました。
0782nobodyさん2009/02/03(火) 20:55:27ID:???
perlは実は無料です。ソースも公開されています。
0783nobodyさん2009/02/03(火) 20:57:12ID:???
オープンソースだからねぇ
0784nobodyさん2009/02/03(火) 21:29:51ID:???
>>780
> この記述はあってますか?、それと日本語使えてウインドウズに入るPerlって売ってますか?

use strict;
use warnings;

の 2 行を、perl スクリプト全部の先頭に付けると、
記述があってるかどうかおしえてもらえるよ。

Windows に入る perl は、ActivePerl というのと Strawberry Perl の
2 つがあるよ。
0785nobodyさん2009/02/03(火) 21:35:22ID:???
Windowsで使用している人のほとんどがActivePerlだと思う
0786nobodyさん2009/02/03(火) 21:38:31ID:???
windowsで鯖公開してる人が多いのか?
0787nobodyさん2009/02/03(火) 23:31:26ID:???
Windowsで開発しても、運用まではやらないんじゃないか。
0788nobodyさん2009/02/04(水) 00:12:55ID:???
開発は本番の環境に似せた環境で作るから
Winで使わないならWinで開発しないだろ、jk
0789nobodyさん2009/02/04(水) 00:28:31ID:???
開発、運用にwindowsを選ぶ理由がわからん
0790nobodyさん2009/02/04(水) 00:30:49ID:???
昔からWin鯖で動いてたシステムなら改修で弄った事あるけど
弄った後にWin鯖は入れ替えでRHELに入れ替わってたな
0791nobodyさん2009/02/04(水) 01:09:23ID:???
今はvmwareとかcolinuxがあるからなあ。
0792nobodyさん2009/02/04(水) 01:24:33ID:???
実機用意しなくて済むようになったのは良い事
0793nobodyさん2009/02/04(水) 03:05:51ID:???
0chのtest060227.zipを使用して掲示板を運営しています。
http://0ch.mine.nu/public/scripts/
スレッド一覧( ./subback.html )にもmeta.txtの内容を書き込もうと思い
いろいろ弄ってなんとか形になりました。※meta.txtは掲示板を作って自分で書き込めます。
しかし、これでよいのかどうか自信がもてないため質問します。

varda.plの191
sub CreateSubback{ } 内に

require('./module/legolas.pl');
$Caption = new LEGOLAS;
META($this,$Index,$Caption);

151# HTMLヘッダの出力
$Caption->Print($Page,undef);

他に
sub META{
 my ($this,$Page,$Caption) = @_;
 my ($title,$link,$image,$code);
 $Caption->Load($this->{'SYS'},'META');
}


ミスはないでしょうか?
0794nobodyさん2009/02/04(水) 04:42:54ID:???
>>793
★三 【 スクリプト改造工房 PART 9 】 ★三
http://pc11.2ch.net/test/read.cgi/php/1143834740/
0795nobodyさん2009/02/04(水) 05:07:43ID:???
>>793
>ミスはないでしょうか?

動作するか自分で試す事もできないの?
馬鹿なの?死ぬの?
0796nobodyさん2009/02/04(水) 05:15:04ID:???
>>794
移動します。
0797nobodyさん2009/02/04(水) 07:09:52ID:???

@a = @b
shift(@a) ;
unshift (@a , 1) ;

この表記でバグってるような気がします


ちなみにjperl日本語版をベクターでダウンロードしましたがインストーラーが見当たりません。
ウインドウズで開発環境を作るにはどうしたらよいのでしょうか?
0798nobodyさん2009/02/04(水) 11:33:59ID:???
a とか b だけの変数名は使うなバカチン

unshift(@a , 1);
第二引数は配列でアレ!
0799nobodyさん2009/02/04(水) 21:14:31ID:???
>>797
> この表記でバグってるような気がします
http://www.e777.co.jp/perlcw/perlcw.html

> ウインドウズで開発環境を作るにはどうしたらよいのでしょうか?
http://www.activestate.com/activeperl/
0800nobodyさん2009/02/04(水) 23:10:49ID:???
ぜろちゃんねるスクリプト use strict; すらしてねぇ
0801nobodyさん2009/02/05(木) 07:17:41ID:???
strict.pmが鯖に必ずしも入っていなかったからだと思うよ
0802nobodyさん2009/02/05(木) 09:39:18ID:???
弄られるってのも考えてると思う
0803nobodyさん2009/02/05(木) 10:22:36ID:???
>>801
> strict.pmが鯖に必ずしも入っていなかったからだと思うよ

そういう鯖って今もあるの?
あるとして使う積極的な理由は見つからない。
use strict; しないスクリプトは消えるべきかと。
0804nobodyさん2009/02/05(木) 10:33:23ID:???
世の中そう簡単じゃないんだよ
0805nobodyさん2009/02/05(木) 10:37:35ID:???
作る時は
-Tオプション
use strict;
use warnings;
つけるけど、納品するときは外すよ
0806nobodyさん2009/02/05(木) 11:13:47ID:???
>>805
どういう理由があって外してるの?
0807nobodyさん2009/02/05(木) 11:20:17ID:???
>>806
納品前に外す趣旨の発言は、この板で何度か出てきてるね。
外すと書くだけで、合理的な理由を示さない人だから、構わない方が良いよ。
0808nobodyさん2009/02/05(木) 11:34:34ID:???
>>807
>>801
可能性がゼロじゃないわけで。
ログはきまくるっていうのもあるのかな
0809nobodyさん2009/02/05(木) 12:05:01ID:???
>>808
Perl で飯食うの辞めるといいと思う。
0810nobodyさん2009/02/05(木) 12:15:13ID:???
0chのtest060227.zipを使用して掲示板を運営しています。
http://0ch.mine.nu/public/scripts/
スレッド一覧( ./subback.html )にもmeta.txtの内容を書き込もうと思い
いろいろ弄ってなんとか形になりました。※meta.txtは掲示板を作って自分で書き込めます。
しかし、これでよいのかどうか自信がもてないため質問します。

varda.plの191
sub CreateSubback{ } 内に

require('./module/legolas.pl');
$Caption = new LEGOLAS;
META($this,$Index,$Caption);

151# HTMLヘッダの出力
$Caption->Print($Page,undef);

他に
sub META{
 my ($this,$Page,$Caption) = @_;
 my ($title,$link,$image,$code);
 $Caption->Load($this->{'SYS'},'META');
}


ミスはないでしょうか?
0811nobodyさん2009/02/05(木) 12:21:03ID:???
> ミスはないでしょうか?

お母さんのおっぱい揉みながら聞いてみるといいよ
0812nobodyさん2009/02/05(木) 12:22:33ID:???
移動したんじゃないのかよw
■ このスレッドは過去ログ倉庫に格納されています