如何从Perl中的字符串插入变量名?

0 perl

我想在$font1下面插入一个变量.变量$font1是字体的名称,例如arial.我真的希望它作为变量返回$arial(或者其他什么$font).

$arial被调用时,它会从一个文件夹中的ARIAL.TTF通过get_fonts.pl我的服务器上.

我已经尝试了所有\$$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");
      }
...
Run Code Online (Sandbox Code Playgroud)

不要理会排除结束括号..

注意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";
}
Run Code Online (Sandbox Code Playgroud)

我也希望做同样的事情$color但是,一旦$font被弄清楚,我应该能够解决这个问题.

谢谢你的帮助.

小智 10

如果$ font等于"arial"并且您想要访问$ arial,则需要:

${$font}
Run Code Online (Sandbox Code Playgroud)

但你几乎肯定不想这样做.我不太确定你在代码中尝试做什么,但似乎使用哈希会更简单,更好:

$fonts{'arial'} = "/path/to/arial"
Run Code Online (Sandbox Code Playgroud)

另请注意,如果您使用的话,$ {$ font}示例将无效

use strict;
Run Code Online (Sandbox Code Playgroud)