プログラムPerlの超初心者です。
プログラムで「$path0」をまず設定していて、「path0以下で『W・・・』というフォルダ名があったら「path1」として「path0+\+dname」と設定したいのです。(以下のように書きました)
foreach $dname ( @dlist ){
if( $dname=~/W/ ){
$path1=$path0.”\".$dname;
print( "$path1\n" );
しかし、『$path1=$path0.”\".$dname;』ここで「Can't find string terminator "'" anywhere before EOF at ****.pl line **.」とエラーメッセージが出ました。
どう直せばいいでしょうか?
分かりにくくて申し訳ないのですが、教えていただけるとありがたいです。
No.6ベストアンサー
- 回答日時:
○「 ・' (シングルクオーテーション/引用符) を使って、\ による展開をしないようにする」
は間違いでした。
他の文字だと展開されないのですが、\'が展開されるのを失念していました。
参考)
https://perldoc.jp/docs/perl/5.30.0/perldata.pod
> ダブルクォートの文字列リテラルでは、バックスラッシュの置換と 変数の置換が行なわれ、
> シングルクォートの文字列では、 (\' と \\を除いて)これらの置換は行なわれません。
(= シングルクォートの文字列では \' と \\ を展開する)
○ 「Windowsの場合『¥』と『/』どっちを使うといいのでしょうか?」
バックスラッシュとスラッシュを書き間違えたものだと思い、
円記号とバックスラッシュについての質問と解釈して、
#4のように回答しました。
「Windowsの場合
**パスの区切り文字として**
『¥』と『/』どっちを使うといいのでしょうか?」
という意味でしたら、
・下記のような点を考慮して、便利な方を使う。
\と/の変換が必要か?必要ならどれくらいの量か?
プログラム中に何度パス区切り文字を書く機会があるのか?
共同制作者の方針
使用するモジュールの仕様
・私個人で作るなら、(上記のような点が考えずに) スラッシュをベースにプログラムを作り、必要な箇所でバックスラッシュとの置換を行う
No.5
- 回答日時:
ダブルクォートの中で \ は特殊な意味を持つけど, シングルクォートの中でも特別な意味を持つ場合があって, 今のケースではその「特別な意味を持つ場合」になってしまうので単純に
"\" を '\' に置き換えればいい
というものではない (実際にやればわかるがシングルクォートにしてもエラーが出るはず). なので, "\\" または '\\' のどちらかにしないといけない.
で, Windows は「コマンドプロンプトのレベル」では / と \ を区別しているんだけど, 内部的には / でも \ でもパスの区切りとみなしている. なので, コマンドプロンプトレベルと内部レベルとを使い分けられるなら, Windows であっても / を使うほうがいいんじゃないかなぁと個人的には思う.
ついでに指摘しておくと「$dname=~/W/」という条件では「『W・・・』というフォルダ名」にはならないよ. あと foreach の変数は可能なら my をつけて宣言すべきだし, 自分なら foreach で grep 使ってしまうなぁ.
No.4
- 回答日時:
バックスラッシュは、左上から右下への線で、
スラッシュ(右上から左下への線)とは別の文字です。
使い方も違います。
円記号とバックスラッシュは(フォントやソフトによっては)同じ文字です。
> Windowsの場合『¥』と『/』どっちを使うといいのでしょうか?
「キーボードの円記号を押して表示される文字」を使ってください。
/ (スラッシュ)で代用はできません。
> それからダブルオーテーションではなくシングルオーテーションを使用する場合ただ単にダブルのところをシングルに変えればいいのですかね?
はい。
No.3
- 回答日時:
追記。
エラーメッセージを読むようにしましょう
「Can't find string terminator "'" anywhere before EOF」
""の文字列の終わり(string terminator) がファイルの終わりまでに(anywhere before EOF) 見つからなかった(Can't find)
↓
(意訳) 対応する " を書き忘れているとか、意図しない " が書いてあるとかで、ちゃんとした文字列になってない
と修正のヒントになる情報がちゃんと書いてあります。
○スクリプトの編集には、Perlに対応した色分けに対応したエディタを使うのもよいでしょう。
「文字列の色」「命令の色」等が付くので、意図しない文字列が判別しやすくなります。
No.2
- 回答日時:
" (ダブルクオーテーション/二重引用符) を使った文字列の性質を理解し、正しい使い方をしましょう。
今回の場合なら
・\\ と書いて「バックスラッシュ(または円記号)そのもの」と解釈させる
・' (シングルクオーテーション/引用符) を使って、\ による展開をしないようにする
のどちらかが必要です。
Perlの"(ダブルクオーテーション/二重引用符) の文字列では、一部の文字が展開されます。
バックスラッシュ(または円記号) は、続く文字列とセットで特殊な展開が行われます。
(\n が 「改行文字」 に展開される、など)
\" は、 「"そのもの」に展開されます。
これは、ダブルクオーテーションの文字列中にダブルクオーテーションを書きたいときに使います。
今回の場合
$path1=$path0.
” ← ここから文字列が始まって
\" ← が「"」という文字と判定される(=文字列の終りではない"
.$dname;
print( ← までが文字列の中
"← 文字列終り
$path1\n ← 文字列の外
" ); ← 新しい文字列
と解釈されます。そのため、意図しないプログラムになってエラーになっています。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Windows 10 pathが通らない 2 2023/03/27 11:28
- その他(Microsoft Office) マクロVBAについて 1 2022/09/06 18:12
- Excel(エクセル) エクセルのマクロについて教えてください。 1 2022/10/26 17:14
- CGI -T(汚染モード)でメールが送れません 1 2022/06/12 14:11
- Windows 10 IT初心者です! powershellで以下のようなエラーが出ました オブジェクト参照がオブジェクト 1 2023/05/17 11:30
- Visual Basic(VBA) Excel vbaについての質問 3 2023/04/18 16:14
- Visual Basic(VBA) 【前回の続き続きです、ご教示ください】VBAの記述方法がわかりません。 2 2022/08/24 20:49
- Excel(エクセル) エクセル VBA For Next 繰り返しの書き方を教えてください 6 2022/09/01 14:11
- Visual Basic(VBA) 【前回の続きです、ご教示ください】VBAの記述方法がわかりません。 2 2022/08/16 16:44
- Visual Basic(VBA) 【ご教示ください】VBAの記述方法がわかりません。 2 2022/08/12 21:28
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
正規表現での文字の抜き出し
-
Perlで Right関数に近い処理を...
-
VBA split(文字列, ★) ★←複数...
-
パイソンエラーについて
-
CSVファイルの中で、「 , 」カ...
-
EXCELからCSVにすると余計なカ...
-
VBA 置換文字がみつからない時
-
英数字のみ全角から半角に変換
-
VBA 文字に半角が含まれて...
-
マクロを使ってフォルダー内に...
-
エクセルにMicrosoft Barcode C...
-
IEからEdgeへの移行に伴うIMEの...
-
全角英数字の必要性が理解できない
-
文字コードの%E3%80%とは何です...
-
EXCEL VBA でCTRL+Fのダイア...
-
Excel VBAでPDFファイルをMicro...
-
全角入力
-
char型全角数字から、int型半角...
-
Accessのテキストボックスの入...
-
住宅にカナを入力する際に丁目...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
パイソンエラーについて
-
Perlで Right関数に近い処理を...
-
Malformed UTF-8 character
-
Perl(Windows)の文法について
-
日本語文字列の指定長(byte)切出し
-
splitの逆の処理
-
数字を文字列に変換し短縮化する
-
メールヘッダのMIMEエンコード...
-
Perl/Tk使用時のUTF-8コード文...
-
文字列と数字を含むセルから数...
-
perlを使用しての特定行抽出に...
-
GDBでデバッグするとき文字列の...
-
プログラミング HSPの変数につ...
-
perlで文字列を短く(圧縮)し...
-
関数chop
-
CSVファイルの中で、「 , 」カ...
-
英数字のみ全角から半角に変換
-
エクセルで数値を全角文字(カ...
-
EXCELからCSVにすると余計なカ...
-
住宅にカナを入力する際に丁目...
おすすめ情報
今、回答いただいた方々ありがとうございます。
「kmee様」が細かく教えていただいているのですが、新たに質問ですがWindowsの場合『¥』と『/』どっちを使うといいのでしょうか?
それからダブルオーテーションではなくシングルオーテーションを使用する場合ただ単にダブルのところをシングルに変えればいいのですかね?
あまりにも初心者過ぎて申し訳ないのですが、よろしくお願いします。