public static IP5Any RequireFile(Runtime runtime, Opcode.ContextValues context, P5Scalar file) { if (file.IsInteger(runtime) || file.IsFloat(runtime)) { var value = file.AsFloat(runtime); var version = runtime.SymbolTable.GetScalar(runtime, "]", false); var version_f = version.AsFloat(runtime); if (version_f >= value) return new P5Scalar(runtime, true); var msg = string.Format("Perl {0:F} required--this is only {1:F} stopped.", value, version_f); throw new P5Exception(runtime, msg); } var file_s = file.AsString(runtime); var inc = runtime.SymbolTable.GetHash(runtime, "INC", true); if (inc.ExistsKey(runtime, file_s)) return new P5Scalar(runtime, 1); var ret = LoadFile(runtime, context, file_s); if (ret == null) { var message = new System.Text.StringBuilder(); var inc_a = runtime.SymbolTable.GetArray(runtime, "INC", true); message.Append(string.Format("Can't locate {0:S} in @INC (@INC contains:", file_s)); foreach (var dir in inc_a) { message.Append(" "); message.Append(dir.AsString(runtime)); } message.Append(")"); throw new P5Exception(runtime, message.ToString()); } return ret; }
public static P5Scalar Negate(Runtime runtime, P5Scalar value) { if (value.IsString(runtime)) { string str = value.AsString(runtime); bool word = true; foreach (var c in str) { if (!(c == '_' || (c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z'))) { word = false; break; } } if (word) return new P5Scalar(runtime, "-" + str); } if (value.IsFloat(runtime)) return new P5Scalar(runtime, -value.AsFloat(runtime)); return new P5Scalar(runtime, -value.AsInteger(runtime)); }