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

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

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

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

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

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

過去ログやお勧めサイトは >>2-10
0160nobodyさん04/10/15 20:46:48ID:M3+xPf5C
クーロンでperlで作成したブログラムを起動したいのですが、
どうしたらいいのでしょうか? 普通はブラウザのボタンから起動されると
思うのですが、ある時間が来ると自動で動かしたいのです。よろしくお願いします。
0161nobodyさん04/10/15 21:05:08ID:???
>>160
好きなようにセットしろよ
使い方分からないならググれば一発だろ

ついでにスレ違いな
0162nobodyさん04/10/15 23:13:44ID:???
>>159
下の下の方(flock(2)やfcntl(2)の下のほう)ではセマフォつかってるよ。多分。
それでも↓は意味不明だけど。
> >flockはセマフォでの唯一のロック獲得争いにすぎない。
0163nobodyさん04/10/16 02:52:59ID:???
1000ステップのperlスクリプトと、200ステップのperlスクリプト、
どちらも実行ステップは100だとしても、やはり後者の方がサーバに対する
負荷は少ないのだろうか。
0164nobodyさん04/10/16 03:14:53ID:???
それはもちろん自分で負荷を計測してから聞いt(
0165nobodyさん04/10/16 11:06:14ID:???
>>163
1ステップだ。↓を実行してみな
while(1) { fork;}
0166nobodyさん04/10/16 12:33:14ID:???
前のカキコした香具師とは関係ないが便乗して

計測の方法が分かりません。。。
ググったらWin鯖は無理と書いてあったんですが、Win鯖で出来るソフトありませんか?
0167nobodyさん04/10/16 20:03:43ID:???
>>166
話が見えない。
ああ、誤爆か…
0168nobodyさん04/10/16 21:45:26ID:???
perlのスクリプトでflockしたファイルに対して、PHPのスクリプトでflockしたら(もしくはその逆も)、
ちゃんと排他は行われるでしょうか?
0169nobodyさん04/10/16 23:05:32ID:???
CGIカウンターを設置したいので、perlを勉強しています。参考書を見て↓のを作成したのですが。

# カウントファイルの読み込み
open(FILE, "+<./count.dat") or die("エラー:カウントファイルが開けません");
eval{ flock(FILE, 2);};
$count = <FILE>;

# カウントファイルの書き込み
seek(FILE, 0, 0);
print FILE ++$count;
close(FILE);

# サーバ出力
print <<END;
Content-type: text/html
中略)
END

Apachでエラーログをみると Premature end of script headers と出てしまいます。
どの部分を訂正すればよいのでしょうか?ご存知の方、ご指導お願いします。
0170nobodyさん04/10/16 23:13:07ID:???
print <<END;
Content-type: text/html
中略)
0171nobodyさん04/10/17 01:00:06ID:???
open(FILE, "+<./count.dat") or die("エラー:カウントファイルが開けません");

このdieの部分はどこに出力されるのですか?ログとか?
0172nobodyさん04/10/17 01:03:49ID:???
標準エラー出力 (STDERR)
0173nobodyさん04/10/17 01:38:29ID:sz1VkLQM
配列のリファレンスをforeachで処理するにはどうしたらいいですか?
$dbh->{NAME}
が配列へのリファレンスだとして、
$dbh->{NAME}->[0]ではアクセスできる状態です。

foreach($dbh->{NAME})
{
 print;
}

foreach($$dbh->{NAME})
{
 print;
}

等とやってもうまくいきませんでした。
0174nobodyさん04/10/17 01:39:32ID:???
@{$dbh->{NAME}}
0175nobodyさん04/10/17 01:41:51ID:???
>>174
うまくいきました。ありがとうございました。
0176nobodyさん04/10/17 10:10:48ID:???
>170
中略)の部分は

<html>
<head><title>perlアクセスカウンター</title></head>
<body>
<P>あなたは$count番目の訪問者です。</p>
</body>
</html>
END

Premature end of script headers 
エラー:カウントファイルが開けません のエラーログが出ます。

open or die の文がおかしいのかと思ったのですが、良くわかりませんでした。よろしくお願いします。
0177nobodyさん04/10/17 10:20:37ID:???
初心者なんで間違ってるかもしれんが、
Content-type:text/htmlの後に改行が2つ(\n\n)必要だった希ガス
0178nobodyさん04/10/17 10:21:41ID:???
openに失敗してるんだろ
0179nobodyさん04/10/17 13:45:28ID:???
>>168
双方が協調して動作するためには、同じ方式のロックメカニズムを使用する必要があるが、
perlのflockはOSが提供しているflockとは限らない、PHPは知らない。
プラットフォームインディペンデントに作るなら、昔ながらのロックファイル方式か、
OSの提供する排他制御のプリミティブを直接呼び出すのがいいだろう。
0180nobodyさん04/10/17 22:56:51ID:???
二次配列等は使えますか?
0181nobodyさん04/10/17 23:20:50ID:???
>>180
ここに書く前にperlのdocument群を読んで欲しいかも。。。
0182nobodyさん04/10/18 01:01:57ID:???
>>180
2年前に同じ質問したことあるな・・
018318004/10/18 01:23:59ID:???
これは失礼いたしました…
0184nobodyさん04/10/18 04:17:33ID:???
myについて質問させて下さい。

sub a
{
my $daskin;
$daskin="かきくけこ";
&b;

&c;
}

sub b
{
my $daskin;
$daskin="あいうえお";
}

sub c
{
print "$daskin";
}

こういったスクリプトを書いた時、&a、&b、の中で$daskinは局所化されているので
&c内のprintの表示が空になることを期待していたのですが、「あいうえお」と表示されてしまいます。
変な質問ですが、みなさんにとっては納得のいく結果でしょうか?
私の局所化処理が間違っている場合、教えて下さいm(__)m
0185nobodyさん04/10/18 05:07:01ID:???
申し訳ありません。
自己解決いたしました。
上記のスクリプト、ここへの転載も含め、私の記述が間違っていたようです。
0186nobodyさん04/10/18 13:44:39ID:???
print <<"EOF";
メッセージ:
$message
ここまで
EOF

こういう記述があるとして、$messageにはランダムにメッセージが入るのですが、
ここに何も文字列が入らなかった場合、HTMLで見ると

メッセージ:

ここまで

このように、間が空行になってしまいます。
ここを上手く詰められるような記述方法は無いでしょうか。
0187nobodyさん04/10/18 13:54:10ID:???
print <<"EOF";
メッセージ:
$messageここまで
EOF
0188nobodyさん04/10/18 16:35:34ID:???
>>179
ありがとうございます。
ロックファイルでやる事にします。
0189nobodyさん04/10/18 18:54:11ID:???
0410181738 という形の時間(year,mon,day...)をcookieの期限のために

sprintf("%s, %02d-%s-%4d %02d:%02d:%02d GMT",
$day,$mday,$mon,$year+1900,$hour,$min,$sec);

というような形にしたいのですが、曜日だけが変換のネックと
なっています。どのようにこの日の曜日を計算させればよいの
でしょうか?


0190nobodyさん04/10/18 19:32:32ID:???
>>189
ttp://www.din.or.jp/~ohzaki/perl.htm#Date2WDay
0191nobodyさん04/10/18 21:38:36ID:???
1.http://aaa.a.a/a.cgi

2.http://bbb.b.b/b/cgi

1のプログラム上から引数を渡して2のプログラムを動作させて
結果を1のプログラムに返すようなことって可能でしょうか?

2のサーバーのローカルにあるデータベースからデータを取得して
1のサーバーのローカルにあるデータベースにデータを保存したいと
おもっております。 言語はperl使用です。
0192nobodyさん04/10/18 21:42:53ID:???
>>191
LWPとか
さんざん外出
0193nobodyさん04/10/19 10:09:36ID:???
>>192
何スレも前で既出のもんとかを既出の一言で片付けられたってわかるわけねーだろアフォ
どうせ本当に既出かどうかの確認もしてねぇんだろ?(pp
ん?何スレ目で話題が出たか言えるか?無理だろうなぁ日本語読めてないっぽいもんなぁ(・∀・)ニヨニヨ
0194nobodyさん04/10/19 10:22:08ID:???
>>193
前スレで何回もでてるよ。確認もしてないのはお前だ。
0195nobodyさん04/10/19 10:25:54ID:???
>>194
いや、どう見ても釣りだろw
0196nobodyさん04/10/19 14:27:41ID:IcRPasE8
LWPで何百何千もの html をネットから落としてきて解析するプログラム書いてるんですけど
request() とrequest()の間ってやっぱsleepとか入れて間を開けた方がいいのでしょうか?
具体的には ヤフーの株価データなんですけど
0197nobodyさん04/10/19 14:35:05ID:???
>>196
相手次第
0198nobodyさん04/10/19 17:42:02ID:6g0jZqZR
日本一Perlが凄い人ってKENTさんですか?
0199nobodyさん04/10/19 17:45:10ID:???
もちろんそうですよ。
0200nobodyさん04/10/19 19:19:06ID:???
CGIレスQって、・・・・なコーディングがしばしば。
0201nobodyさん04/10/19 20:44:07ID:AGmXypRw
自宅サーバ板か迷いましたがprogエキスパートの方のほうが確実。
現在、ADSLですが、DDNSは使っていないので、固定Webアドレスが保証できない状態です。
ADSLモデムのルーター機能を通していますので、当然ルーターにグローバルIPが振られてます。
では、プライベートIP上のCGI実行Progでこのルーターのグローバル
IPを得ることはできます?
あるperlのCGI実行スクリプトがWebサーバー上のフォルダへのフルパス(http://〜)
を要求しているので、グローバルIPが固定でない場合ですから、その都度prog的にIPを取得すれば使えるのでお願いします。
win me
AN HTTPD
ActivePerl5.8.4
です。
0202nobodyさん04/10/19 20:57:26ID:???
ベタだが、そのルータの設定画面からひろっちゃえば?
ページの取得にはLWP使用。
0203nobodyさん04/10/19 21:25:04ID:???
同じ環境に設定したサーバーにperlで書いたCGIをいれて動かしているのですが
片方ではcommon.plというところでとまってしまいます
片方ではすんなり動きます
おそらく何か重要な部分を設定ミスしてると思うのですが
わかる範囲でチェックをしたつもりなのですが
1から重要な場所をチェックできるようなサイトをどなたかしりませんか?
もしくは直感的にどこが悪いか指摘していただいても結構ですので
よろしくお願いいたします。
0204nobodyさん04/10/19 21:36:22ID:???
020520104/10/19 22:15:51ID:???
>> 202
ありがとうございます。
ルーター設定ページを読み込んで、読み取る方法も確かにそれもありですね
ベタですね。確かに^^
おそらくActivePerlなので、Win用ActiveXコンポーネント(dllなど)が利用できるので
できますよね。WIN32APIも呼べるはずですが、…そのサンプルを今探しております。
P…面倒だからやはりDDNSか固定IP…
いやがんばります。できたら報告致します・
0206nobodyさん04/10/19 23:13:46ID:???
REMOTE_ADDR表示するCGIをインターネット上のどっかにおけばいいじゃん。
0207nobodyさん04/10/19 23:56:47ID:???
>>205
DDNSの方が断然楽そうですなぁ。。。
0208nobodyさん04/10/20 04:50:52ID:aP/RN7ic
>>203
それだけじゃわかんない。
0209nobodyさん04/10/20 10:36:58ID:???
rename関数を使ったファイルロックを考えてます。

for($i=2;$i>0;$i--){
if (rename("file.unlock","file.lock")) {last;}
}
if($i<0){
die "Failed file lock";
}
処理
rename("file.lock","file.unlock");
これに「異常終了しファイルロックが1分以上かかっていたら修正する」という処理を入れたいんですが、どんな方法がありますか。
0210nobodyさん04/10/20 10:41:01ID:???
for文間違ってました
条件が $i>=0 です。
0211nobodyさん04/10/20 11:05:53ID:???
>>209-210
http://www.din.or.jp/~ohzaki/perl.htm#File_Lock
http://pc5.2ch.net/test/read.cgi/php/1097158988/
0212203です04/10/20 11:51:17ID:???
>>208さん
現在mein.cgiというのを動かしているのですが
# CGI 初期設定のインポート
require"../config/default.cfg";
# 変換ライブラリのインポート
require"../common/jcode.pl";
# CGI共通ライブラリのインポート
require"../common/common.pl";
という順番でrequireしていっています
片方では問題なくcommon.plはとおるのですが、片方では
さばのログを読む限りではcommon.plを読み込んでいる最中に
500エラーとなってとまってしまっています。
ちなみにエラーで止まる部分は

この部分→use Date::Calc qw(Delta_DHMS);
my($days, $hours, $min, $sec) = Delta_DHMS($young_year, $young_mon, $young_day, $young_hour, $young_min, $young_sec,
$old_year, $old_mon, $old_day, $old_hour, $old_min, $old_sec);
です。
0213nobodyさん04/10/20 12:12:49ID:???
お前の勝手な解釈による抜粋よりエラーメッセージそのまま
貼った方がいいと思うけどな...
0214203です04/10/20 12:29:46ID:???
>>213さん
BEGIN failde--compilation aborted at common.pl line108
です
0215nobodyさん04/10/20 12:31:34ID:???
それだけじゃないだろ
0216nobodyさん04/10/20 12:36:07ID:???
まず、mainのスペルミスを直してくれないか。
0217nobodyさん04/10/20 13:28:26ID:???
>211
ありがとうございました
0218nobodyさん04/10/20 13:40:35ID:???
オリゴ糖ございました
0219203です04/10/20 13:43:29ID:???
すみません事故解決しました
Date::Calc
のモジュールが入っていませんでした
どうもお騒がせしました
0220nobodyさん04/10/20 14:01:44ID:???
>>214
事故解決したようだが、注意しとく。

まずひとつめ。「BEGIN failde」なんてなってるところからして
コピペじゃなくて手打ちしただろ? 手打ちは間違えて混乱のもと
になるのでこういうときはできる限りコピペするのが基本。どう
してもできないときはしょうがないが、鯖のログなら普通コピペ
できるはずだ。

またuseしてるモジュールがないときは、エラーメッセージは

Can't locate ナントカ.pm in @INC (@INC contains: (中略)) at ほげほげ line XX.
BEGIN failed--compilation aborted at ほげほげ line XX.

って2行でる。勝手に1行目削られるとナントカ.pmがないっていう
いちばん肝心な情報がわからなくなるわけだ。だからちゃんとした
アドバイスを受けたければエラーメッセージをそのまま貼れって
いわれるのよ。

次になんか質問するときは気をつけよう。
0221nobodyさん04/10/20 14:42:43ID:???
質問です。
ファイル名にマルチバイト文字が使われているファイルがサーバーにあるとして、
そのファイルに直接アクセスしようとしても404になり、
マルチバイト文字の部分だけをURLエンコードすると正常にアクセスできます。

検索CGIを作っていまして、ファイル名にマルチバイト文字がある場合、
URLエンコードを行なってから検索結果画面を出そうと思っています。
例えば、このCGIからマルチバイト文字をファイル名に使ったファイルへのパスが
../data/俺俺.txt
だとします。
この場合、../の部分を絶対パスに置き換えてから検索結果に出力しているのですが、
http://www.domain.com/data/俺俺.txt
の「俺俺」の部分だけをURLエンコードする方法をご存知の方はいないでしょうか。
Perlメモにて全角文字の有無を検出する方法はわかったのですが、
全角文字の部分だけを変換して変数に保存したいのです。
0222nobodyさん04/10/20 14:48:18ID:???
>>221
$path =~ s/(全角文字列にマッチする正規表現)/URLエンコードする関数($1)/ge;

とかでいいんじゃないの?
0223nobodyさん04/10/20 15:03:45ID:???
use Encode が使えると楽だが、perl5.005 あたりだと文字コードによってはいろいろ厄介かも
022422104/10/20 15:18:11ID:???
レスありがとうございます。また、使用Perlは5.6.1です。
出力されるページ及びスクリプト自体はSJISなので、
EUC変換を行なってから下記のコードを追加しました。

# Perlメモの正規表現より「ASCII以外」の文字列がある場合
if ($path =~ /[\x8E\xA1-\xFE]/) {

 # 「ASCII以外」の文字列をエンコードする
 $path =~ s/([\x8E\xA1-\xFE])/'%'.unpack("H2", $1)/eg;

}

とりあえずはこの方法で解決できそうです。
即レス感謝です。
0225nobodyさん04/10/20 15:22:06ID:???
>>224
ファイルシステム上のファイル名がSJIS(cp932)だとその方法は使えんが、大丈夫だろうな?
022622104/10/20 16:05:39ID:???
ローカルでのテストでは動くようですが、鯖に上げても動かなかったです。
ちなみにローカルでのテスト環境は、「Win2000Pro ActivePerl5.6.1 AN HTTP Daemon 1.42k」です。

HTMLの読み物として「リンクの方法.txt」というファイルが実際にありまして、
とりあえずそれを検索する事でテストしています。
「リンクの方法」はSJISですと「%83%8A%83%93%83%4E%82%CC%95%FB%96%40」、
EUCですと「%A5%EA%A5%F3%A5%AF%A4%CE%CA%FD%CB%A1」となるようです。
一部省略してますが、該当部分のソースを下に書かせていただきます。

$temp_euc = $temp;              # $tempはsjisで、ファイル名だけが入ってます
&jcode::convert (\$temp_euc, "euc");    # $tempをEUCにした$temp_eucを用意
if ($temp_euc =~ /[\x8E\xA1-\xFE]/) {  # Perlメモの正規表現より「ASCII以外」の文字列がある場合
 $temp_euc =~ s/([\x8E\xA1-\xFE])/'%'.unpack("H2", $1)/eg;
}
print <<"HTML";
<A href="$absolute_dir\/$temp_euc">$temp</A> # 絶対パスとファイル名を結合したパスへとリンク
HTML

この方法ですと、>>224氏が言ったように、
<A href="http://www.domail.com/%A5%EA%A5%F3%A5%AF%A4%CE%CA%FD%CB%A1.txt">リンクの方法.txt</A>
となり、<A>タグ内のリンク先のファイル名がEUCとなって、ファイルシステム上のファイル名の関係で使えませんでした。
もう少しやり方を模索してみます。
022722104/10/20 16:10:55ID:???
アンカーをミスりますた。>>225氏が言ったように、でお願いします。

要するに、マルチバイト文字だけをURLエンコードしたいが、
マルチバイト文字を正確に検出するにはEUC形式である必要がある。
しかし、そのままEUCをURLエンコードしてもファイルシステムの都合上使えないため、
マルチバイト文字に該当する部分だけをSJISでURLエンコードができれば、ということです。
0228nobodyさん04/10/20 16:14:20ID:???
>>221
EUCで取り出したのをSJISに変換してからエンコードすりゃいいだけじゃない?
022946004/10/20 17:03:41ID:???
perlでAが真且つBが真の時ってのを組みたいんだけど、その時は
if ( A ){ if ( B ){ 〜 }}か
if ( A , B ){ 〜 }
で良いかな?
0230nobodyさん04/10/20 17:08:37ID:???
if (A && B) { 〜 } じゃ不満なのか?
0231nobodyさん04/10/20 17:08:54ID:???
&&
0232nobodyさん04/10/20 17:08:57ID:???
誰か>>460に答えてやれよ
023323104/10/20 17:09:17ID:???
かぶった
0234nobodyさん04/10/20 17:14:10ID:???
>>229 = >>232みたいなヤツは放置しよう。
0235nobodyさん04/10/20 17:17:40ID:???
>>232は皮肉で言ってるんだろ。>>229の名前欄が前書き込んだまま
023622104/10/20 17:24:04ID:???
>>228
申し訳ないですが、もう少し方法を具体的に教えていただけないでしょうか。
「EUCで取り出した」とはどの部分を指すのでしょうか。
$temp_euc =~ s/([\x8E\xA1-\xFE])/'%'.unpack("H2", $1)/eg;
のように、一括で変換を行なうわけではないということですか?
0237nobodyさん04/10/20 17:28:45ID:???
>>236
その例でいくと

unpack("H2",$1)

のところを

unpack("H2",eucをsjisに変換する関数($1))

にすればいいってことでしょ。
0238nobodyさん04/10/20 19:48:35ID:???
>>236
いちいちEUCにしないで全部SJISでやればいいのに
エンコード対象が[^\w.-]ではダメなの?
0239nobodyさん 04/10/20 20:16:04ID:???
>>238
sjisだとメタ文字がコード含まれれるから\wじゃ駄目でそ。
eucも最上位ビットに1立つから\w駄目でない?
0240nobodyさん04/10/20 22:12:07ID:???
>>238
SJISは正確なマッチングが出来ないんじゃなかったっけ?
0241nobodyさん04/10/20 22:16:04ID:???
>>240
       , -,:'   / ̄) i{'r‐-、 `ヽ、
.    _...,,o‐y    ,:'- '⌒   ⌒ヽ. `ヽ' ,
    (o(  ,'    / /     、 `ヾ.   ヾ,
  ,:'´//7,'  ,' .,' ,:'   !  } i  !', ':,  ':,    ゙:,
  ,' / ,' {l.  ! {/   ,イ / }|  !|', !.  ',  ', ゙,
 ハ〃 ! !|  | |  ∠/ ,:'-ノ} /リ l ,ム.  !  } |!
  ハヽ、ゝ!|  l | ,:',;='ィ'、'´ ,'.ノ ノ.,;lノ=、l .,' ,' ,' ノ
    {   l l ', |'ヲi(_ノ.}  ´    i(ノ.}゙!ノ,:',:''´
     ',  h. ', ',゙、 ':゙゙_.ノ.     ':゙_ノ〃ン
     ':, { ',', ':,':,         丶   ,' l .}
      ヾ ':,':, ':ヾ、._    「´/    ,' | .,'    / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
        `ヾ-、`ヽ_    `´ _,.ィリ.ノ ,'  < なんとなかるよ、絶対大丈夫だよ!
         リ';',ヾ|  ` ‐┬ ´ _ノノ,'/     \______________
          ヾ,、-- 、 _ |     ´ノ'
          f ヾ、..___ ヽ、 ー‐''
         /_......_     \
0242nobodyさん04/10/20 22:31:34ID:???
キモAA貼るヤシ死ねよ
0243nobodyさん04/10/20 22:35:28ID:xGLMj0YB
my ($abc, $def) = @_;

このコードの意味がさっぱり分からんのでオシエテクリソ-

0244nobodyさん04/10/20 22:56:55ID:???
@_ さんが袋に詰め込んでいる物を
$abc, $def の2人が「俺の物だ」って奪うんだよ。

でも不思議なことに奪われた袋の中身はなくなっていなーい。
0245nobodyさん04/10/20 23:02:27ID:???
ワロタw
0246nobodyさん04/10/20 23:14:24ID:xGLMj0YB
>>244
@_は変数ではないですよね?
もう少しヒントクリソー
0247nobodyさん04/10/20 23:26:27ID:???
いや変数だよ。特殊変数。
0248nobodyさん04/10/21 01:10:59ID:???
SJISならこれでいいんでは?
$str =~ s/([\x81-\x9f\xe0-\xfc])([\x40-\x7e\x80-\xfc])/sprintf("%%%02X%%%02X",ord($1),ord($2))/eg;

っと、半角カナ用にもう一押し必要か。残念!
\xa0-\xdf斬り。
0249nobodyさん04/10/21 01:31:19ID:???
ASCII文字以外がある場合って書いてあるけど、
ASCII文字って厳密にはどこまでを指してんだ?
半角英数字記号をASCIIってとらえるんなら、
0250nobodyさん04/10/21 02:46:20ID:???
perl 特殊変数でググれば幾らでも出てくるよ。
025120104/10/21 05:43:48ID:???
報告その1
LAN側からのみルーターにプライベートアドレスでtelnetでアクセス
で情報を得る。

0252nobodyさん04/10/21 10:50:09ID:???
>>243
my ($abc, $def) = @_;
print ($abc, $def);
print \n;
print @_;
する
025322104/10/21 11:33:49ID:???
>>237

$temp_euc = $temp;              # $tempはsjisで、ファイル名だけが入ってます
&jcode::convert (\$temp_euc, "euc");    # $tempをEUCにした$temp_eucを用意
if ($temp_euc =~ /[\x8E\xA1-\xFE]/) {  # Perlメモの正規表現より「ASCII以外」の文字列がある場合
 $temp_euc =~ s/([\x8E\xA1-\xFE])/'%'.unpack("H2", &euc2sjis ($1))/eg; # ここを変更
}
print <<"HTML";
<A href="$absolute_dir\/$temp_euc">$temp</A> # 絶対パスとファイル名を結合したパスへとリンク
HTML

sub euc2sjis { # 追加したサブルーチン
 my $str = $_[0];
 &jcode::convert (\$str, "sjis", "euc");
 return $str;
}

>unpack("H2",eucをsjisに変換する関数($1))
と言って下さったように変えてみたのですが、HTML部に表示されるエンコードされたURLは変わらずEUCのままでした。
追加したサブルーチンが動いていないのかとも思って確認しましたが、
単体で動かして確認したところ、sub euc2sjisは正常に動いているようです。

他の方が提示してくださった方法も見てみます。
0254nobodyさん04/10/21 11:58:55ID:???
>>252
\nはダブルクオートで囲みやがれ
0255nobodyさん04/10/21 12:09:34ID:???
EUC->SJIS変換には最低2バイト必要なわけで。1バイトなら無変換なのもしょうがないかと。
なんか、そこはかと遠回りしている気がするよ。\Wをエンコードするだけじゃ動作しなかったっけ?別に正確なURLエンコードを目指さなくても動作すればそれでいいのでは?
0256nobodyさん04/10/21 12:24:56ID:???
ttp://pc5.2ch.net/test/read.cgi/php/1095633323/478
諦めるのかw
0257nobodyさん04/10/21 12:30:19ID:a34sr5QL
フォームから申し込みがあるたびに
a0001
a0002
a0003
という風に増加する変数を作りたいのですがどうすればいいでしょうか?
参考になるサイトなんかあったら教えてください。
宜しくお願いします
0258nobodyさん04/10/21 12:37:54ID:???
>>257
$hensu = a0001;
$hensu++;
print $hensu;
0259nobodyさん04/10/21 12:39:13ID:???
Perl マジカルインクリメントでぐぐれ
0260nobodyさん04/10/21 12:55:04ID:???
>>258
レスありがとうございます。素朴な疑問ですが、
アルファベット文字含んでても、++で問題なく a002 になるんでしょうか?
>>259
調べてみます。ありがとうgざいます。
■ このスレッドは過去ログ倉庫に格納されています