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

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

レス数が900を超えています。1000を超えると表示できなくなるよ。
0001nobodyさん2007/09/16(日) 19:49:43ID:???
Perlのコーディングで困ってる人のスレです。

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

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

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

お勧めサイトは >2 以降

前スレ ttp://pc11.2ch.net/test/read.cgi/php/1180492441/
過去ログ倉庫 ttp://user.ftth100.com/mirrorhenkan/perl/
0813nobodyさん2008/01/24(木) 00:05:46ID:???
改行コードの違いかな?
ttp://www.tohoho-web.com/wwwxx011.htm
0814nobodyさん2008/01/24(木) 00:28:39ID:???
>>812
ヒント
・UNIXではLF、WindowsではCRLF。
・\nはLR、\r\nがCRLF。
・FTPのアスキーモードで転送すると自動相互変換してくれる。
0815プログラミング歴2ヶ月2008/01/24(木) 00:53:36ID:+24Wb9Pu
>>813,814さん

解決しました。ありがとうございました!
マジに感謝してます。
0816nobodyさん2008/01/24(木) 10:27:32ID:???
>>815
例えばxyzzyみたいに、改行コードを確認したり、変更できる
テキストエディタを入れておいたほうがいいよ。
0817nobodyさん2008/01/24(木) 10:41:34ID:???
サクラエディタおすすめ。
0818nobodyさん2008/01/26(土) 19:03:18ID:???
保守
0819nobodyさん2008/01/28(月) 12:09:42ID:fVIm37qB
Perl初心者です。
簡単なPerl/CGIのプログラム(掲示板など)が書ける程度のレベルです。

mod_perlの超初心者向けの解説本、ウェブサイトがあれば教えてください。
できれば日本語でお願いします。


あと、今は退社された方が書いたらしい、現在稼動中のプログラムのソースを入手したんですが、
ソースの最後に

 exit;

って思いっきり書いてたりするんですが、これって大丈夫なのでしょうか?

0820nobodyさん2008/01/28(月) 12:53:50ID:???
http://multix.jp/html/memo/030526.html#00010801
0821nobodyさん2008/01/28(月) 15:21:58ID:eRROoQGz
ありがとうございます。

これに関して、オーバーライドを利用したコードを書いているとき、
ある関数(この場合はexit)が、どのパッケージに属しているかを調べる方法があればお願いします。
0822nobodyさん2008/01/28(月) 16:14:02ID:Fd8GryNX
ときどき見かけるcodepageというのはどういうものなんでしょうか。
たとえば、TeraTermPro with SSHの設定でcodepageというのがあります。
ほかにもありますがこれを例にとります。
ヘルプやgoogle検索で調べても引っかからないのでここでおたずねします。

locale=japanese codepage=932
だとどうもShift-jisの設定をなんらかの形でやるみたいです(付属ヘルプ)。
locale=japanese codepage=65001
だとutf-8みたいです。
それで、私のマシンはWindowsなので、codepage=932で統一しておけばいいんでしょうか。
ケースバイケースなのでしょうか。
相手マシンがFreeBSDで通信することがあるのですが、その場合は、
設定の漢字受信/送信ともutf-8でokですか??
unixだとeucとも聞きますが、最近はutf-8化したほうがいいようなことも聞きます。
ので、よくわかりません。

もちろん、ソースを何で書くかはケースバイケースなのは知っています。
分からないのは、TeraTermの設定で
漢字受信/送信 と codepage という2つのよく分からない項目がある点です。

TeraTermは有名なので当然スレがあるかと思ったらありませんでした。
それにperlプログラミングでよく登場するので、ここで質問させていただきました
0823nobodyさん2008/01/28(月) 16:22:56ID:???
exitはダメだけどexit(0)なら大丈夫、
実はそう言われてるけど逆で、exit(0)はダメだけどexitなら問題ない、
最近のヤツはどっちでもいい(具体的なバージョンはか書かれてない)、

色々と情報が混ざってて、調べれば調べるほど混乱してきた orz
0824nobodyさん2008/01/28(月) 17:37:21ID:???
動いてんならいいじゃない
0825nobodyさん2008/01/28(月) 18:19:41ID:???
そうします。
0826nobodyさん2008/01/28(月) 18:33:58ID:???
UTF8の文字列で、全角ひらがなが入ってきた場合、全角カタカナに変換しようとしているのですが
思うように行きません。

$name =~ tr/ぁ-ん/ァ-ン/

一度、sjisやらecuやらに変換して、文字コードで置換させないと駄目でしょうか
0827nobodyさん2008/01/28(月) 18:39:31ID:???
UTF8ならむしろ文字コード変換しないほうが置換しやすくないか?
0828nobodyさん2008/01/28(月) 18:55:50ID:???
>>826
そんなことはない。

use utf8してないとかdecodeしてなくて$nameがバイトのままとか
そういうあたりじゃねーの?

use utf8;
binmode STDOUT, ":encoding(utf8)";

foreach (ord('ぁ') .. ord('ん')) {
my $h = my $k = chr($_);
$k =~ tr/ぁ-ん/ァ-ン/;

printf "%x %s %s\n", $_, $h, $k;
}
0829nobodyさん2008/01/28(月) 19:04:20ID:???
>>822
> TeraTermは有名なので当然スレがあるかと思ったらありませんでした。

テラターム
http://pc11.2ch.net/test/read.cgi/linux/1012915309/
0830nobodyさん2008/01/28(月) 19:21:58ID:???
>>829
誘導thx!! いやースレタイ検索で引っかからなかったもんで。

0831nobodyさん2008/01/28(月) 21:13:04ID:???
確かにこりゃ罠だな……
0832nobodyさん2008/01/30(水) 17:37:10ID:irpAKk1D
ActiveperlでローカルPC上に作成したWEBサイトにIE等でアクセスし、
その処理結果をファイルにしてデスクトップ上に出力したいのですが、
デスクトップまでのパスをどう取得すればいいか分かりません。
ログインユーザ毎にデスクトップのパスが変わってしまうので、
そのあたりを上手く解決できる方法があれば知りたいです。
0833nobodyさん2008/01/30(水) 18:10:39ID:???
perlとは関係ないがユーザ毎に環境変数ってのが存在する
0834nobodyさん2008/01/30(水) 18:43:24ID:???
use strict;use warnings;
use Win32::OLE;
my $sh = Win32::OLE->new('WScript.Shell');
print $sh->SpecialFolders("Desktop");


use strict;use warnings;
use Win32 qw/CSIDL_DESKTOP/;
print Win32::GetFolderPath( &CSIDL_DESKTOP );
0835nobodyさん2008/01/30(水) 21:04:32ID:FClDhuIR
require Hoge;
は通るんですが、
no strict 'refs'; require "Hoge";
が通りません。Can't locateとなります。
文字列からrequireするにはどう書いたらよいでしょうか。
0836nobodyさん2008/01/30(水) 21:12:10ID:???
Hogeってのを用意すればいい
0837nobodyさん2008/01/30(水) 21:17:18ID:???
どうもです。
Hogeはあるつもりなんですが、前者と後者は同じものを指してないですか?
0838nobodyさん2008/01/30(水) 21:29:04ID:???
拡張子を省略していたせいだった気がしました。ありがとうございました。
08398322008/01/30(水) 21:59:46ID:???
>>833
システム環境変数とユーザー環境変数ってやつですよね。
ここにあらかじめデスクトップへのパスを設定するという事でしょうか?

>>834
ソースありがとうございます。
実際に実行してみたんですが、CGIとして実行すると
SYSTEM ユーザ名義で実行され、ログインユーザでのパスが取れませんでした。
DOS窓から実行するとバッチリなんですが…。

少し調べた所、WMIで実現できそうな気がしてきたので
そちらを当たってみようと思います。ありがとうございました。
0840nobodyさん2008/01/30(水) 22:29:21ID:???
3年ぶりくらいにPerlを使ってみたのですが、
以前は日本語の検索の時、EUCを使わなくてはいけないとかあったと
思いますが、普通にshift-jisで書いて、パターンマッチも問題なし
だったのですが、今のバージョンのPerlは文字コードとか気にしなくて
良くなりました?それともたまたま文字化けしなかっただけ?
0841nobodyさん2008/01/30(水) 22:53:08ID:???
>>840
これを実行してみたらどうなる?
print "表現";
print '表現';
0842nobodyさん2008/01/30(水) 23:05:02ID:???
>841
だめっすね。
まだjcode.plとか使ってるんですかね。
実は全てunicodeで問題なくなったりしてますか?

日本語のパターンマッチで注意することとかまとめた
いいページ知ってたら教えてください。
0843nobodyさん2008/01/30(水) 23:12:08ID:???
>>842
一部の文字列を使う時だけ注意をして、POSTで受け取った文字列を
jcode.pl 使うという程度でも、Shift-JISでいけることはいける。
ttp://www.shtml.jp/mojibake/sjis_cgi.html
0844nobodyさん2008/01/30(水) 23:19:37ID:???
>843
thxです。しばらく離れていましたが、少し思い出しました。
結局Perlはその間進化していなかったのね。
0845nobodyさん2008/01/30(水) 23:19:46ID:???
クライアント、サーバ共にWindowsで、SQLServerとVB使っている
システムでも記号とか入力しようとすると駄目な場合もあるからな。
シビアに全部に対応とか考えなくても良いのではと思ったり。
0846nobodyさん2008/01/30(水) 23:22:28ID:???
>>844
Perl は 5 が出てから結構経っているはずだよ。
3 年前に触ったのも 5 じゃないかな?
そこまで大きな変化が無いからこそ、という
メリットももあるんだけどね。

次に 6 には、構文とか大きな変化があるらしいから
そっちに期待だなw
0847nobodyさん2008/01/30(水) 23:45:06ID:???
たとえば This is a pen.という入力があって、
「This」にマッチしたら、
htmlの色のタグを付けて<font color>This</font>と置換する場合、
これをやると次に「This is」に色を付けたい場合マッチしなくなる
のですが、上手いやり方あります? 先に「This is」の置換を
する位しか思いつかない。
0848nobodyさん2008/01/31(木) 01:44:59ID:???
検索に使うデータは別に持っておくというのはどうだろうか。

Thisにマッチしたとき、
いきなり This → <tag>This</tag> と変換するのではなく、例えば「1番目の単語にマッチした」という情報だけ保存しておく。
で、最後にまとめて置換する。

Perlの持つ強力な文字列操作が活かされないという欠点はあるが。
0849nobodyさん2008/01/31(木) 07:23:10ID:???
$in_str = "This is a pen.";
$out_str = '<font color="red">' . $in_str . "</font>";
ここで $str に検索対象の文章を入れる。
$str =~ s/$in_str/$out_str/g;
0850nobodyさん2008/01/31(木) 09:05:07ID:???
>849
それ同一箇所を何度も置換する場合でも大丈夫?
0851nobodyさん2008/01/31(木) 09:23:09ID:???
>>850
具体的にどういう場合?
0852nobodyさん2008/01/31(木) 09:59:40ID:???
>849
<tag>This</tag> is a pen.
が$strに入ったら、次にThis isは一致しないでしょ?
0853nobodyさん2008/01/31(木) 10:21:21ID:???
優先度つけて順番にやるしかない
その優先度はあなた次第だもの。
0854nobodyさん2008/01/31(木) 12:45:35ID:???
s/This is|This/REPLACEMENT/gみたいなことしたいんだろうか?
一括してやるなら長い方を先にすればいい
0855nobodyさん2008/01/31(木) 13:03:27ID:???
This is a pen.
  ↓
<tag>This is</tag> a pen.

このあとに、「tag」というフレーズで検索する可能性は否定できない。
いや、細かくマッチ条件つければ別だろうけど。
0856nobodyさん2008/01/31(木) 21:12:55ID:ZyBf2Z6K
配列と文字を引数とする場合の書き方がよく分かりません。できるのでしょうか?
以下のようにやってもだめでした。
&subtest(@arr,$str,@arr2);
function () {
my (@arr,$str,@arr2) = @_;

}
0857nobodyさん2008/01/31(木) 22:22:57ID:???
>>856
(@arr,$str,@arr2)は新しい配列として扱われるので、サブルーチン側では区切りが分からん。
arrとarr2は参照を渡すとか、要素数が分かってるならサブルーチン側で@_をspliceするとかがいいかも
0858nobodyさん2008/02/01(金) 00:10:05ID:???
>845

長い方を先にした場合、
ThisとThis isとis a penがあって、
結論は<font>This is a pen</font>に色を付けたいのだ。

848の方法かなぁ。
ただ、入力テキストが100M位、マッチする検索リストが1万個とかなので、
動かせるか・・・。

Perlよりwordマクロとかの方がいいのかなぁ。
wordなら何度重なって色付けても問題ないし・・・。
0859nobodyさん2008/02/01(金) 00:32:08ID:???
>>856
ヒント:リファレンス
08601/22008/02/01(金) 03:03:29ID:???
>>858
途中まで書いてまじめにやると面倒だという事は分かった。
あとは頑張ってくれ。

#!/usr/bin/perl -w
use strict;
my $str = 'This... This is, This is a pen.';
my @target = ('This', 'This is', 'is a pen');
my $tag_o = '<font color="#ffff00">';
my $tag_c = '</font>';
my $tag_r = qr|</?font[^>]*>|;
my $tag_e = qr/(?:(?!$tag_r).)*/s;
for (@target) {
my $re = join qr/(?:$tag_r)*/o, split /(\s+)/;
$str =~ s/($re)/add_tag($1)/eg;
}
print $str;
08612/22008/02/01(金) 03:04:31ID:???
sub add_tag {
my $substr = $_[0];
if ($substr !~ /$tag_r/o) {
$substr = "$tag_o$substr$tag_c";
} elsif ($substr !~ /\Q$tag_o\E/o) {
$substr =~ s/(\Q$tag_c\E)/$1$tag_o/go;
$substr .= $tag_c;
} elsif ($substr !~ /\Q$tag_c\E/o) {
$substr =~ s/(?=\Q$tag_o\E)/$tag_c/go;
substr($substr, 0, 0) = $tag_o;
} elsif ($substr =~ /^($tag_e)\Q$tag_c\E($tag_e)\Q$tag_o\E($tag_e)\z/o) {
$substr = "$1$2$3";
} elsif ($substr =~ /^($tag_e)\Q$tag_o\E($tag_e)\Q$tag_c\E($tag_e)\z/o) {
$substr = "$tag_o$1$2$3$tag_c";
} else {
die $substr; # ココを頑張ってくれ。
}
$substr =~ s/\Q$tag_c$tag_o\E//go;
$substr;
}
0862nobodyさん2008/02/01(金) 04:53:15ID:hS8kNEG7
if(A1 < B1 && A2 < B2 && A3 < B3 && A3 < B3 && A4 < B4)
{
$page_dsp .= <<"EOM";
<tr>
<td colspan="2" >
<form action="????.cgi" method="post" onSubmit="return send_check()">
<select name=ku class=slc>
<option value="no">
EOM

#この中の条件式(ifの条件付オプション)は省略
{$page_dsp .= "<option value=\"1\">\n"; }

$page_dsp .= <<"EOM";
</select>
<input type=hidden name=back value="no">
<input type=hidden name=id value="$kid">
<input type=hidden name=pass value="$kpass">
<input type=hidden name=mode value="ku">
<input type=submit class=btn value="オン">
</td></form></tr>
EOM
}
else{$page_dsp .= "<tr><td colspan=2 align=center>終わり</td></tr>\n";
}

以上のように、最初の5つの条件
(各々全部の、左の数値が右の数値と同じかそれ以上の時にセレクトを非表示)
で動かしたいのですけど、5つの条件中3つの条件しか満たしてないのに非表示に
なります。
条件が5つ揃ってから非表示にするにはどうすればいいですか?
ご教授お願いします。
0863nobodyさん2008/02/01(金) 05:30:16ID:???
落ち着け
0864nobodyさん2008/02/01(金) 07:45:40ID:???
>>862
それはない。他にミスがあるはず。
0865nobodyさん2008/02/01(金) 16:52:45ID:hS8kNEG7
命令が作動しなかったのは今回は説明で省略した命令(ifの条件付オプション)と
最初の5つの命令との相性が悪かったからかもしれませんね。

省略した部分内には、最初の5つの命令を一個ずつ(計5個)指定して、条件が満たされるごとに
オプション項目が一つずつ消えていき、全部満たしたら最初の5つの命令でセレクト
ごと非表示にするつもりでいたんです。
0866nobodyさん2008/02/01(金) 16:54:10ID:???
相性とな?
0867nobodyさん2008/02/01(金) 16:55:34ID:???
バルクメモリさしたら動かなかった
相性が悪かったということだな
0868nobodyさん2008/02/01(金) 19:03:10ID:???
>>862
まずは、配列の勉強頑張れ。
0869nobodyさん2008/02/02(土) 05:09:34ID:???
修士出たら就職を考えている現在3回生の情報の学生でperlが一番すきですが、
今年に入ってからいろいろと求人情報を集めてみたところperlの仕事少ないですね
噂には聞いてましたが、僕は何が何でもperlを仕事にしたいのです
まあそれはおいといて、perlを仕事としてみたときどんな感じですかね?
皆さま先輩方の多くはperlを仕事としていらっしゃると思ったので、
是非とも業務内容、他言語と比べたときの待遇、仕事のやりがいなどなど、
ポジティブな意見(勧め)もネガティブな意見(愚痴)も生の声としてお聞かせ願えればと存じます。
0870 ◆TWARamEjuA 2008/02/02(土) 07:42:12ID:???
perlを仕事にするところはほとんど無いと断言できるです。
仕事の中でperlを使うことはたくさんの現場であるです。

おいらは今、製造業の中でperlを利用しています。
昨今の機器はLANでデータを採取できたりします。
それを高ぁーいWindows専用のアプリでデータ加工することなく、unix(含むlinux)なサーバにてcronでデータ採取・計算・加工してDB(DB_Fileで充分)に登録。(もちろんperlで)
そいつを拾ってエクセルに貼り付けるだけ(もしくはSpreadsheet::Writeで書き込むも良し)でもデータの共有が出来たりします。
記録計のようなグラフを作るにしてもGDだけで充分。

部品の計測をするのでも、今時のマイクロメータは数値をUSBで送ってくれる物があったりします。(USBテンキーみたいな出力をしたりする)
それをExcelにちまちま放り込むよりか、単純テキスト(csvでも良いけれども)で保存して、perlを使っていろんな形や計算をさせることも出来たりします。

以前勤めていたWEB屋(主にデザインやHTML書き)でも、Excelのデータを1件1HTMLファイルに変換する作業がありました。
(その求人に応募したのだ(照))
3000件近いデータを変換すると云うことで、2-3か月近い工程を組まれていたことがありました。
どうやら手動で書き換え作業をと目論んでいたようです。
けれどもデータ構造と特性を見極めるのに2日、それを変換するperlスクリプトを2日、変換作業たったの10秒って事がありました。
その当時、その部署の長は目を丸くしていましたです。
まだまだperl=CGIっていう感覚で居られたからです。
その後、ちまちまと元データ(Excel)の修正が入ってきても数秒で修正完了。
デザイン変更があってもテンプレートを書き換えるだけでおしまい。
あまった2-3か月の期間、他の仕事を色々とこなしていました。

ようは仕事に使う道具の1つとしてperlというのを持っていればどんな業種にでも使えるんじゃないかな。

そんなこともあって製造業の現場であるにもかかわらず、おいらのところにだけは使い慣れたMacOSX(iMacG5)なんてのを無理を聴いて貰って備え付けましたですです♪
0871nobodyさん2008/02/02(土) 11:18:13ID:???
perlを仕事で使うなら修士はオーバースペック。
高卒で十分な土方に好き好んで修士雇う経営者がいるのか?
0872nobodyさん2008/02/02(土) 11:21:37ID:???
修士雇う経営者がいないなら高卒って言えばいいだけのこと
そんなこともわからないのか?
0873nobodyさん2008/02/02(土) 12:03:51ID:???
perl土方は頭悪いな。
高卒で足りる仕事には高卒の賃金しか払わないという事だよ。
0874nobodyさん2008/02/02(土) 13:18:25ID:???
>>872
それ、学歴詐称にあたるんじゃないの?
ちょっと前、問題になったでしょ。
0875nobodyさん2008/02/02(土) 13:33:00ID:???
perl土方は新聞を読まない。
0876nobodyさん2008/02/02(土) 13:46:46ID:???
WEB系いきゃいいんじゃないの?
個人的にはなにがなんでもPerlとかいってるPerl使いは嫌だけど
0877nobodyさん2008/02/02(土) 14:25:02ID:???
Perlがちょっとくらいできても仕事ねえぜ、と修士出の自宅警備員が言ってみる。

>>874
それ公務員ね。試験区分に対象の学歴があってそれに沿うことが望ましいとされてるから。

というかこれマ板のネタだろ。
0878perl好き情報3回生(本物) ◆qqt5.0NxB6 2008/02/02(土) 14:40:08ID:???
ちょっと失礼します。
僕はWebprog板に>>869と同一内容の書き込みをした者です。
>>869は偽者であって僕がマルチポストをしたのではないことを明言しておきます。
トリップをつけたので本物しか相手をしないようお願いいたします。
迷惑をおかけして申し訳ありません。
お騒がせしました。
0879nobodyさん2008/02/02(土) 15:45:41ID:???
質問です。XML::RSSを使って、外部から取得したRSSを加工してHTML(euc-jp)に出力しているのですが、
一部の記号(それも機種依存文字含む)が文字化けします。

− → \x{ff0d}
o → \x{339c}

機種依存文字に関しては、根本的に対応することに意味があるのか疑問ですが、せめてwindowsな環境で
文字化けしないようにしたいのです。どうしたらいいでしょうか?

あんまし分かっていませんが、重要そうな部分だけ。
use XML::RSS;
use LWP::Simple;
use encoding 'euc-jp', STDOUT => 'euc-jp';
use open IN => ":encoding(euc-jp)";
use open OUT => ":encoding(euc-jp)";
binmode OUT => ":encoding(euc-jp)";

my $rss = new XML::RSS;
$rss->parsefile($site_file);
my $item_list = $rss->{'items'};
$item = ${$item_list}[0];
my $desc = $item->{'description'};

#一応対策っぽいことをやって一部の記号には対応できた
$desc =~ tr/\x{005C}\x{00A5}\x{2014}\x{203E}\x{2225}\x{FF0D}\x{FF5E}\x{FFE0}\x{FFE1}\x{FFE2}/
\x{FF3C}\x{FFE5}\x{2015}\x{FFE3}\x{2016}\x{2212}\x{301C}\x{00A2}\x{00A3}\x{00AC}/;
08808792008/02/02(土) 15:48:16ID:???
ちなみに、
〜 → \x{FF5E} に化ける問題は、一番下に書いた置換で解決したのですが、\x{FF0D}は何故かそのまま
文字化けしたままです…
08818792008/02/02(土) 15:55:11ID:???
すいません、>>880は単純ミスでした、取り消します。
08828792008/02/02(土) 15:57:31ID:???
忘れていました。エラーメッセージが出ます。
hogehoge.cgi: "\x{ff0d}" does not map to euc-jp at hogehoge.cgi line 183.
0883nobodyさん2008/02/03(日) 01:13:34ID:???
求人ってほとんどPHPだよなぁ。プラスDreamWeaverの使用をセットで。
perl使ってるところはライブドアとかはてなとか高レベルに使いこなしてるところばっかり。
初〜中級のところは全部PHPになってしまった。
0884nobodyさん2008/02/03(日) 03:35:42ID:???
モバイルならPerlも使ってるとこそこそこあるんでないか
0885nobodyさん2008/02/03(日) 11:14:58ID:???
正規表現とか以外なら、構文同じなんだからすぐに移植できるだろ。
あとはPEARとかを使いこなせればいいわけだから、Perlの基礎がある
のなら、1週間程度で、出来るといえるんでね?
Perlで作ったコードをPHPに移植して、これ、私が作りました、みたいな。
0886nobodyさん2008/02/03(日) 12:57:34ID:???
PEARってperlでいうCGI.pmみたいなもん?
0887質問2008/02/03(日) 13:04:56ID:34/ZwImQ
このスレでよいかわかりませんが・・・

項目を選択しボタンをクリックすると、あるページには選択した項目の画像ファイルを表示し、
もうひとつのページにはその選択した項目を表示させたいのですがどうしたらよいでしょうか?

最初のページには
<form action="A.cgi" target="表示させたいページ">
を埋め込んでいるのですが、当たり前ですがこれだと"表示させたいページ"にしか表示できません。

A.cgiのなかでさらにこの部分だけは他のページへ表示させるとかできませんか?
0888nobodyさん2008/02/03(日) 14:09:58ID:???
>>886
CPANじゃね?
0889nobodyさん2008/02/03(日) 14:12:18ID:???
>>887
それは、Perlの話じゃなくて、htmlの話じゃないの?
フレームタグを使って区切るか、テーブルタグを使って全部を表示させる方法がある。
板違いなので、これ以上の質問はしないように。
0890nobodyさん2008/02/04(月) 03:22:50ID:???
>>879
メッセージのとおりで、変換表に該当するものがないんでしょ。
euc-jpMSとか使わないといけないんじゃないの?
0891nobodyさん2008/02/07(木) 12:55:00ID:???
perl 5.8.5
CentOS 5.1

「out of memory」のときのエラーハンドリングの方法を教えてください。
dieのときは
$::SIG{__DIE__} = sub {〜〜〜};
でいけることまではわかったのですが
「out of memory」がハンドリングできないのです。
よろしくおねがいします
0892nobodyさん2008/02/07(木) 15:49:01ID:???
OSの制限だから、ハンドリング考えるよりコード見直す。
それができないのなら、OSの制限上げる。メモリ積む。

0893nobodyさん2008/02/07(木) 19:10:28ID:???
perl5.8

my @value=(0,1,3,8);  #任意のkey
my @hoge=('hoge1','hoge2','hoge3'....);  #表示用配列
my $disp;
foreach (@value)
{
 $disp .= ',' if $disp;
 $disp .= $hoge[$_];
}

という処理をしているんですが、これってJOINでできませんか?
map使ってもこれより簡単に書けないですよね?

0894nobodyさん2008/02/07(木) 19:28:15ID:???
こういうこと?

my @value = (0, 1, 3, 8);
my @hoge = ('hoge1', 'hoge2', 'hoge3', 'hoge4', 'hoge5', 'hoge6', 'hoge7', 'hoge8', 'hoge9');

print join ',', @hoge[@value];
0895nobodyさん2008/02/07(木) 20:34:51ID:???
>>894
おお。ありがとうございます。コードがすっきりします^^
0896nobodyさん2008/02/08(金) 09:47:17ID:???
すいません。もう一点。

my $value = "0,1,3,8";
my @hoge = ('hoge1', 'hoge2', 'hoge3', 'hoge4', 'hoge5', 'hoge6', 'hoge7', 'hoge8', 'hoge9');

これは
join ',',@hoge[sprit',',$value];

ですよね?
splitしてjoinして勿体無い感じ。。
0897nobodyさん2008/02/08(金) 10:08:10ID:???
splitとspliceは別物
0898nobodyさん2008/02/09(土) 18:24:58ID:???
valueがスカラーで入れなきゃ一回joinで済む話。
0899nobodyさん2008/02/11(月) 09:15:09ID:7AZat8M4
ファイルの最後の行番号を取得したいんですが、
my $endline = $. while (<FH>);
としてとりえず取得できたんですが、
その後
seek FH,0,0;
として、また1行目から別の処理したいんですがうまくできません。
seekの戻り値をprintしてみると1を返してますが、先頭には戻ってないようです。
windows環境なのが原因でしょうか?
0900nobodyさん2008/02/11(月) 09:31:45ID:???
my $endlineだと局所化されて外側で取得できなくない?
seekしても$.はリセットされないから先頭に巻き戻したら$.= undefとかすればいい
0901nobodyさん2008/02/11(月) 11:26:23ID:???
>>900さんレスありがとうございます。

>局所化
あ、ほんとだ。ミスってました。

undef $.;
reset $.;
それぞれ試してみましたが変化ありませんでした。

その後に
while (<FH>) {
  if ($. == $bigin .. $. == $end) {
といった処理をしたいんですが、どうもうまくいきません。
0902nobodyさん2008/02/11(月) 11:49:03ID:???
$. = 0;としたらうまくいきました。
ありがとうございました。
0903nobodyさん2008/02/12(火) 21:28:15ID:???
文字コードについて質問します。

utf-8から7bitJISへの変換なのですが、(メール送信のため)

Encode.pmもJcode.pmもローマ数字をJISにしてくれません。
Encodeでは「\x{2160}」と変換不可の場合のユニコード値に変換され、
Jcodeでは「?」になります

T(ローマ数字1)
\xE2\x85\xA0 utf8 → \x1B\x24\x42\x2D\x35 JIS

と手動で変換してやれば良いのですが、escシーケンスの処理がどうしたものかと・・・
0904nobodyさん2008/02/12(火) 23:23:01ID:???
use lib '../lib';
のように相対パスを使うと出来るけど
use lib '/i/cgi-bin/lib';
のように絶対パスを使うと動かなくなります
サーバーの設定によって絶対パスだと読み込めなかったりするんでしょうか
普通のリンクだと絶対パスでリンクできます
0905nobodyさん2008/02/12(火) 23:31:03ID:???
>>904
本当にそれが絶対パスであれば使えると思うのだが、おそらく違うんだと思う。
0906nobodyさん2008/02/13(水) 02:37:13ID:???
>>904
perlから使う絶対パスはwebサイト上の絶対パスじゃないよ。
・ http鯖がルートとして扱うディレクトリからの絶対パス
・ 鯖のOSの絶対パス
の違いを理解しような。
0907nobodyさん2008/02/13(水) 02:39:50ID:???
>>903
JISとかISO-2022-JPにはローマ数字はないから。

Encode::EUCJPMS - Microsoft Compatible Encodings for Japanese - search.cpan.org
http://search.cpan.org/~naruse/Encode-EUCJPMS-0.07/EUCJPMS.pm

あたりをいれて、cp50220 とか cp50221 で変換する。
09089062008/02/13(水) 10:48:35ID:???
有難うございます
調べてみます
09099042008/02/13(水) 10:49:51ID:???
>>906でした
0910nobodyさん2008/02/13(水) 12:25:12ID:???
>>907
ありがとうございます
Encode::EUCJPMSモジュールをいれて、

use Encode::EUCJPMS;
use Encode;
my $cp50220_str = Encode::from_to( $utf8_str , "UTF8" , "CP50220" );

で良いのでしょうか?
実はフォーム入力はShiftJISでして、CP932からutf-8に一旦エンコードしています。
これで問題はないでしょうか?
0911nobodyさん2008/02/14(木) 02:49:22ID:???
>>910
UTF-8に変換するときにエラーになってなきゃ大丈夫なんじゃない?
〜 あたりが微妙ではあるけど。
0912nobodyさん2008/02/14(木) 10:56:12ID:AY3pAm1W
教えてください。サーバではなくて、自分のPCにPerlをインストールしています。

#!/usr/bin/perl

use strict;
print "IEを起動します...\n";
system("C:/Program Files/Internet Explorer/iexplore.exe");
exit;

__END__

上のようにすると、IEは起動するのですが、コマンドプロンプトは残ったままで
タスクマネージャーにも perl.exetが残っています。(残るというか待ってるようですが…)
IEを起動したあとはPerlも終了して欲しくて検索したらexecというのがあったので
exec("C:/Program Files/Internet Explorer/iexplore.exe");としたら起動しませんでした。
IE起動後速やかにPerlを終了させるにはどうすれば良いでしょうか。
PerlはActivePerl 5.8.8をインストールしました。

もう一つは、my $url = 'http://www.google.co.jp/'; とした時に
IEにこの$urlを開かせるにはどうすればよいのでしょうか。よろしくお願いします。
レス数が900を超えています。1000を超えると表示できなくなるよ。