Почему Perl жалуется на синтаксическую ошибку во время компиляции моей программы с этой строкой HTML? - PullRequest
0 голосов
/ 14 сентября 2010

Я столкнулся с проблемой в моем коде.Всякий раз, когда я пытаюсь вставить текстовое поле, это дает ошибку.Что не так в синтаксисе здесь?

   print '<table>';
  print "<tr style='background-color:#CDC9C9;'>
<td><A HREF=\"http://localhost/cgi-bin/AddUser.cgi\">ADD</A></td>
<td></td>
<td><b>UserId</b></td>
<td><input type="text" name="UserId"></td>
<td><b>UserName</b></td>
 <td><input type="text" name="User_Name"></td>
 <td><input type="submit" name="Filter" value="Filter">  </td>
  </tr>";
print"</table>"; 

Ответы [ 3 ]

5 голосов
/ 14 сентября 2010

Если у вас есть строка в двойных кавычках, она не может содержать неэкранированные двойные кавычки (по понятным причинам).

Некоторые способы обойти это:

1 / Избегать двойных кавычек.

print "<tr style='background-color:#CDC9C9;'>
<td><A HREF=\"http://localhost/cgi-bin/AddUser.cgi\">ADD</A></td>
<td></td>
<td><b>UserId</b></td>
<td><input type=\"text\" name=\"UserId\"></td>
<td><b>UserName</b></td>
<td><input type=\"text\" name=\"User_Name\"></td>
<td><input type=\"submit\" name=\"Filter\" value=\"Filter\">  </td>
</tr>";

2 / Переключение на строку в одинарных кавычках (поскольку ваша строка не содержит переменных или escape-последовательностей).

print '<tr style="background-color:#CDC9C9;">
<td><A HREF="http://localhost/cgi-bin/AddUser.cgi">ADD</A></td>
<td></td>
<td><b>UserId</b></td>
<td><input type="text" name="UserId"></td>
<td><b>UserName</b></td>
<td><input type="text" name="User_Name"></td>
<td><input type="submit" name="Filter" value="Filter">  </td>
</tr>';

Примечание: Мне пришлось заменить одинарные кавычки в атрибуте style на двойные кавычки.

3 / Используйте документ здесь.

print <<END_OF_HTML;
<tr style='background-color:#CDC9C9;'>
<td><A HREF="http://localhost/cgi-bin/AddUser.cgi">ADD</A></td>
<td></td>
<td><b>UserId</b></td>
<td><input type="text" name="UserId"></td>
<td><b>UserName</b></td>
<td><input type="text" name="User_Name"></td>
<td><input type="submit" name="Filter" value="Filter">  </td>
</tr>
END_OF_HTML

4 / Выберите другой символ цитирования.

print qq[<tr style='background-color:#CDC9C9;'>
<td><A HREF="http://localhost/cgi-bin/AddUser.cgi">ADD</A></td>
<td></td>
<td><b>UserId</b></td>
<td><input type="text" name="UserId"></td>
<td><b>UserName</b></td>
<td><input type="text" name="User_Name"></td>
<td><input type="submit" name="Filter" value="Filter">  </td>
</tr>];

Но, как и многие другие ваши проблемы, реальное решение состоит в использовании системы шаблонов .

4 голосов
/ 14 сентября 2010

Вам нужно избегать довольно много "

Попробуйте:

print '<table>';
print "<tr style='background-color:#CDC9C9;'>
<td><A HREF=\"http://localhost/cgi-bin/AddUser.cgi\">ADD</A></td>
<td></td>
<td><b>UserId</b></td>
<td><input type=\"text\" name=\"UserId\"></td>
<td><b>UserName</b></td>
<td><input type=\"text\" name=\"User_Name\"></td>
<td><input type=\"submit\" name=\"Filter\" value=\"Filter\">  </td>
</tr>";
print"</table>";

Лучшей альтернативой будет использование heredoc как:

$table = << "TABLE";
<table>
<tr style='background-color:#CDC9C9;'>
<td><A HREF="http://localhost/cgi-bin/AddUser.cgi">ADD</A></td>
<td></td>
<td><b>UserId</b></td>
<td><input type="text" name="UserId"></td>
<td><b>UserName</b></td>
<td><input type="text" name="User_Name"></td>
<td><input type="submit" name="Filter" value="Filter">  </td>
</tr>
</table>
TABLE
print $table;
0 голосов
/ 14 сентября 2010

Вам нужно экранировать двойные кавычки, используя "\".Для больших струн я предлагаю вам использовать HEREDOC .

например:

print "My string contains quite some \"double quotes\"";
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...