$name = "LPA";
$date= 39;
$file = "/pathtoFile/window/$name/cavin_l/'$name'_formula_24rw$date.csv";
我希望将$file
设置为等于
/pathtoFile/window/LPA/cavin_l/LPA_formula_24rw39.csv
但是它将$ file设置为:
/pathtoFile/window/LPA/cavin_l/'39.csv
有人可以帮我找出我要完成的正确语法,但似乎无法理解吗?预先感谢。
答案 0 :(得分:4)
您成为过时的'
(引号)包装分隔符的受害者。
$name'_formula_24
被解释为$name::_formula24
,由于该变量未定义,因此将插入空字符串。
您应该将其更改为
$file = "/pathtoFile/window/$name/cavin_l/${name}_formula_24rw$date.csv"
引用man perldata:
Perl中有两个包装分隔符:双冒号(“ ::”)和 单引号(“'”)。普通标识符可以以 双冒号,并且可以包含由双精度分隔的多个部分 冒号。单引号有相似的规则,但例外 在标识符末尾它们是不合法的:也就是说, “ $'foo”和“ $ foo'bar”是合法的,但“ $ foo'bar'”则不合法。
答案 1 :(得分:3)
一种方法是在变量名周围使用大括号,如下所示:
$file = "/pathtoFile/window/$name/cavin_l/${name}_formula_24rw$date.csv";
中描述了此语法
就像在某些shell中一样,您可以将变量名称括在大括号中,以 使其与后面的字母数字(和下划线)保持一致。
答案 2 :(得分:3)
字符串中的double quotes "..."
内插变量。然后的问题是,在您尝试使用变量名时,并没有清楚地描绘出变量名,并且解释器最终会寻找
$name::_formula_24rw
也就是说,包_formula_24rw
中的变量$name
;这是因为出于历史原因,变量名后面的'
(因此'
中$name
之后的$file
仍然是interpreted as scope ::
。由于没有这样的变量,因此您以第一个'
结尾,然后是$date
的值。
最重要的要点:use warnings;
会抓住这一点。尝试运行
use warnings;
use strict;
my $name = "LPA";
my $date= 39;
my $file = "/pathtoFile/window/$name/cavin_l/'$name'_formula_24rw$date.csv";
它会打印
在连接(。)中使用未初始化的值$ name :: _ formula_24rw或在...处使用字符串
请始终在程序的开头始终有use warnings;
和use strict;
。
因此,请使用${...}
,其中{}
分隔变量名称
my $file = "/pathtoFile/window/$name/cavin_l/${name}_formula_24rw$date.csv";
或从单独的字符串中将其拼凑起来
my $file = '/pathtoFile/window/'
. $name . '/cavin_l/' . $name . '_formula_24rw' . "$date.csv";
答案 3 :(得分:0)
像Perl中的大多数事情一样,有很多方法可以完成相同的任务。
您可以使用<?php
require 'config.php';
if ($_SESSION['logged_in'] != 1 ){
$_SESSION['message'] = "Please login!";
header("location: /prac?error");
}
else
{
$user=$_SESSION['lec'];
}
if (isset($_GET['done']))
{
include 'done.php';
}
if (isset($_GET['error']))
{
include 'error.php';
}
?>
<table >
<tr>
<td width="20%" align="center">
<?php $sql = "SELECT propic FROM lecturer WHERE username='$user'";
$result = $conn->query($sql);
$row = $result->fetch_assoc();
?>
<img id="mainpropic" src="propics/<?php echo $row['propic'];?>" width="200px" height="200px" >
</td>
<td >  </td>
<td>
<form action="" method="post">
<table cellpadding="2" >
<tr>
<td>
User Name:
</td>
<td>
<?php echo $_SESSION['lec'];?>
</td>
</tr>
<tr>
<td>
EC Number:
</td>
<td>
<?php
$sql = "SELECT ecnumber FROM lecturer WHERE username='$user'";
$result = $conn->query($sql);
$row = $result->fetch_assoc();
echo $row["ecnumber"];?>
</td>
</tr>
<tr>
<td>
Name:
</td>
<td>
<?php
$sql = "SELECT name FROM lecturer WHERE username='$user'";
$result = $conn->query($sql);
$row = $result->fetch_assoc();
echo $row["name"];
?>
</td>
</tr>
<tr>
<td>
Email:
</td>
<td>
<?php
$sql = "SELECT email FROM lecturer WHERE username='$user'";
$result = $conn->query($sql);
$row = $result->fetch_assoc();
echo $row["email"];?>
</td>
</tr>
<tr>
<td>
Phone Number:
</td>
<td>
<?php
$sql = "SELECT phonenumb FROM lecturer WHERE username='$user'";
$result = $conn->query($sql);
$row = $result->fetch_assoc();
echo $row["phonenumb"];?>
</td>
</tr>
<tr>
<td>
Department:
</td>
<td>
<?php
$sql = "SELECT dept FROM lecturer WHERE username='$user'";
$result = $conn->query($sql);
$row = $result->fetch_assoc();
echo $row["dept"];?>
</td>
</tr>
<tr>
</tr>
<tr>
<td>
<input type="button" value="Edit Profile" class="btn btn-primary btn-sm" data-toggle="modal" data-target="#Modal">
</td>
<td>
</td>
</tr>
</table>
来定义变量名的边界
{}
或者,您可以使用串联来连接字符串。
my $file1="/pathtoFile/window/$name/cavin_l/${name}_formula_24rw$date.csv";
这两种方法都会产生相同的结果。
my $file2="/pathtoFile/window/$name/cavin_l/" . $name ."_formula_24rw" . $date . ".csv";
输出
use strict;
use warnings;
my $name="LPA";
my $date="39";
my $file1="/pathtoFile/window/$name/cavin_l/${name}_formula_24rw$date.csv";
my $file2="/pathtoFile/window/$name/cavin_l/" . $name ."_formula_24rw" . $date . ".csv";
print "$file1\n$file2\n";