• ベストアンサー

$in{'~'}を$~に変換

CGIを改造中です。 変数の処理なのですが、サブルーチン内で利用するときに「$in{'~'}」と言う形でしか表示してくれません。これを「$~」の形にしたいです。 数が少なければ「$~ = $in{'~'}」を個数書けばいいのでしょうけど、結構数があるので、何か簡単な方法で変換できないかと考えています。 良い方法があれば教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
  • kabaokaba
  • ベストアンサー率51% (724/1416)
回答No.2

ハッシュのままで何か不都合があるのかなと 疑問に思いつつ・・・ #実際ハッシュは #「(変数の)値に別の値を対応させる」 #ために存在するわけだから けど,まあ,やろうと思えばkeys関数でできますよ. %in=( 'X' => 1, 'Y' => 2, 'Z' => 3, ); for $key (keys %in){ ${$key}=$in{"$key"}; print "key; $key ${$key}\n"; } print "$X $Y $Z"; strictとwarningsのプラグマを外さないといけないので 副作用の方が大きいでしょうが.

master-3rd
質問者

補足

すみません。方法が良くわからないのですが… やりたいことは#1さんへの補足に記入してあります。 手順としては… 新規データ記入フォーム→ログへの書き込み→html出力。 この場合、$~でhtml出力サブルーチンへデータが移動します。 修正データ入力→ログへの書き込み→記事Noのhtmlファイル削除→html出力。 この場合、$in{'~'}で修正サブルーチンへデータが移動します。 と言うことで、html出力の手前で「$~ = $in{'~'}」と言う処理をさせたいです。 何か良い方法は無いでしょうか?

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (3)

  • maura
  • ベストアンサー率46% (48/104)
回答No.4

#2 の strictとwarnings の話は、無視して構いません。 このキーワードで”ピン”とくる人だけに 対しての注意書きです。

全文を見る
すると、全ての回答が全文表示されます。
  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.3

「$~ = $in{'~'}; を実行する」のが (基本的には) #2 の for 文なんだけどなぁ. だから, #2 を試せば問題は氷解するはずなんだけど....

全文を見る
すると、全ての回答が全文表示されます。
回答No.1

私はPerlしか知らないので、そのCGIスクリプトがPerlであれば、の話になってしまいますが・・・ 格納先はスカラー変数じゃないとダメなのでしょうか? だとすると($one,$two,$three,$four,$five....)=values %in; という方法しか私には思いつかないです・・・。 配列でもよければ、 @form=values %in; で一気に格納できるのですが・・・。

master-3rd
質問者

補足

返答ありがとうございます。 現在、データベース的なものを作ろうとしています。 そして、その結果(レコード)をhtml出力しようとしています。 その「htmlファイルに出力」をする際、「新規作成」と「修正」の処理をさせる必要がありますよね。 html作成部分を、「新規作成」と「修正」の部分で共用しようと考えています。 しかし、「新規作成」の時は「$~」でちゃんと出力するのですが、修正時は「$in{'~'}」でないと出力してくれません。 その為、「$in{'~'}」を「$~」の形に修正する必要があります。 さて、ご指摘のとおり、やってみたのですが、どういう法則かわからないのですが、うまく当てはまりません。ずれて保存されている感じです。(もしかして、フォームの順番順?) その他の方法があればお願いします。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • 変数内の特定の文字の数を数えたい

    パール初心者です。 基礎的なことは知っています。フリーCGIのある程度の改造は出来ますが、自作は出来ません。 質問は変数の中にある特定の文字の個数をカウントする方法です。 変数 $abc="01_01_01" があるとします。 この変数の_(アンダースコア)の数を数えたいのです。 _の数を数えて2個以上ある場合、別の処理をさせたいと考えています。 パターンマッチ演算子を使えばいいのだと思うのですが、私の知識ではよくわかりませんでした。 初心者にもわかりやすい説明で教えてください。 お願いします。

    • ベストアンサー
    • Perl
  • CGIの中でSSIが出来ないので直接呼び出したいのですが...

    データベースCGIを改造中です。 左にデータベース内のジャンルをリスト表示し、右側にリスト一覧・データ詳細を表示するようにしたいと思っています。 ジャンル一覧にはそのジャンルのレコード数をSSIで表記しています。 リスト表示はsearch.cgiで管理、レコード数表示はcount.cgiで表示させるようにしています。また、レコード数表示のcount.cgiはジャンル数確認以外にも利用しています。 リストを表示する手前に置くジャンル一覧ページはhtmlで作っています。レコード部分は<!--#include virtual="./count.cgi?mode=genre&genre=1" -->と言うような書き方をしています。 リスト表示のsearch.cgiをデザインを統一する為スキンを利用する形で作成しようとしています。しかし、上で使ったジャンル一覧ページをそのまま利用しようとしたのですが、SSIを利用したレコード数の表示が出来ません。 そこで、CGIの中でSSI的なものを表示させたいと思うのですが、どのようにしたら良いでしょうか? ふと考えたのは「count.cgiからジャンル数をチェックする部分を抜き取りそれをsearch.cgiのサブルーチンとして動作させ、そのサブルーチンを動作させるようにスキン部分にどうにかコードを書込みする」 と言うものですが、この「スキン部分にどうにかコードを書込みする」の部分がさっぱりです。 sub count部分は、「リスト取得」→$in{'genre'} == $genreだったら$ken++ →結果表示、としています。 頭がこんがらがって考えがまとまってないです。 どう考えればば良いでしょうか?

    • 締切済み
    • CGI
  • Perlでuse strictと %inの共存

    use strictを使うと、変数の使用に厳密にチェックしてくれるので、便利だと思い使いましたが、ReadParse後の%inを利用する場合に宣言されていないエラーが表示されます。意味的には正しいですが、$in{'test'}など CGIで受け取った内容が扱えなくなるので、困っております。何か解決方法は有るのでしょうか? use strict; require 'cgi-lib.pl'; require 'jcode.pl'; &ReadParse; my $x = $in{'md'};

    • ベストアンサー
    • Perl
  • ファイル間の変数引き継ぎ方法を教えてください。

    初心者です。初歩的な内容ですみません。 cgiのファイル間で変数を引き継ぎたいです。 入力.html  (postで変数を引継ぎ)  ↓ 処理1.cgi (html吐き出しなし)(変数追加・改めてpostのような形で引継ぎ)  ↓ 処理2.cgi (変数利用) cookieや ファイル名.cgi?key=変数 と言う形ではなく htmlのpostのようなことをcgiでもやりたいです。 よろしくご指導お願いいたします。

    • ベストアンサー
    • CGI
  • 16進数を2進数に変換するコードを知りたい

    16進数を2進数に変換するコードをselect caseを用いて作りました。 しかし、遅いです。 場合分けの考え方を利用して、例えば変数がFだったら・・みたいな感じで16個のcase全てを書いてみたのですが、もし他にもっと早く処理する方法が合ったら教えてください。 また、データ型はこれが最良でしょうか?? データ型 変数1、2 使用文字:相当長い文字列のためstring 変数3   使用文字:1-0,A-F,及び0000-1111:string 変数4、5 使用文字:1-1,000,000程度:integer

  • 文字を16進変換

    C言語にて関数などを使わずに計算式なので文字を16進数に変換したいのですがどのような処理にしたらいいでしょうか?? char型で用意した変数に1文字を格納し、それをアスキーコードの16進数に変換したいです。 よろしくお願いします。

  • フォームから値を配列に渡すときの処理方法

    フォームから値を配列に渡すときの処理方法 PERLでフォームからのデータの受け取り方、処理の仕方でご教授頂ければ助かります。 よろしくお願いいたします。 配列の要素数の調べ方、処理方法についてご教授頂ければ幸いです。 HTMLよりフォームのデータをcgi-lib.plの[&ReadParse(*in);]受け取っているのですが ●HTML側 セレクトボックスを5つ用意し同じNAME (select01)のnameを付けて CGI側で受け取りたいと考えております。 (基本的に間違えでしょうか?セレクトボックスの個数分用意したほうがいいでしょうか?) 受け取った値をCGI側で受け取り要素の個数をカウントさせ 条件に合わせてERRORを出したいと考えたのですが・・・ エラーの内容は 1っこ選んであればOKでそれ以外 0の場合はNG 2個以上選択した場合は NGという形を取りたいのですが。 配列の要素数で分岐できるのかと考えたのですが そもそもこの考え、処理方法は間違えでしょうか? アドバイスを頂ければ幸いですm(__)m require 'cgi-lib.pl'; &ReadParse(*in); ------------------------- # データ代入 @aaa =$in{'select01'}; #フォームデータを配列に代入 $count= @aaa; この場合だと 要素の数($count)は 1になっております。 いろいろ調べていますと cgi-lib.pl を使用した場合はブラウザ上で スペースに見えるが \0 だそうで・・・・ カンマで区切って 要素数を正しく表示させたいと思ったのですがうまくいきません。。 @aaa = split(/\0/,$in{'select01'}); などいろいろ試してみたのですが区切りがうまくいきません また、 $" = ','; @aaa = split(/\0/,$in{'select01'}); とすると カウントが変わったのですが・・・・ フォーム側の一番目を選択して送信するとカウントが 1!!  1と5番目を選択して送信したら 5!え?? で要素数を正しくカウントされていないようです。 ちなみに print @aaa; としてみると aaa,,,,eee と空の内容がカウントされてる?ようなかたちになりました。 ここで、行き詰ってしまいまして、もともとの私の安易な考えが間違えなのか? 書き方が間違えなのか。 と思い皆さまのアドバイスを頂ければ幸いです。 ・プログラムの考え方的には間違えなのか ・一般的な正しい処理方法はどうなのか それとも。。。。要素数で分岐することが可能であるのか。 お手数ですがアドバイス頂ければ幸いです。

    • ベストアンサー
    • Perl
  • マクロ教えてください

    マクロについての質問です。 サブルーチン間ですべての変数を共有する方法ってありませんか。 Call Prg(A,B,C) というやり方は知ってますが、サブルーチンの数が結構ありますし変数も多いため、 もっとスマート?にできないかなと思いまして。 よろしくお願いします。

  • 全文表示…の仕方。

    CGI勉強中です。 日記帳作成CGIをちょっと改造してコラム表示CGIの作成をしたいと考えています。 やりたいことは以下のことです。 http://www.jij.co.jp/ にあるように本文の一部だけを表示させるという物です。 本文は「$comment」で変数としています。 まず、CGIの中で、日記を表示するページ部分をコピーし「sub column {~~}」として作りました。 本文内に、例えば「<!-- 改行 -->」が入るとそれ以下を表示させず、また、「<!-- 改行 -->」を「>>全文を読む」等に変換したいと思っています。 方法がわからないのはこの2点です。 「sub column {~~}」内のみ、「<!-- 改行 -->」を「>>全文を読む」等に変換する。 「<!-- 改行 -->」が入るとそれ以下を表示させ無いようにする 初心者なので、簡単に説明していただければありがたいです。 また、「このスクリプトで同じことをやっている」等の情報でもかまいません。 よろしくお願いします。

    • 締切済み
    • CGI
  • リファレンスをサブルーチンの戻り値にしてもOKですか?

    ■ サブルーチン内部で処理した結果を格納した、配列、ハッシュ、スカラーなどのデータを戻り値として利用する必要があります。その場合、どうするのが標準的なやり方でしょうか? ■ return (配列へのリファレンス, ハッシュへのリファレンス, スカラー); などとやってしまっても問題はないでしょうか? ■ 下のプログラムを試したところ、予想に反しちゃんと 「31415」と表示されました。 #!/usr/bin/perl -w sub subroutine{ my @a = (3, 1, 4, 1, 5); return \@a; } my $b = subroutine{}; print @$b; ■ サブルーチン内部で使用した変数へのリファレンスをサブルーチン 外で使っていいのだろうか? サブルーチンの処理が終了した時点でサブルーチン内部で使用した 変数はメモリーから消去されるのかと思ったものですから。

    • ベストアンサー
    • Perl
このQ&Aのポイント
  • EW-M754TWでハガキを印刷すると、上半分のみ出力され、下半分は2枚目に印刷される問題が発生しています。
  • USBメモリを挿した際にプリンターが写真を大量に読み込む問題も発生しています。
  • 問題の原因は内臓メモリーの容量不足かもしれません。
回答を見る