我正在尝试在下面插入变量$font1
。变量$font1
是字体的名称,例如Arial字体。我真的希望它将$arial
(或任何$font
)作为变量返回。
调用$arial
时,它会通过get_fonts.pl从我服务器上的文件夹中获取arial.ttf。
我已经尝试了所有\$$font
'"$font"'
以及每种可能的变体。
我甚至尝试过if ($font=="arial"){$font = a ton of different attempts;}
do "get_fonts.pl";
&GetFonts($im);
foreach $key (keys %ENV) {
if($key !~ /[A-Z]/){
if ($key="sometext") {
$text="$ENV{'typetext'}";
$color="$ENV{'typecolor'}";
$font="$ENV{'typefont'}";
$size="$ENV{'typesize'}";
$string = qq~ $text ~;
$gd_text = GD::Text->new() or die GD::Text::error();
$gd_text->set_font($arialb, $size) or die $gd_text->error;
$gd_text->set_text($string);
my ($w, $h) = $gd_text->get('width', 'height');
$y1 = (300 / 6);
if ($w <= 380) {
$x1 = ((400 / 2) - ($w / 2));
$im->stringFT("$blue", $font1, $size, 0, $x1, $y1, "$string");
}
...
不要注意排除结尾括号..
注意whare我打电话给$font1
..如果我打电话给$arialb
一切都很好。
这是获取字体
sub GetFonts {
my($im) = $_[0];
$arial = "fonts/arial.ttf";
# I tried Tons of things here to no avail
if ($font=="arialb") {
$font1 = '$arialb'; # and so many different other attempts
}
$arialb = "fonts/ariblk.ttf";
$ariali = "fonts/ariali.ttf";
$arialbi = "fonts/arialbi.ttf";
$comic = "fonts/comic.ttf";
$comicb = "fonts/comicbd.ttf";
$verdana = "fonts/verdana.ttf";
$verdanab = "fonts/verdanab.ttf";
$verdanai = "fonts/verdanai.ttf";
$verdanabi = "fonts/verdanaz.ttf";
}
我也希望对$color
做同样的事情,但是一旦$font
被发现,我应该能够解决这个问题。
感谢您的帮助。
答案 0 :(得分:10)
如果$ font等于“arial”并且您想要访问$ arial,则需要:
${$font}
但你几乎肯定不想这样做。我不太确定你在代码中尝试做什么,但似乎使用哈希会更容易和更好:
$fonts{'arial'} = "/path/to/arial"
另请注意,如果您使用
,$ {$ font}示例将无效use strict;
答案 1 :(得分:3)
不要这样做:请参阅perldoc -q "variable name"
:
初学者通常认为他们希望变量包含变量的名称。 ...
简答:不要。答案很长:阅读FAQ条目(也可在您的计算机上找到)。更长的答案:阅读MJD的Why it's stupid to "use a variable as a variable name"(Part 2,Part 3)。
答案 2 :(得分:1)
要回答您的问题,请尝试以下类似的内容:
my $f=\$b;
$b="foo";
print $$f;
但我确实看到了一些问题:
if ($font=="arialb") {$font1 = '$arialb'}
你不应该用==进行字符串比较。 你应该使用eq运算符。
试试这段代码:
$f="sf";
$b="fs";
if($f==$b){
print "whoops";
}
另外,$ font1声明在哪里?如果它在if语句的范围内声明,那么您将无法在该范围之外看到该变量。我建议你使用pragma 用严格; 见http://www.perl.com/doc/manual/html/lib/strict.html