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

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

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん2006/07/27(木) 17:04:23ID:???
Perlのコーディングで困ってる人のスレです。

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

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

最低でも1と3が無いと誰も答えられないよ。
ソース貼る時は、全角スペースでインデント忘れずに。
良い回答は良い質問から。一緒に勉強しましょう。

過去ログやお勧めサイトは >>2-10
0581nobodyさん2006/08/17(木) 13:37:45ID:???
>>572
変数や関数の名前にハイフンを使う事はできない。
ハッシュのキーはクオートで囲む必要はない。
$form{test}としても常に大丈夫であって、strictも通る。
perl救命病棟という変な名前の本にその辺のかなりマニ
アックな話が載っている。
0582nobodyさん2006/08/17(木) 17:21:35ID:???
$form{test-test}hadamedaro?
0583nobodyさん2006/08/17(木) 17:33:16ID:???
>>580
CSSいじってperlいじってhtmlいじって。
そんなことしてるときに何かに名前をあげるときが来る。
「
う〜んこれはホゲの背景のためだからだからhoge-backとするか。
ん?ハイフン?アンダーバー?どっちだっけ?
他を見てみるか・・・
ハイフンだったな。

それじゃ画像を作るか。ん?ハイフンか?アンダーバーか?
」

なんてこともある。
0584nobodyさん2006/08/17(木) 17:39:57ID:???
全部自分かよw
理由って「悩むから」だけ?
じゃあCSSだけハイフン、あとは全てアンダーバーでOK
0585nobodyさん2006/08/17(木) 18:09:23ID:???
>>584
そうなるとhtmlで違和感を覚える。
nameはアンダーバーなのにidやclassだけハイフンっておかしくねえか?

ってね。
0586nobodyさん2006/08/17(木) 18:10:41ID:???
strictとか好きな人でたまにいるのは、
全てかんええええええwwwww

マジでウエkルwwwwwww
0587nobodyさん2006/08/17(木) 18:12:52ID:???
hogeBackImgっていう手もあるぞ
0588nobodyさん2006/08/17(木) 18:31:57ID:???
>>585
違和感だけの話なら自分ルールを決めるしかない。
現状共通のルールは無い。
スレ違い。
0589nobodyさん2006/08/17(木) 18:51:21ID:???
>>585
じゃあいっそ tr/-/_/ ってやれば?(´・ω・`)
0590nobodyさん2006/08/17(木) 19:38:03ID:???
PerlはelsifなのにJavaScriptはelseifなのもどうにかしたい

とか言い出しそうだな。
0591nobodyさん2006/08/17(木) 20:07:10ID:????2BP(223)
PHPもelseif
0592nobodyさん2006/08/17(木) 20:08:40ID:???
elif
elsif
elseif
else if
0593nobodyさん2006/08/17(木) 20:28:56ID:tIcJSB0O
XML::XSLTを使ってXMLを変換しようとしているのですが、
my $xslt = XML::XSLT->new("hoge.xsl");

これだけで

Use of uninitialized value in subroutine entry at C:/Perl/site/lib/XML/Parser/Ex
pat.pm line 474.
Error executing run mode 'install': Error while parsing:
no element found at line 1, column 0, byte -1 at C:/Perl/site/lib/XML/Parser.pm
line 187

C:/hoge.xsl at C:/Perl/site/lib/XML/XSLT.pm line 1507.
at index.cgi line 7

とエラーが出て動く気配がありません。
ちなみにXSLの中は以下のようになっています。

<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"; xml:lang="ja">
<xsl:template match="/contents">
hoge
</xsl:template>
</xsl:stylesheet>

ためしにXSLの中を全部消してみてもダメでした。XSLファイル自体を
削除するとまた違うエラーが出たのでとりあえず読めてはいると思います。

すみません、ここで丸一日悩んでいるのですがどうすればうまいことサーバサイドで
XMLを変換できるのか、どうかご教授お願いします。
0594nobodyさん2006/08/17(木) 22:22:55ID:???
CSSはどこかで旧ブラウザを切り捨てるしかない。今から新しく作るサイトでNN4に対応してるサイトなんてほとんどないだろう。
_と-なんて気にする必要ない。
0595nobodyさん2006/08/18(金) 11:29:18ID:???
>>572
安心してください。あまり悩む必要はありません。
通常 Perl の識別子として使えるのは /[\w][\w\d]*/ にマッチする文字列だけだからです。

変数名、関数名、パッケージ名、クォートを省略したハッシュキーにはそういった文字列が要求されます。
裸の "-" はソースコード中のトークンを分割してしまい、perl はそれを「マイナス演算子」としてパースするでしょう。

従ってそれほど迷うことができる局面は多くありません。少なくとも Perl コード中では。
0596nobodyさん2006/08/18(金) 13:49:32ID:???
モジュールを作っているのですが、マルチプルインスタンスを使う必要がないとわかっているものは非OOPで作った方がいいのでしょうか。
0597nobodyさん2006/08/18(金) 14:42:19ID:xIt7iz8d
perlのcgiを使って他サイト(NOT管理下)のページを取得して、自分の好きな文字列を取得したいんですが、
詳細が乗っているサイト若しくはやり方を教えてください。
内容としては翻訳サイトのページ翻訳のようなことがしたいです
宜しくお願いします
0598nobodyさん2006/08/18(金) 14:43:32ID:???
>>597
おまえいい加減にしろ。
何個マルチしてんだボケ。
解答かえってきてるんだからまずはそれ嫁馬鹿。
0599nobodyさん2006/08/18(金) 14:47:31ID:xIt7iz8d
>>598
今レスしてきました。
こちらにも解決した旨書こうと思ってたところです、遅くなってすいません。
別にマルチするつもりはありませんでした、回され続けたもので・・ほんとスイマセン。。
>>597の質問は解決しました
ありがとうございました
06005822006/08/18(金) 16:47:54ID:???
お〜い
0601nobodyさん2006/08/18(金) 17:14:01ID:???
ちょっとしつもんー。

# A.pm
package A;
use CGI;
1;

# B.pm
package B;
use A;
@B::ISA = qw(A); # この1行はなくても動くけど、実際の用途で使ってるので。
my $Q = CGI->new();
1;

こんなことやってもいいのかな?
つまり、B.pm で use CGI; って入れなくても、A で use して require してるから動くし警告も出ないんだけど、
これってお行儀よくないのかな? ってことなんだけど。
0602nobodyさん2006/08/18(金) 17:35:23ID:???
動くけど行儀はよくない。
0603nobodyさん2006/08/18(金) 18:57:28ID:lccc8Mku
ハッシュのキーに今までずっとハイフン使ってたけど、
アンダースコアならクォートしなくてもいいし、
もしかして、perlに関する名前系には全てアンダースコアがいいの?

でもなんでだろ。なんでハイフンを今まで使ってたんだろ。
何か理由があるはずだけどな。
0604nobodyさん2006/08/18(金) 19:08:57ID:???
> perlに関する名前系
意味が分かりません。
0605nobodyさん2006/08/18(金) 19:39:04ID:???
名前にはハイフンは使えない。ハッシュキーは名前じゃない。
perl -e '@a=qw/a b/; @b = qw/z y/; $h{\@a} = 1; $h{\@b} = 2;for (keys %h){ print "$_ = $h{$_}\n";}'
なんてのも当然の事ながら動く。
0606nobodyさん2006/08/18(金) 19:46:28ID:???
>>605
んー、まぁそうなんだけど。
コードの方は例としてどうなのよ。
リファレンスを文字列として解釈して、それをキーにしてるだけだけど。
0607nobodyさん2006/08/18(金) 21:33:32ID:???
サーバーにアップするファイル名や、プログラムのソース内に
演算子を使うという行為そのものが信じられない
0608nobodyさん2006/08/18(金) 21:42:51ID:???
VBだったらどうするつもりなんだろ?
0609nobodyさん2006/08/18(金) 22:08:52ID:???
>>606
おお、本当だ。
いままで、オブジェクトのリファレンスをキーにしているものだと信じきっていた。

perl -e '$k="ARRAY(0x8600b08)"; @a=qw/a b/; @b = qw/z y/; $h{\@a} = 1; $h{\@b} = 2; $a[2] = "c";for (keys %h){ print "$_ = $h{$_}\n";}; print "$d=$h{$k}\n"'
($k は一回実行後、適当に直してくれ。)
0610nobodyさん2006/08/18(金) 23:24:30ID:???
>>601
use と require は勝手に重複ロードを避けてくれます。ですからその場合は迷わず use しておくべきです。
# 余談: B.pm は標準モジュールとカブるんで例にしてもイマイチかな。
0611nobodyさん2006/08/18(金) 23:34:13ID:+PBYJBRx
研究室でC言語のプログラムをかなり多く回すのですが、先輩から
「いちいちプログラムを一つ一つ回すのめんどくさいからキー一つで全てのプログラムを研究室内のコンピュータに分散させて回せるようにしとけ。
 多分perlでできると思うから。」
と言われました。
当方こういった事に無知です。
何から手をつければいいのか分からず困っています。
どこで聞けばいいのか分からずこちらで聞いてみました。
どうかご教授お願いします
0612nobodyさん2006/08/18(金) 23:37:10ID:???
>>607
言いたい事は分からんでもないですが…。
「ファイル名」は気にしないなあ。ハードコードするにしてもクォートするに決まってるんで。
「プログラムのソース内に」は…ごめんなさい、少なくとも僕は使わないと書けないです。信じてもらえないかもしれませんけど。
0613nobodyさん2006/08/18(金) 23:50:50ID:???
>>611
とりあえず「perl バッチ処理」とかでググればいいと思うよ。
ていうかその研究室大丈夫か。
0614nobodyさん2006/08/18(金) 23:52:59ID:???
その大学の名前を是非教えてくれ
0615nobodyさん2006/08/18(金) 23:57:20ID:???
perlじゃなくてもシェルで組めると思うが
0616nobodyさん2006/08/18(金) 23:57:53ID:+PBYJBRx
>>613
�dクスです。感謝いたします。情報系でないのでなんとも…
>>614
聞いても「あーやっぱりw」ってなレベルの大学です。
0617nobodyさん2006/08/19(土) 00:06:53ID:???
>>616
どの辺りの地方かだけでも無理?
俺の大学の予感がする…
# ちなみに東海地方、「あーやっぱり」な大学w
0618nobodyさん2006/08/19(土) 00:08:50ID:???
世間話は mixi でやれ。
0619nobodyさん2006/08/19(土) 00:39:59ID:????2BP(223)
ゆうじんが
だれもいないから
みくしぃの
しょうたいめーる
いまだとどかず
0620nobodyさん2006/08/19(土) 00:51:25ID:???
ゆうれいがでた!?
0621nobodyさん2006/08/19(土) 07:39:58ID:???
>>619
カワイソス
06226202006/08/19(土) 08:38:28ID:???
つっこんでもらえない俺の方がカワイソウなんだが?
0623nobodyさん2006/08/19(土) 08:46:12ID:???
>>622
つっこみどころがない
誤爆としか思えない
06246202006/08/19(土) 09:05:27ID:???
縦読みだろ」。。。」
0625nobodyさん2006/08/19(土) 09:57:41ID:???
( ゚Д゚)
0626nobodyさん2006/08/19(土) 11:30:40ID:???
ここ本当にperlスレか?
0627nobodyさん2006/08/19(土) 12:00:41ID:???
糞スレです><
0628nobodyさん2006/08/19(土) 15:31:15ID:???
は?何桁目縦読み?
0629nobodyさん2006/08/19(土) 16:29:19ID:GA5MBol0
>>628
5桁目でしょ。
0630nobodyさん2006/08/19(土) 16:51:08ID:WYPasnq7
質問させて下さい。

print "<FONT size=2>表示</FONT>\n";

とすると、「表示」の文字が文字化けします。

print '<FONT size=2>表示</FONT>\n';

とすると文字化けしませんが、「\n」が表示されてしまいます。

とうしたら良いでしょうか?
0631nobodyさん2006/08/19(土) 16:58:10ID:???
print '<FONT size=2>表示</FONT>',"\n";
0632nobodyさん2006/08/19(土) 16:58:59ID:???
sjis使うのをやめる
0633nobodyさん2006/08/20(日) 01:19:05ID:???
表\示
0634nobodyさん2006/08/20(日) 01:21:43ID:jxY7weHr
     きれたおっ〜〜〜〜〜
                 
            /⌒ヽ γ⌒'ヽ
           ( ^ω^)i ミ(二i   
           (  ∪ ∪ヽ、,,_| |ノ    
           と_)_)  r-.! !-、  
                  `'----'  
0635nobodyさん2006/08/20(日) 02:30:01ID:???
http://www.kent-web.com/pubc/jcode/
0636nobodyさん2006/08/20(日) 08:41:26ID:???
どなたか>>596お願いします。
06376202006/08/20(日) 08:54:38ID:???
本当にわからないんだn。
頭の悪いやつにきたいした俺gまちがいただ。
0638nobodyさん2006/08/20(日) 09:02:20ID:???
うんまぁそういうことにしとけ
0639nobodyさん2006/08/20(日) 09:52:07ID:???
>>596
将来の拡張なども考えて、オブジェクト指向で書くのが良いと思う。
完全オレオレモジュールなら、どちらでもという気はする。

http://www.kt.rim.or.jp/~kbk/perl5.005/perlmodlib.html#Guidelines_for_Module_Creation
0640nobodyさん2006/08/20(日) 10:09:15ID:???
Perlが一番苦手な処理、オブジェクト指向
0641nobodyさん2006/08/20(日) 11:48:14ID:???
perlがオブジェクト指向を苦手というわけではなく、オブジェクト指向を「処理」だと
考えているキミ自信がオブジェクト指向を苦手としているのだ。
0642nobodyさん2006/08/20(日) 11:48:36ID:???
別に使う方が分かってれば全く問題ない。<OOP
0643nobodyさん2006/08/20(日) 11:58:45ID:???
メソッド名を実行時に解決するからインタープリタの苦手な分野だな。
Movable Typeがクラスを一切使わず、全部関数なら2倍弱速いとか。
0644nobodyさん2006/08/20(日) 12:11:58ID:???
コンパイラでも実行時のメソッド探索はコストが高いです。
0645nobodyさん2006/08/20(日) 16:12:29ID:???
それでも12万もしませんよ
0646nobodyさん2006/08/20(日) 16:33:59ID:???
それより中途半端なOOの実装をなんとかしる
0647nobodyさん2006/08/20(日) 17:00:10ID:???
>>646
Perl は風呂敷みたいなもんだ。
風呂敷にジュラルミンケースの長所を求めて何か嬉しいことがあるかな。

それでも君はいつでも OO::Excellent を書いて CPAN に登録できるし、きっと誰もそれを止めない。
0648nobodyさん2006/08/20(日) 18:00:00ID:???
タイム風呂敷〜
0649nobodyさん2006/08/20(日) 18:29:15ID:???
Perl6でOOP周りは随分まともになる
…が、それでもやっぱりPerlの変態度は変わらない
どころか強化されるので何とも言えない。

変数の頭に付ける記号、増えるんだよなぁ。~$?FOO とか +@*BAR とか。
0650nobodyさん2006/08/20(日) 21:00:08ID:???
>>649 それがいい
0651nobodyさん2006/08/20(日) 22:24:07ID:???
>>649
別にそういう記号が増えるだけで、
基本は変わらない。
http://dev.perl.org/perl6/doc/design/exe/E02.html
0652nobodyさん2006/08/21(月) 00:40:05ID:1WWjUDHa
「あいうえおかきくけこ」という文字列があった場合、
これを「あいうえお...」という感じに、先頭5文字だけ表示させるようにしたいのですが、可能でしょうか?

個人的には「length」を使うのかなと睨んでいるのですが・・・。

簡単で構わないのでアドバイスお願い致します・・・ orz
0653nobodyさん2006/08/21(月) 00:49:09ID:???
>>652
まずは思ったままをやってみて、結果を見ながら「何故こうなる?」という部分を考え、
それでもやっぱりわからなかったら聞きにおいで。
0654nobodyさん2006/08/21(月) 00:55:44ID:????BRZ(1002)
予想
substrでやる → 途中で文字が切れちゃいました! →
0655nobodyさん2006/08/21(月) 01:16:18ID:???
utf8::decode($str)
0656nobodyさん2006/08/21(月) 01:55:18ID:???
まず、[abcdefg]の中からabcを抜き出せるようになった方がいい。そうすれば、日本語の抜き出しもめどがつく。
0657nobodyさん2006/08/21(月) 03:12:24ID:???
つーかさ、perlやってて文字列操作が全く出来ませんって、
じゃあ、いったい何が出来るのか問いたい
0658nobodyさん2006/08/21(月) 03:27:47ID:???
>>657
標準出力への文字列出力に決まってるじゃないか。
つまらないこときくなよう。
0659nobodyさん2006/08/21(月) 04:21:44ID:???
PHPからPerlに移って来たものなんですが、
Perlにはエラーの制御演算子みたいなものはありますか(PHPでいうところの『@』)?

演算子などでなくても、Perlのエラー文が表示されなくなれば良いんですが……。
0660nobodyさん2006/08/21(月) 06:37:43ID:???
>>659
同じ物はないよ。
PHPの@を(notice避けの)手抜きに使ってるのか、
(スクリプトの終了を回避して)後始末をするために使ってるのかにもよる。
・コード修正
・no warnings/strict
・eval
あたりかな。
0661nobodyさん2006/08/21(月) 09:07:48ID:???
SJISなら
use encoding "shiftjis";

eucなら
use encoding "euc-jp";

のおまじないをしておくとか。。。
0662nobodyさん2006/08/21(月) 13:28:33ID:???
>>661
どこへの返答かいまいちわからんけど、encoding プラグマは「おまじない」としてはちょっと勧めづらい。
0663nobodyさん2006/08/21(月) 13:40:19ID:???
>>659
> 演算子などでなくても、Perlのエラー文が表示されなくなれば良いんですが……。

これを読む限りでは抑制したい「エラー文」は主に警告の類なんでしょう。
出力を抑えるのではなく STDERR をファイルにリダイレクトする手もあります。
そうしておくことで、後からどのようなエラーが生じていたのか確認できます。

もちろん use strict 及び use warnings 下でエラー・警告の出ないように書く、というのが本筋ですけれど。
その上で本当にそれが必要なら no strict 〜 や no warnings 〜 などで極力限定的に制限を緩める方法があります。
0664nobodyさん2006/08/21(月) 14:38:15ID:???
>>660
"no warnings"がこちらの望みどおりだったので使わせていただきました。
ありがとうございました〜!
0665nobodyさん2006/08/21(月) 17:57:03ID:GgkIkg39
>>81
http://oraclesqlpuzzle.hp.infoseek.co.jp/regex/regex-2-1.html
0666nobodyさん2006/08/21(月) 22:38:34ID:???
ログ取り用途に、envを読み込んで整理してdata.txtに吐き出すプログラムを書いたのですが、htmlからの読みだしに困っています…
調べたところ、<img>タグで読みだして、CGIの方からダミーの画像を排出する…みたいな方法があるようなのですが、細かくは書かれておらず、どういうことかよくわかりません…
情報が少なく申し訳ありませんが、よろしくお願いしますm(_ _)m

ちなみに携帯用なのでJavaやJavaScript系は不可で、SSIも使えませんm(_ _)mm(_ _)m
0667nobodyさん2006/08/21(月) 22:49:08ID:???
そのページをCGIで動的に出力できないの?
それが無理なら、data.txt じゃなくて表示用HTMLファイルを直接吐くようにするとか。
0668nobodyさん2006/08/21(月) 23:30:54ID:???
WinXP+ActivePerlでLibXMLがインストールできません。

http://zerosp.com/mt/archives/xml-sax-error.php
ほぼこのページの手順どおりに作業したのですが、どうしても最後の
ppm install XML-LibXML
を打ち込むと、長いHTMLソース(activestate.comのページ?)が現れて終了してしまいます。
どうすればインストールできるでしょうか。
06696682006/08/21(月) 23:34:17ID:lSGtoXSQ
追記です。表示されるHTMLはどうやら、
何故かこのページのようです。
http://aspn.activestate.com/ASPN/Modules/Perl?query_start=1
06706662006/08/21(月) 23:44:30ID:???
>>667
ありがとうございますm(_ _)m

つまり、トップ自体をcgiにするということですよね…?
負荷がかかるんじゃないかなぁなんて考えているのですが…m(_ _)m

2つ目は、どういうことかよくわかりませんでした…m(_ _)m
0671nobodyさん2006/08/21(月) 23:44:47ID:???
>>668
ttp://oshiete1.goo.ne.jp/kotaeru.php3?q=1848375
0672nobodyさん2006/08/21(月) 23:48:04ID:???
>670

〜ごにょごにょっと処理〜

# 以下ダミー画像の出力
open(JPG, $jpegimage);
binmode(STDOUT);
read(JPG, $jpg, (-s JPG));
close(JPG);
print "content-type: image/jpeg\n\n";
print $jpg;
0673nobodyさん2006/08/21(月) 23:53:33ID:???
>>670
負荷なんてしらんがな(´・ω・) 制限があるなら最初から書こうよ...
システム管理者と相談汁!

後者の方法はつまり、data.txt を作成するスクリプトが、同時に
そのトップページのHTMLファイルを作り直す、もしくはデータを表示している部分を書き換える。
こちらの方法だと、表示されるのは静的なHTMLファイルだから、負荷は変わらないはず。
0674nobodyさん2006/08/22(火) 00:05:01ID:???
無料サービスでもその程度の負荷は負荷のうちに入らないわけだが・・・
0675nobodyさん2006/08/22(火) 01:05:29ID:???
携帯用のアクセス解析も腐るほどあるわけで
06766682006/08/22(火) 01:09:43ID:???
>>671
すいません、そのページも参考にしていたのですが分かりませんでした。

現在、CPANからのインストールを試みているのですが、
install XML::LibXMLと打ち込むと
===============================================
enable native perl UTF8
looking for -lxml2... no
looking for -llibxml2... no
libxml2 not found
Try setting LIBS and INC values on the command line
Or get libxml2 from
http://xmlsoft.org/
==============================================
とのメッセージが出て止まってしまいます。
libXML2ライブラリがない事が原因のようなので、
http://www.zlatkovic.com/libxml.en.html#binaries
ここからバイナリを落としてパスの通った場所においてみたのですが効果がありません。

どうすればいいでしょうか。
0677nobodyさん2006/08/22(火) 01:33:10ID:???
>>672

openの使い方が汚いよ
0678nobodyさん2006/08/22(火) 12:36:37ID:???
>>677
それなら綺麗な書き方を書いておくれ。
0679nobodyさん2006/08/22(火) 16:06:29ID:???
否定だけするのがム系板クオリティ
0680nobodyさん2006/08/22(火) 16:31:48ID:???
書き方は自由だけど、ハンドルにJPGは使わない。
■ このスレッドは過去ログ倉庫に格納されています